Library DS2782 Stand-Alone Fuel Gauge IC

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?

UserRevisionLine numberNew contents of line
igbt6 0:e6d413e57654 1 /*
igbt6 0:e6d413e57654 2 @file ds2782.h
igbt6 0:e6d413e57654 3
igbt6 0:e6d413e57654 4 @brief DS2782 Stand-Alone Fuel Gauge IC
igbt6 0:e6d413e57654 5 Breakout I2C Library
igbt6 0:e6d413e57654 6
igbt6 0:e6d413e57654 7 @Author lukasz uszko(luszko@op.pl)
igbt6 0:e6d413e57654 8
igbt6 0:e6d413e57654 9 Tested on FRDM-KL46Z and FRDM-KL25Z
igbt6 0:e6d413e57654 10
igbt6 0:e6d413e57654 11 Copyright (c) 2014 lukasz uszko
igbt6 0:e6d413e57654 12 Released under the MIT License (see http://mbed.org/license/mit)
igbt6 0:e6d413e57654 13
igbt6 0:e6d413e57654 14 Documentation regarding the MAX9611 might be found here:
igbt6 0:e6d413e57654 15 http://www.maximintegrated.com/en/products/power/battery-management/DS2782.html
igbt6 0:e6d413e57654 16 */
igbt6 0:e6d413e57654 17
igbt6 0:e6d413e57654 18
igbt6 0:e6d413e57654 19 #ifndef DS2782_H
igbt6 0:e6d413e57654 20 #define DS2782_H
igbt6 0:e6d413e57654 21
igbt6 0:e6d413e57654 22 #include "mbed.h"
igbt6 0:e6d413e57654 23
igbt6 0:e6d413e57654 24 #define DS2782_I2C_ADDRESS 0x34<<1
igbt6 0:e6d413e57654 25
igbt6 0:e6d413e57654 26
igbt6 0:e6d413e57654 27
igbt6 0:e6d413e57654 28
igbt6 0:e6d413e57654 29
igbt6 0:e6d413e57654 30
igbt6 0:e6d413e57654 31 class DS2782{
igbt6 0:e6d413e57654 32
igbt6 0:e6d413e57654 33
igbt6 0:e6d413e57654 34 /**********private members and methods********************************/
igbt6 0:e6d413e57654 35 private:
igbt6 0:e6d413e57654 36
igbt6 0:e6d413e57654 37 typedef enum {
igbt6 0:e6d413e57654 38 STATUS=0x01, /*STATUS - Status Register*/
igbt6 0:e6d413e57654 39 RAAC_MSB_REG, /*RAAC - Remaining Active Absolute Capacity MSB*/
igbt6 0:e6d413e57654 40 RAAC_LSB_REG,
igbt6 0:e6d413e57654 41 RSAC_MSB_REG, /*RSAC - Remaining Standby Absolute Capacity MSB*/
igbt6 0:e6d413e57654 42 RSAC_LSB_REG,
igbt6 0:e6d413e57654 43 RARC_REG, /*RARC - Remaining Active Relative Capacity*/
igbt6 0:e6d413e57654 44 RSRC_REG, /*RSRC - Remaining Standby Relative Capacity*/
igbt6 0:e6d413e57654 45 IAVG_MSB_REG, /*IAVG - Average Current Register MSB*/
igbt6 0:e6d413e57654 46 IAVG_LSB_REG,
igbt6 0:e6d413e57654 47 TEMP_MSB_REG, /*TEMP - Temperature Register MSB*/
igbt6 0:e6d413e57654 48 TEMP_LSB_REG,
igbt6 0:e6d413e57654 49 VOLT_MSB_REG, /*VOLT - Voltage Register MSB*/
igbt6 0:e6d413e57654 50 VOLT_LSB_REG,
igbt6 0:e6d413e57654 51 CURRENT_MSB_REG, /*CURRENT - Current Register MSB*/
igbt6 0:e6d413e57654 52 CURRENT_LSB_REG,
igbt6 0:e6d413e57654 53 ACR_MSB_REG, /*ACR - Accumulated Current Register MSB*/
igbt6 0:e6d413e57654 54 ACR_LSB_REG,
igbt6 0:e6d413e57654 55 ACRL_MSB_REG, /*Low Accumulated Current Register MSB*/
igbt6 0:e6d413e57654 56 ACRL_LSB_REG,
igbt6 0:e6d413e57654 57 AS_REG, /*AS - Age Scalar*/
igbt6 0:e6d413e57654 58 SFR_REG, /*SFR - Special Feature Register*/
igbt6 0:e6d413e57654 59 FULL_MSB_REG, /*FULL - Full Capacity MSB*/
igbt6 0:e6d413e57654 60 FULL_LSB_REG,
igbt6 0:e6d413e57654 61 AE_MSB_REG, /*AE - Active Empty MSB*/
igbt6 0:e6d413e57654 62 AE_LSB_REG,
igbt6 0:e6d413e57654 63 SE_MSB_REG, /*SE - Standby Empty MSB*/
igbt6 0:e6d413e57654 64 SE_LSB_REG,
igbt6 0:e6d413e57654 65 EEPROM_REG= 0x1F, /*EEPROM - EEPROM Register */
igbt6 0:e6d413e57654 66 USR_EEPROM_REG= 0x20, /*User EEPROM, Lockable, Block 0 [20 to 2F]*/
igbt6 0:e6d413e57654 67 ADD_USR_EEPROM_REG=0x30, /*Additional User EEPROM, Lockable, Block 0 [30 to 37]*/
igbt6 0:e6d413e57654 68 PARAM_EEPROM_REG=0x60, /*Parameter EEPROM, Lockable, Block 1 [60 to 7F]*/
igbt6 0:e6d413e57654 69 UNIQUE_ID_REG =0xF0, /*Unique ID [F0 to F7]*/
igbt6 0:e6d413e57654 70 FUNC_COMMAND_REG= 0xFE /*Function Command Register */
igbt6 0:e6d413e57654 71
igbt6 0:e6d413e57654 72 }RegAddr;
igbt6 0:e6d413e57654 73
igbt6 0:e6d413e57654 74 /** Write data to the given register
igbt6 0:e6d413e57654 75 *
igbt6 0:e6d413e57654 76 * @returns
igbt6 0:e6d413e57654 77 * 1 on success,
igbt6 0:e6d413e57654 78 * 0 on error
igbt6 0:e6d413e57654 79 */
igbt6 0:e6d413e57654 80 bool write(uint8_t regAddress, uint8_t* data,int dataLength);
igbt6 0:e6d413e57654 81
igbt6 0:e6d413e57654 82 /** Write data to the given register
igbt6 0:e6d413e57654 83 * @param register Address
igbt6 0:e6d413e57654 84 * @param data to read
igbt6 0:e6d413e57654 85 * @param length of data to read
igbt6 0:e6d413e57654 86 * @returns
igbt6 0:e6d413e57654 87 * 1 on success,
igbt6 0:e6d413e57654 88 * 0 on error
igbt6 0:e6d413e57654 89 */
igbt6 0:e6d413e57654 90 bool read(uint8_t regAddress, uint8_t* data,int length);
igbt6 0:e6d413e57654 91
igbt6 0:e6d413e57654 92 /** merge two bytes in one word
igbt6 0:e6d413e57654 93 * @param 1st byte
igbt6 0:e6d413e57654 94 * @param 2nd byte
igbt6 0:e6d413e57654 95 * @returns 16 bit word
igbt6 0:e6d413e57654 96 */
igbt6 0:e6d413e57654 97 inline uint16_t get16BitData(uint8_t msbByte,uint8_t lsbByte){
igbt6 0:e6d413e57654 98 uint16_t data16Bit= (msbByte<<8)|(lsbByte);
igbt6 0:e6d413e57654 99 return data16Bit;
igbt6 0:e6d413e57654 100 }
igbt6 0:e6d413e57654 101
igbt6 0:e6d413e57654 102 I2C mI2c;
igbt6 0:e6d413e57654 103 uint8_t mI2cAddr;
igbt6 0:e6d413e57654 104
igbt6 0:e6d413e57654 105
igbt6 0:e6d413e57654 106 /**********protected members and methods********************************/
igbt6 0:e6d413e57654 107 protected:
igbt6 0:e6d413e57654 108 float mTemperature;
igbt6 0:e6d413e57654 109 float mCurrent;
igbt6 0:e6d413e57654 110 float mVoltage;
igbt6 0:e6d413e57654 111
igbt6 0:e6d413e57654 112 /**********public methods********************************/
igbt6 0:e6d413e57654 113 public:
igbt6 0:e6d413e57654 114
igbt6 0:e6d413e57654 115 /** Create an SI7020 instance
igbt6 0:e6d413e57654 116 * @param sda pin
igbt6 0:e6d413e57654 117 * @param scl pin
igbt6 0:e6d413e57654 118 * @param address: I2C slave address
igbt6 0:e6d413e57654 119 */
igbt6 0:e6d413e57654 120 DS2782(PinName sda, PinName scl,int i2cFrequencyHz=100000,uint8_t address = DS2782_I2C_ADDRESS);
igbt6 0:e6d413e57654 121
igbt6 0:e6d413e57654 122
igbt6 0:e6d413e57654 123 /** Initialization: set member values and configuration registers, ought to be invoked in the body of constructor
igbt6 0:e6d413e57654 124 * @returns
igbt6 0:e6d413e57654 125 * true on success,
igbt6 0:e6d413e57654 126 * false on error
igbt6 0:e6d413e57654 127 */
igbt6 0:e6d413e57654 128 bool initDS2782(void);
igbt6 0:e6d413e57654 129
igbt6 0:e6d413e57654 130 /** Read temperature from the sensor.
igbt6 0:e6d413e57654 131 * @param none
igbt6 0:e6d413e57654 132 * @returns
igbt6 0:e6d413e57654 133 * 1 on success,
igbt6 0:e6d413e57654 134 * 0 on error
igbt6 0:e6d413e57654 135 */
igbt6 0:e6d413e57654 136 bool readTemperature(void);
igbt6 0:e6d413e57654 137 bool readCurrent(void);
igbt6 0:e6d413e57654 138 bool readVoltage(void);
igbt6 0:e6d413e57654 139
igbt6 0:e6d413e57654 140 // setters-getters
igbt6 0:e6d413e57654 141 float getTemperature(void);
igbt6 0:e6d413e57654 142 float getCurrent(void);
igbt6 0:e6d413e57654 143 float getVoltage(void);
igbt6 0:e6d413e57654 144
igbt6 0:e6d413e57654 145 float readTest(void);
igbt6 0:e6d413e57654 146 };
igbt6 0:e6d413e57654 147
igbt6 0:e6d413e57654 148 #endif