Test code for LM75AIM
Diff: LM75A/LM75A.cpp
- Revision:
- 0:75c4b60db793
- Child:
- 1:7d868212c8c1
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LM75A/LM75A.cpp Wed Jun 27 15:45:09 2012 +0000 @@ -0,0 +1,78 @@ +/* + * Autor: Edoardo De Marchi + * Date: 04/01/12 + * Version: 0.1 + * File: LM75.cpp + */ + +#include "LM75A.h" + +#define TEMP_REG_ADDR 0x00 // Temperature address +#define CONFIG_REG_ADDR 0x01 // configuration register +Serial pc2(USBTX, USBRX); + +// costructor +LM75A::LM75A(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr){ + +} + + +// destructor +LM75A::~LM75A(){ + +} + + +float LM75A::read(){ + + const char tempRegAddr = TEMP_REG_ADDR; + + m_i2c.write(m_addr, &tempRegAddr, 1); // Pointer to the temperature register + + char cmd[2] = {0,0}; + m_i2c.read(m_addr, cmd, 2); // read temperature register + + unsigned short val = ((cmd[0] << 8) + cmd[1]) >> 7; //val = (cmd[ 1 ] << 1) | ( cmd[ 0 ] >> 7 ) ; + + pc2.printf("reg: "); + pc2.printf("%d - %d \n", cmd[1], cmd[0]); // debug + + float temp = (float) ((float)val * 0.5); + + return temp; +} + + +char LM75A::read_reg(char addr){ + + + char data[1] = {0}; + char ret = addr; + m_i2c.write(m_addr, &ret, 1); + wait_us(10); + m_i2c.read(m_addr, data, 1); // Read register content + wait_us(20); + pc2.printf("reg: %#x \n\r", data[0]); // debug + + return ret; + +} + + + +/** Write to specified MMA7660FC register +* +* @param char addr: the internal registeraddress of the MMA7660FC +* @param char data: write data to selected Register +*/ +void LM75A::write_reg(char addr, char data){ + + char data2[2] = {0, 0}; + + data2[0] = addr; + data2[1] = data; + + m_i2c.write(m_addr, data2, 2); + wait_us(50); +} +