Library DS2782 Stand-Alone Fuel Gauge IC
ds2782.cpp
- Committer:
- igbt6
- Date:
- 2014-11-30
- Revision:
- 0:e6d413e57654
- Child:
- 1:7cd80eb4df4c
File content as of revision 0:e6d413e57654:
#include "ds2782.h" DS2782::DS2782(PinName sda, PinName scl,int i2cFrequencyHz,uint8_t address):mI2c(sda,scl),mI2cAddr(address){ mI2c.frequency(i2cFrequencyHz); mTemperature=0; } bool DS2782::initDS2782(void){ return true; } //write data to the sensor bool DS2782::write(uint8_t regAddress, uint8_t* data,int dataLength) { uint8_t tempBuf[dataLength+1]; tempBuf[0]=regAddress; memcpy(&(tempBuf[1]),data,dataLength); return mI2c.write(mI2cAddr,(char*)tempBuf,dataLength+1)==0; } //read data from the sensor bool DS2782::read(uint8_t regAddress, uint8_t *data,int dataLength) { mI2c.write(mI2cAddr,(char*)®Address,1,true); return (mI2c.read(mI2cAddr,(char*)data,dataLength)==0); } bool DS2782::readTemperature(void) { uint8_t rawData[2]; uint16_t rawTemp=0; if(!read(TEMP_MSB_REG, rawData,2)) return false; rawTemp= (((rawData[0]&~(1<<7))<<3)|((rawData[1]>>5)&0xF)); mTemperature = (float)(rawTemp*0.125); return true; } float DS2782::getTemperature(void) { return mTemperature; } bool DS2782::readCurrent(void){ uint8_t rawData[2]; uint16_t rawRes=0; if(!read(CURRENT_MSB_REG, rawData,2)) return false; rawRes= get16BitData(rawData[0],rawData[1]); //rawRes&=~(1<<15); if(rawRes &0x8000){ mCurrent = (float)(rawRes-65536)*0.07813; } else //mCurrent = (float)(rawRes-32768)*0.07813; mCurrent = (float)(rawRes)*0.07813; return true; } float DS2782::getCurrent(void) { return mCurrent; } bool DS2782::readVoltage(void){ uint8_t rawData[2]; uint16_t rawVolt=0; if(!read(VOLT_MSB_REG, rawData,2)) return false; rawVolt= (((rawData[0]&~(1<<7))<<3)|((rawData[1]>>5)&0xF)); mVoltage= (float)(rawVolt*4.88); return true; } float DS2782::getVoltage(void) { return mVoltage; } float DS2782::readTest(void){ uint8_t rawData[2]; uint16_t rawRes=0; /*if(!read(ACR_MSB_REG, rawData,2)) return false; rawRes= get16BitData(rawData[0],rawData[1]); */ /*if(rawRes &0x8000){ return ((float)(rawRes-65536)*0.07813); } else */ if(!read(RARC_REG, rawData,1)) return false; rawRes= get16BitData(rawData[0],rawData[1]); return ((float)(rawData[0]*0.3906)); }