library for MAX9611 /9612 Current-Sense Amplifiers
Diff: adt7410.cpp
- Revision:
- 2:d12dffd027a8
- Parent:
- 1:131a836c6b79
- Child:
- 3:41839eb9229f
--- a/adt7410.cpp Sat Apr 26 18:12:59 2014 +0000 +++ b/adt7410.cpp Sun Apr 27 19:05:13 2014 +0000 @@ -1,6 +1,11 @@ #include "adt7410.h" - ADT7410::ADT7410(PinName sda, PinName scl, int address):m_i2c(sda,scl), m_addr(address){} + +ADT7410::ADT7410(PinName sda, PinName scl, int i2cFrequencyHz, int address,CONF_RESOLUTION res ):i2c(sda,scl), i2cAddr(address), resolution(res){ + i2c.frequency(i2cFrequencyHz); + } + + bool ADT7410::write(uint8_t regAddress, uint8_t data){ @@ -8,15 +13,74 @@ char temp[2]; temp[0]=regAddress; temp[1]=data; - return m_i2c.write(ADT7410_I2C_ADDRESS,temp,2); + return i2c.write(ADT7410_I2C_ADDRESS,temp,2)==0; } + int ADT7410::read(uint8_t regAddress, uint8_t *data,int length){ - m_i2c.write(ADT7410_I2C_ADDRESS,(char*)®Address,1); - return m_i2c.read(ADT7410_I2C_ADDRESS,(char*)data,length)==0; + i2c.write(i2cAddr,(char*)®Address,1); + return i2c.read(i2cAddr,(char*)data,length)==0; +} + +//configuration of ADT7410 sensor +int ADT7410::initADT7410(CONF_FAULT_QUEUE faultQueue, CONF_CT_PIN_POLARITY ctPinPolarity, CONF_INT_PIN_POLARITY intPinPolarity, CONF_INT_CT_MODE intCtMode, CONF_OPERATION_MODE operMode, CONF_RESOLUTION res){ + + uint8_t confByte=0; + int retVal=0; + + confByte=(res<<7|operMode<<5|intCtMode<<4|intPinPolarity<<3|ctPinPolarity<<2|faultQueue); + if(!write(0x03,confByte))retVal=-1; + else retVal=1; + return retVal; + + } + +// read 13 bit temperature +int ADT7410::readTemp(float* temperature){ + char rData[2] = {0,0}; + float tFin = 0; + int tRaw = 0; + + // set address pointer to temperature register + if(i2c.write(i2cAddr, 0x00, 1))return -1; + + // read temperature register, two bytes + if(i2c.read(i2cAddr, rData, 2))return -1; + + // temperature returned is only 13 bits + // discard alarm flags in lower bits + tRaw = (rData[0] << 8) | (rData[1]); + tRaw >>= 3; + + // handle positive and negative temperatures + // results in two's complement + if ( tRaw & 0x1000) { + tFin = (float) (tRaw - 8192) / 16; + } else { + tFin = (float) tRaw / 16; + } + *temperature=tFin; + return 1; +} + + + + + +int ADT7410::getIdNumber(void){ + + uint8_t data=0; + uint8_t regAddress=0x0B; - } \ No newline at end of file + if(i2c.write(i2cAddr,(char*)®Address,1)) return -1; + if(i2c.read(i2cAddr,(char*)&data,1)) return -1; + + else + return data; + + +} \ No newline at end of file