Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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