Library DS2782 Stand-Alone Fuel Gauge IC
ds2782.cpp@0:e6d413e57654, 2014-11-30 (annotated)
- Committer:
- igbt6
- Date:
- Sun Nov 30 23:23:42 2014 +0000
- Revision:
- 0:e6d413e57654
- Child:
- 1:7cd80eb4df4c
firs tcommit for the fuel gauge ic
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
igbt6 | 0:e6d413e57654 | 1 | #include "ds2782.h" |
igbt6 | 0:e6d413e57654 | 2 | |
igbt6 | 0:e6d413e57654 | 3 | |
igbt6 | 0:e6d413e57654 | 4 | DS2782::DS2782(PinName sda, PinName scl,int i2cFrequencyHz,uint8_t address):mI2c(sda,scl),mI2cAddr(address){ |
igbt6 | 0:e6d413e57654 | 5 | |
igbt6 | 0:e6d413e57654 | 6 | mI2c.frequency(i2cFrequencyHz); |
igbt6 | 0:e6d413e57654 | 7 | mTemperature=0; |
igbt6 | 0:e6d413e57654 | 8 | } |
igbt6 | 0:e6d413e57654 | 9 | |
igbt6 | 0:e6d413e57654 | 10 | |
igbt6 | 0:e6d413e57654 | 11 | bool DS2782::initDS2782(void){ |
igbt6 | 0:e6d413e57654 | 12 | |
igbt6 | 0:e6d413e57654 | 13 | return true; |
igbt6 | 0:e6d413e57654 | 14 | } |
igbt6 | 0:e6d413e57654 | 15 | |
igbt6 | 0:e6d413e57654 | 16 | //write data to the sensor |
igbt6 | 0:e6d413e57654 | 17 | bool DS2782::write(uint8_t regAddress, uint8_t* data,int dataLength) |
igbt6 | 0:e6d413e57654 | 18 | { |
igbt6 | 0:e6d413e57654 | 19 | uint8_t tempBuf[dataLength+1]; |
igbt6 | 0:e6d413e57654 | 20 | tempBuf[0]=regAddress; |
igbt6 | 0:e6d413e57654 | 21 | memcpy(&(tempBuf[1]),data,dataLength); |
igbt6 | 0:e6d413e57654 | 22 | return mI2c.write(mI2cAddr,(char*)tempBuf,dataLength+1)==0; |
igbt6 | 0:e6d413e57654 | 23 | |
igbt6 | 0:e6d413e57654 | 24 | } |
igbt6 | 0:e6d413e57654 | 25 | |
igbt6 | 0:e6d413e57654 | 26 | //read data from the sensor |
igbt6 | 0:e6d413e57654 | 27 | bool DS2782::read(uint8_t regAddress, uint8_t *data,int dataLength) |
igbt6 | 0:e6d413e57654 | 28 | { |
igbt6 | 0:e6d413e57654 | 29 | mI2c.write(mI2cAddr,(char*)®Address,1,true); |
igbt6 | 0:e6d413e57654 | 30 | return (mI2c.read(mI2cAddr,(char*)data,dataLength)==0); |
igbt6 | 0:e6d413e57654 | 31 | } |
igbt6 | 0:e6d413e57654 | 32 | |
igbt6 | 0:e6d413e57654 | 33 | bool DS2782::readTemperature(void) |
igbt6 | 0:e6d413e57654 | 34 | { |
igbt6 | 0:e6d413e57654 | 35 | uint8_t rawData[2]; |
igbt6 | 0:e6d413e57654 | 36 | uint16_t rawTemp=0; |
igbt6 | 0:e6d413e57654 | 37 | if(!read(TEMP_MSB_REG, rawData,2)) return false; |
igbt6 | 0:e6d413e57654 | 38 | rawTemp= (((rawData[0]&~(1<<7))<<3)|((rawData[1]>>5)&0xF)); |
igbt6 | 0:e6d413e57654 | 39 | mTemperature = (float)(rawTemp*0.125); |
igbt6 | 0:e6d413e57654 | 40 | return true; |
igbt6 | 0:e6d413e57654 | 41 | } |
igbt6 | 0:e6d413e57654 | 42 | |
igbt6 | 0:e6d413e57654 | 43 | float DS2782::getTemperature(void) |
igbt6 | 0:e6d413e57654 | 44 | { |
igbt6 | 0:e6d413e57654 | 45 | return mTemperature; |
igbt6 | 0:e6d413e57654 | 46 | } |
igbt6 | 0:e6d413e57654 | 47 | |
igbt6 | 0:e6d413e57654 | 48 | |
igbt6 | 0:e6d413e57654 | 49 | bool DS2782::readCurrent(void){ |
igbt6 | 0:e6d413e57654 | 50 | |
igbt6 | 0:e6d413e57654 | 51 | uint8_t rawData[2]; |
igbt6 | 0:e6d413e57654 | 52 | uint16_t rawRes=0; |
igbt6 | 0:e6d413e57654 | 53 | if(!read(CURRENT_MSB_REG, rawData,2)) return false; |
igbt6 | 0:e6d413e57654 | 54 | rawRes= get16BitData(rawData[0],rawData[1]); |
igbt6 | 0:e6d413e57654 | 55 | //rawRes&=~(1<<15); |
igbt6 | 0:e6d413e57654 | 56 | if(rawRes &0x8000){ |
igbt6 | 0:e6d413e57654 | 57 | mCurrent = (float)(rawRes-65536)*0.07813; |
igbt6 | 0:e6d413e57654 | 58 | } |
igbt6 | 0:e6d413e57654 | 59 | else |
igbt6 | 0:e6d413e57654 | 60 | //mCurrent = (float)(rawRes-32768)*0.07813; |
igbt6 | 0:e6d413e57654 | 61 | mCurrent = (float)(rawRes)*0.07813; |
igbt6 | 0:e6d413e57654 | 62 | return true; |
igbt6 | 0:e6d413e57654 | 63 | } |
igbt6 | 0:e6d413e57654 | 64 | |
igbt6 | 0:e6d413e57654 | 65 | float DS2782::getCurrent(void) |
igbt6 | 0:e6d413e57654 | 66 | { |
igbt6 | 0:e6d413e57654 | 67 | return mCurrent; |
igbt6 | 0:e6d413e57654 | 68 | } |
igbt6 | 0:e6d413e57654 | 69 | |
igbt6 | 0:e6d413e57654 | 70 | |
igbt6 | 0:e6d413e57654 | 71 | |
igbt6 | 0:e6d413e57654 | 72 | bool DS2782::readVoltage(void){ |
igbt6 | 0:e6d413e57654 | 73 | |
igbt6 | 0:e6d413e57654 | 74 | uint8_t rawData[2]; |
igbt6 | 0:e6d413e57654 | 75 | uint16_t rawVolt=0; |
igbt6 | 0:e6d413e57654 | 76 | if(!read(VOLT_MSB_REG, rawData,2)) return false; |
igbt6 | 0:e6d413e57654 | 77 | rawVolt= (((rawData[0]&~(1<<7))<<3)|((rawData[1]>>5)&0xF)); |
igbt6 | 0:e6d413e57654 | 78 | mVoltage= (float)(rawVolt*4.88); |
igbt6 | 0:e6d413e57654 | 79 | return true; |
igbt6 | 0:e6d413e57654 | 80 | } |
igbt6 | 0:e6d413e57654 | 81 | |
igbt6 | 0:e6d413e57654 | 82 | float DS2782::getVoltage(void) |
igbt6 | 0:e6d413e57654 | 83 | { |
igbt6 | 0:e6d413e57654 | 84 | return mVoltage; |
igbt6 | 0:e6d413e57654 | 85 | } |
igbt6 | 0:e6d413e57654 | 86 | |
igbt6 | 0:e6d413e57654 | 87 | |
igbt6 | 0:e6d413e57654 | 88 | |
igbt6 | 0:e6d413e57654 | 89 | |
igbt6 | 0:e6d413e57654 | 90 | |
igbt6 | 0:e6d413e57654 | 91 | float DS2782::readTest(void){ |
igbt6 | 0:e6d413e57654 | 92 | |
igbt6 | 0:e6d413e57654 | 93 | uint8_t rawData[2]; |
igbt6 | 0:e6d413e57654 | 94 | uint16_t rawRes=0; |
igbt6 | 0:e6d413e57654 | 95 | /*if(!read(ACR_MSB_REG, rawData,2)) return false; |
igbt6 | 0:e6d413e57654 | 96 | rawRes= get16BitData(rawData[0],rawData[1]); |
igbt6 | 0:e6d413e57654 | 97 | */ |
igbt6 | 0:e6d413e57654 | 98 | /*if(rawRes &0x8000){ |
igbt6 | 0:e6d413e57654 | 99 | return ((float)(rawRes-65536)*0.07813); |
igbt6 | 0:e6d413e57654 | 100 | } |
igbt6 | 0:e6d413e57654 | 101 | else |
igbt6 | 0:e6d413e57654 | 102 | */ |
igbt6 | 0:e6d413e57654 | 103 | if(!read(RARC_REG, rawData,1)) return false; |
igbt6 | 0:e6d413e57654 | 104 | rawRes= get16BitData(rawData[0],rawData[1]); |
igbt6 | 0:e6d413e57654 | 105 | return ((float)(rawData[0]*0.3906)); |
igbt6 | 0:e6d413e57654 | 106 | } |