Library DS2782 Stand-Alone Fuel Gauge IC
ds2782.h@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 | /* |
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 |