library for MAX9611 /9612 Current-Sense Amplifiers
adt7410.cpp@2:d12dffd027a8, 2014-04-27 (annotated)
- Committer:
- igbt6
- Date:
- Sun Apr 27 19:05:13 2014 +0000
- Revision:
- 2:d12dffd027a8
- Parent:
- 1:131a836c6b79
- Child:
- 3:41839eb9229f
comunication wit sensor works correctly
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
igbt6 | 1:131a836c6b79 | 1 | #include "adt7410.h" |
igbt6 | 1:131a836c6b79 | 2 | |
igbt6 | 2:d12dffd027a8 | 3 | |
igbt6 | 2:d12dffd027a8 | 4 | ADT7410::ADT7410(PinName sda, PinName scl, int i2cFrequencyHz, int address,CONF_RESOLUTION res ):i2c(sda,scl), i2cAddr(address), resolution(res){ |
igbt6 | 2:d12dffd027a8 | 5 | i2c.frequency(i2cFrequencyHz); |
igbt6 | 2:d12dffd027a8 | 6 | } |
igbt6 | 2:d12dffd027a8 | 7 | |
igbt6 | 2:d12dffd027a8 | 8 | |
igbt6 | 1:131a836c6b79 | 9 | |
igbt6 | 1:131a836c6b79 | 10 | |
igbt6 | 1:131a836c6b79 | 11 | bool ADT7410::write(uint8_t regAddress, uint8_t data){ |
igbt6 | 1:131a836c6b79 | 12 | |
igbt6 | 1:131a836c6b79 | 13 | char temp[2]; |
igbt6 | 1:131a836c6b79 | 14 | temp[0]=regAddress; |
igbt6 | 1:131a836c6b79 | 15 | temp[1]=data; |
igbt6 | 2:d12dffd027a8 | 16 | return i2c.write(ADT7410_I2C_ADDRESS,temp,2)==0; |
igbt6 | 1:131a836c6b79 | 17 | } |
igbt6 | 1:131a836c6b79 | 18 | |
igbt6 | 1:131a836c6b79 | 19 | |
igbt6 | 1:131a836c6b79 | 20 | |
igbt6 | 2:d12dffd027a8 | 21 | |
igbt6 | 1:131a836c6b79 | 22 | int ADT7410::read(uint8_t regAddress, uint8_t *data,int length){ |
igbt6 | 1:131a836c6b79 | 23 | |
igbt6 | 2:d12dffd027a8 | 24 | i2c.write(i2cAddr,(char*)®Address,1); |
igbt6 | 2:d12dffd027a8 | 25 | return i2c.read(i2cAddr,(char*)data,length)==0; |
igbt6 | 2:d12dffd027a8 | 26 | } |
igbt6 | 2:d12dffd027a8 | 27 | |
igbt6 | 2:d12dffd027a8 | 28 | //configuration of ADT7410 sensor |
igbt6 | 2:d12dffd027a8 | 29 | 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){ |
igbt6 | 2:d12dffd027a8 | 30 | |
igbt6 | 2:d12dffd027a8 | 31 | uint8_t confByte=0; |
igbt6 | 2:d12dffd027a8 | 32 | int retVal=0; |
igbt6 | 2:d12dffd027a8 | 33 | |
igbt6 | 2:d12dffd027a8 | 34 | confByte=(res<<7|operMode<<5|intCtMode<<4|intPinPolarity<<3|ctPinPolarity<<2|faultQueue); |
igbt6 | 2:d12dffd027a8 | 35 | if(!write(0x03,confByte))retVal=-1; |
igbt6 | 2:d12dffd027a8 | 36 | else retVal=1; |
igbt6 | 2:d12dffd027a8 | 37 | return retVal; |
igbt6 | 2:d12dffd027a8 | 38 | |
igbt6 | 2:d12dffd027a8 | 39 | } |
igbt6 | 2:d12dffd027a8 | 40 | |
igbt6 | 2:d12dffd027a8 | 41 | // read 13 bit temperature |
igbt6 | 2:d12dffd027a8 | 42 | int ADT7410::readTemp(float* temperature){ |
igbt6 | 1:131a836c6b79 | 43 | |
igbt6 | 2:d12dffd027a8 | 44 | char rData[2] = {0,0}; |
igbt6 | 2:d12dffd027a8 | 45 | float tFin = 0; |
igbt6 | 2:d12dffd027a8 | 46 | int tRaw = 0; |
igbt6 | 2:d12dffd027a8 | 47 | |
igbt6 | 2:d12dffd027a8 | 48 | // set address pointer to temperature register |
igbt6 | 2:d12dffd027a8 | 49 | if(i2c.write(i2cAddr, 0x00, 1))return -1; |
igbt6 | 2:d12dffd027a8 | 50 | |
igbt6 | 2:d12dffd027a8 | 51 | // read temperature register, two bytes |
igbt6 | 2:d12dffd027a8 | 52 | if(i2c.read(i2cAddr, rData, 2))return -1; |
igbt6 | 2:d12dffd027a8 | 53 | |
igbt6 | 2:d12dffd027a8 | 54 | // temperature returned is only 13 bits |
igbt6 | 2:d12dffd027a8 | 55 | // discard alarm flags in lower bits |
igbt6 | 2:d12dffd027a8 | 56 | tRaw = (rData[0] << 8) | (rData[1]); |
igbt6 | 2:d12dffd027a8 | 57 | tRaw >>= 3; |
igbt6 | 2:d12dffd027a8 | 58 | |
igbt6 | 2:d12dffd027a8 | 59 | // handle positive and negative temperatures |
igbt6 | 2:d12dffd027a8 | 60 | // results in two's complement |
igbt6 | 2:d12dffd027a8 | 61 | if ( tRaw & 0x1000) { |
igbt6 | 2:d12dffd027a8 | 62 | tFin = (float) (tRaw - 8192) / 16; |
igbt6 | 2:d12dffd027a8 | 63 | } else { |
igbt6 | 2:d12dffd027a8 | 64 | tFin = (float) tRaw / 16; |
igbt6 | 2:d12dffd027a8 | 65 | } |
igbt6 | 2:d12dffd027a8 | 66 | *temperature=tFin; |
igbt6 | 2:d12dffd027a8 | 67 | return 1; |
igbt6 | 2:d12dffd027a8 | 68 | } |
igbt6 | 2:d12dffd027a8 | 69 | |
igbt6 | 2:d12dffd027a8 | 70 | |
igbt6 | 2:d12dffd027a8 | 71 | |
igbt6 | 2:d12dffd027a8 | 72 | |
igbt6 | 2:d12dffd027a8 | 73 | |
igbt6 | 2:d12dffd027a8 | 74 | int ADT7410::getIdNumber(void){ |
igbt6 | 2:d12dffd027a8 | 75 | |
igbt6 | 2:d12dffd027a8 | 76 | uint8_t data=0; |
igbt6 | 2:d12dffd027a8 | 77 | uint8_t regAddress=0x0B; |
igbt6 | 1:131a836c6b79 | 78 | |
igbt6 | 2:d12dffd027a8 | 79 | if(i2c.write(i2cAddr,(char*)®Address,1)) return -1; |
igbt6 | 2:d12dffd027a8 | 80 | if(i2c.read(i2cAddr,(char*)&data,1)) return -1; |
igbt6 | 2:d12dffd027a8 | 81 | |
igbt6 | 2:d12dffd027a8 | 82 | else |
igbt6 | 2:d12dffd027a8 | 83 | return data; |
igbt6 | 2:d12dffd027a8 | 84 | |
igbt6 | 2:d12dffd027a8 | 85 | |
igbt6 | 2:d12dffd027a8 | 86 | } |