Test code for LM75AIM
LM75A/LM75A.cpp@0:75c4b60db793, 2012-06-27 (annotated)
- Committer:
- edodm85
- Date:
- Wed Jun 27 15:45:09 2012 +0000
- Revision:
- 0:75c4b60db793
- Child:
- 1:7d868212c8c1
Rev 1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
edodm85 | 0:75c4b60db793 | 1 | /* |
edodm85 | 0:75c4b60db793 | 2 | * Autor: Edoardo De Marchi |
edodm85 | 0:75c4b60db793 | 3 | * Date: 04/01/12 |
edodm85 | 0:75c4b60db793 | 4 | * Version: 0.1 |
edodm85 | 0:75c4b60db793 | 5 | * File: LM75.cpp |
edodm85 | 0:75c4b60db793 | 6 | */ |
edodm85 | 0:75c4b60db793 | 7 | |
edodm85 | 0:75c4b60db793 | 8 | #include "LM75A.h" |
edodm85 | 0:75c4b60db793 | 9 | |
edodm85 | 0:75c4b60db793 | 10 | #define TEMP_REG_ADDR 0x00 // Temperature address |
edodm85 | 0:75c4b60db793 | 11 | #define CONFIG_REG_ADDR 0x01 // configuration register |
edodm85 | 0:75c4b60db793 | 12 | Serial pc2(USBTX, USBRX); |
edodm85 | 0:75c4b60db793 | 13 | |
edodm85 | 0:75c4b60db793 | 14 | // costructor |
edodm85 | 0:75c4b60db793 | 15 | LM75A::LM75A(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr){ |
edodm85 | 0:75c4b60db793 | 16 | |
edodm85 | 0:75c4b60db793 | 17 | } |
edodm85 | 0:75c4b60db793 | 18 | |
edodm85 | 0:75c4b60db793 | 19 | |
edodm85 | 0:75c4b60db793 | 20 | // destructor |
edodm85 | 0:75c4b60db793 | 21 | LM75A::~LM75A(){ |
edodm85 | 0:75c4b60db793 | 22 | |
edodm85 | 0:75c4b60db793 | 23 | } |
edodm85 | 0:75c4b60db793 | 24 | |
edodm85 | 0:75c4b60db793 | 25 | |
edodm85 | 0:75c4b60db793 | 26 | float LM75A::read(){ |
edodm85 | 0:75c4b60db793 | 27 | |
edodm85 | 0:75c4b60db793 | 28 | const char tempRegAddr = TEMP_REG_ADDR; |
edodm85 | 0:75c4b60db793 | 29 | |
edodm85 | 0:75c4b60db793 | 30 | m_i2c.write(m_addr, &tempRegAddr, 1); // Pointer to the temperature register |
edodm85 | 0:75c4b60db793 | 31 | |
edodm85 | 0:75c4b60db793 | 32 | char cmd[2] = {0,0}; |
edodm85 | 0:75c4b60db793 | 33 | m_i2c.read(m_addr, cmd, 2); // read temperature register |
edodm85 | 0:75c4b60db793 | 34 | |
edodm85 | 0:75c4b60db793 | 35 | unsigned short val = ((cmd[0] << 8) + cmd[1]) >> 7; //val = (cmd[ 1 ] << 1) | ( cmd[ 0 ] >> 7 ) ; |
edodm85 | 0:75c4b60db793 | 36 | |
edodm85 | 0:75c4b60db793 | 37 | pc2.printf("reg: "); |
edodm85 | 0:75c4b60db793 | 38 | pc2.printf("%d - %d \n", cmd[1], cmd[0]); // debug |
edodm85 | 0:75c4b60db793 | 39 | |
edodm85 | 0:75c4b60db793 | 40 | float temp = (float) ((float)val * 0.5); |
edodm85 | 0:75c4b60db793 | 41 | |
edodm85 | 0:75c4b60db793 | 42 | return temp; |
edodm85 | 0:75c4b60db793 | 43 | } |
edodm85 | 0:75c4b60db793 | 44 | |
edodm85 | 0:75c4b60db793 | 45 | |
edodm85 | 0:75c4b60db793 | 46 | char LM75A::read_reg(char addr){ |
edodm85 | 0:75c4b60db793 | 47 | |
edodm85 | 0:75c4b60db793 | 48 | |
edodm85 | 0:75c4b60db793 | 49 | char data[1] = {0}; |
edodm85 | 0:75c4b60db793 | 50 | char ret = addr; |
edodm85 | 0:75c4b60db793 | 51 | m_i2c.write(m_addr, &ret, 1); |
edodm85 | 0:75c4b60db793 | 52 | wait_us(10); |
edodm85 | 0:75c4b60db793 | 53 | m_i2c.read(m_addr, data, 1); // Read register content |
edodm85 | 0:75c4b60db793 | 54 | wait_us(20); |
edodm85 | 0:75c4b60db793 | 55 | pc2.printf("reg: %#x \n\r", data[0]); // debug |
edodm85 | 0:75c4b60db793 | 56 | |
edodm85 | 0:75c4b60db793 | 57 | return ret; |
edodm85 | 0:75c4b60db793 | 58 | |
edodm85 | 0:75c4b60db793 | 59 | } |
edodm85 | 0:75c4b60db793 | 60 | |
edodm85 | 0:75c4b60db793 | 61 | |
edodm85 | 0:75c4b60db793 | 62 | |
edodm85 | 0:75c4b60db793 | 63 | /** Write to specified MMA7660FC register |
edodm85 | 0:75c4b60db793 | 64 | * |
edodm85 | 0:75c4b60db793 | 65 | * @param char addr: the internal registeraddress of the MMA7660FC |
edodm85 | 0:75c4b60db793 | 66 | * @param char data: write data to selected Register |
edodm85 | 0:75c4b60db793 | 67 | */ |
edodm85 | 0:75c4b60db793 | 68 | void LM75A::write_reg(char addr, char data){ |
edodm85 | 0:75c4b60db793 | 69 | |
edodm85 | 0:75c4b60db793 | 70 | char data2[2] = {0, 0}; |
edodm85 | 0:75c4b60db793 | 71 | |
edodm85 | 0:75c4b60db793 | 72 | data2[0] = addr; |
edodm85 | 0:75c4b60db793 | 73 | data2[1] = data; |
edodm85 | 0:75c4b60db793 | 74 | |
edodm85 | 0:75c4b60db793 | 75 | m_i2c.write(m_addr, data2, 2); |
edodm85 | 0:75c4b60db793 | 76 | wait_us(50); |
edodm85 | 0:75c4b60db793 | 77 | } |
edodm85 | 0:75c4b60db793 | 78 |