Library DS2782 Stand-Alone Fuel Gauge IC
Diff: ds2782.h
- Revision:
- 0:e6d413e57654
- Child:
- 1:7cd80eb4df4c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ds2782.h Sun Nov 30 23:23:42 2014 +0000 @@ -0,0 +1,148 @@ +/* + @file ds2782.h + + @brief DS2782 Stand-Alone Fuel Gauge IC + Breakout I2C Library + + @Author lukasz uszko(luszko@op.pl) + + Tested on FRDM-KL46Z and FRDM-KL25Z + + Copyright (c) 2014 lukasz uszko + Released under the MIT License (see http://mbed.org/license/mit) + + Documentation regarding the MAX9611 might be found here: + http://www.maximintegrated.com/en/products/power/battery-management/DS2782.html +*/ + + +#ifndef DS2782_H +#define DS2782_H + +#include "mbed.h" + +#define DS2782_I2C_ADDRESS 0x34<<1 + + + + + + +class DS2782{ + + + /**********private members and methods********************************/ + private: + + typedef enum { + STATUS=0x01, /*STATUS - Status Register*/ + RAAC_MSB_REG, /*RAAC - Remaining Active Absolute Capacity MSB*/ + RAAC_LSB_REG, + RSAC_MSB_REG, /*RSAC - Remaining Standby Absolute Capacity MSB*/ + RSAC_LSB_REG, + RARC_REG, /*RARC - Remaining Active Relative Capacity*/ + RSRC_REG, /*RSRC - Remaining Standby Relative Capacity*/ + IAVG_MSB_REG, /*IAVG - Average Current Register MSB*/ + IAVG_LSB_REG, + TEMP_MSB_REG, /*TEMP - Temperature Register MSB*/ + TEMP_LSB_REG, + VOLT_MSB_REG, /*VOLT - Voltage Register MSB*/ + VOLT_LSB_REG, + CURRENT_MSB_REG, /*CURRENT - Current Register MSB*/ + CURRENT_LSB_REG, + ACR_MSB_REG, /*ACR - Accumulated Current Register MSB*/ + ACR_LSB_REG, + ACRL_MSB_REG, /*Low Accumulated Current Register MSB*/ + ACRL_LSB_REG, + AS_REG, /*AS - Age Scalar*/ + SFR_REG, /*SFR - Special Feature Register*/ + FULL_MSB_REG, /*FULL - Full Capacity MSB*/ + FULL_LSB_REG, + AE_MSB_REG, /*AE - Active Empty MSB*/ + AE_LSB_REG, + SE_MSB_REG, /*SE - Standby Empty MSB*/ + SE_LSB_REG, + EEPROM_REG= 0x1F, /*EEPROM - EEPROM Register */ + USR_EEPROM_REG= 0x20, /*User EEPROM, Lockable, Block 0 [20 to 2F]*/ + ADD_USR_EEPROM_REG=0x30, /*Additional User EEPROM, Lockable, Block 0 [30 to 37]*/ + PARAM_EEPROM_REG=0x60, /*Parameter EEPROM, Lockable, Block 1 [60 to 7F]*/ + UNIQUE_ID_REG =0xF0, /*Unique ID [F0 to F7]*/ + FUNC_COMMAND_REG= 0xFE /*Function Command Register */ + + }RegAddr; + + /** Write data to the given register + * + * @returns + * 1 on success, + * 0 on error + */ + bool write(uint8_t regAddress, uint8_t* data,int dataLength); + + /** Write data to the given register + * @param register Address + * @param data to read + * @param length of data to read + * @returns + * 1 on success, + * 0 on error + */ + bool read(uint8_t regAddress, uint8_t* data,int length); + + /** merge two bytes in one word + * @param 1st byte + * @param 2nd byte + * @returns 16 bit word + */ + inline uint16_t get16BitData(uint8_t msbByte,uint8_t lsbByte){ + uint16_t data16Bit= (msbByte<<8)|(lsbByte); + return data16Bit; + } + + I2C mI2c; + uint8_t mI2cAddr; + + + /**********protected members and methods********************************/ + protected: + float mTemperature; + float mCurrent; + float mVoltage; + + /**********public methods********************************/ + public: + + /** Create an SI7020 instance + * @param sda pin + * @param scl pin + * @param address: I2C slave address + */ + DS2782(PinName sda, PinName scl,int i2cFrequencyHz=100000,uint8_t address = DS2782_I2C_ADDRESS); + + + /** Initialization: set member values and configuration registers, ought to be invoked in the body of constructor + * @returns + * true on success, + * false on error + */ + bool initDS2782(void); + + /** Read temperature from the sensor. + * @param none + * @returns + * 1 on success, + * 0 on error + */ + bool readTemperature(void); + bool readCurrent(void); + bool readVoltage(void); + + // setters-getters + float getTemperature(void); + float getCurrent(void); + float getVoltage(void); + + float readTest(void); +}; + +#endif \ No newline at end of file