A feature complete driver for the MAX17048 lithium fuel gauge from Maxim.
Dependents: MAX17048_HelloWorld ECGAFE_copy MAX17048_HelloWorld Orion_newPCB_test_LV ... more
Now fully tested!
MAX17048.h
- Committer:
- neilt6
- Date:
- 2013-08-07
- Revision:
- 0:abc480f8eeab
- Child:
- 1:734b1a089a9c
File content as of revision 0:abc480f8eeab:
/* MAX17048 Driver Library * Copyright (c) 2013 Neil Thiessen * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef MAX17048_H #define MAX17048_H #include "mbed.h" //i2c address definition #define __MAX17048_ADDR (0x36 << 1) //i2c register definitions #define __MAX17048_REG_VCELL 0x02 #define __MAX17048_REG_SOC 0x04 #define __MAX17048_REG_MODE 0x06 #define __MAX17048_REG_VERSION 0x08 #define __MAX17048_REG_HIBRT 0x0A #define __MAX17048_REG_CONFIG 0x0C #define __MAX17048_REG_VALRT 0x14 #define __MAX17048_REG_CRATE 0x16 #define __MAX17048_REG_VRESET_ID 0x18 #define __MAX17048_REG_STATUS 0x1A #define __MAX17048_REG_TABLE 0x40 #define __MAX17048_REG_CMD 0xFE //RCOMP0 value definition #define __MAX17048_RCOMP0 0x97 /** MAX17048 class. * Used for controlling a MAX17048 fuel gauge connected via I2C. * * Example: * @code * #include "mbed.h" * #include "MAX17048.h" * * Serial pc(USBTX, USBRX); * MAX17048 gauge(p28, p27); * * int main() { * while (1) { * //Read the cell voltage * float vcell = gauge.getVcell(); * * //Print the cell voltage * pc.printf("Vcell = %f\n", vcell); * * //Sleep for 0.5 seconds * wait(0.5); * } * } * @endcode */ class MAX17048 { public: /** Represents the different alert flags for the MAX17048 */ enum AlertFlags { ALERT_RI = (1 << 0), /**< Reset indicator */ ALERT_VH = (1 << 1), /**< Voltage high alert */ ALERT_VL = (1 << 2), /**< Voltage low alert */ ALERT_VR = (1 << 3), /**< Voltage reset alert */ ALERT_HD = (1 << 4), /**< SOC low alert */ ALERT_SC = (1 << 5) /**< SOC change alert */ }; /** Create a MAX17048 object connected to the specified I2C pins * * @param sda I2C data pin * @param scl I2C clock pin */ MAX17048(PinName sda, PinName scl); /** Command the MAX17048 to perform a power-on reset */ void reset(void); /** Command the MAX17048 to perform a QuickStart */ void quickStart(void); /** Determine whether sleep mode is enabled on the MAX17048 * * @returns * 'true' if sleep mode is enabled, * 'false' if sleep mode is disabled. */ bool isSleepEnabled(void); /** Enable or disable sleep mode on the MAX17048 * * @param enabled Whether or not sleep mode is enabled. */ void setSleepEnabled(bool enabled); /** Determine whether or not the MAX17048 is hibernating * * @returns * 'true' if hibernating, * 'false' if not hibernating. */ bool isHibernating(void); /** Get the current hibernate threshold of the MAX17048 * * @returns The current hibernate threshold in \%/hr. */ float getHibernateThreshold(void); /** Set the hibernate threshold of the MAX17048 * * @param threshold The new hibernate threshold in \%/hr. */ void setHibernateThreshold(float threshold); /** Get the current active threshold of the MAX17048 * * @returns The current active threshold in volts. */ float getActiveThreshold(void); /** Set the active threshold of the MAX17048 * * @param threshold The new active threshold in volts. */ void setActiveThreshold(float threshold); /** Get the production version of the MAX17048 * * @returns The 16-bit production version. */ unsigned short getVersion(void); /** Set the cell temperature compensation of the MAX17048 * * @param temp The current cell temperature in °C. */ void setTempCompensation(float temp); /** Determine whether or not the MAX17048 is in sleep mode * * @returns * 'true' if in sleep mode, * 'false' if not in sleep mode. */ bool isSleeping(void); /** Enter or exit sleep mode on the MAX17048 (sleep mode must be enabled first) * * @param sleep Whether or not to sleep. */ void setSleep(bool sleep); /** Determine whether or not the SOC 1% change alert is enabled on the MAX17048 * * @returns * 'true' if enabled, * 'false' if not enabled. */ bool isSOCChangeAlertEnabled(void); /** Enable or disable the SOC 1% change alert on the MAX17048 * * @param enabled Whether or the SOC 1% change alert is enabled. */ void setSOCChangeAlertEnabled(bool enabled); /** Determine whether or not the MAX17048 is asserting the ALRT pin * * @returns * 'true' if alerting, * 'false' if not alerting. */ bool isAlerting(void); /** Command the MAX17048 to de-assert the ALRT pin */ void clearAlert(void); /** Get the current SOC empty alert threshold of the MAX17048 * * @returns The current SOC empty alert threshold in %. */ char getEmptyAlertThreshold(void); /** Set the SOC empty alert threshold of the MAX17048 * * @param threshold The new SOC empty alert threshold in %. */ void setEmptyAlertThreshold(char threshold); /** Get the current low voltage alert threshold of the MAX17048 * * @returns The current low voltage alert threshold in volts. */ float getVAlertMinThreshold(void); /** Set the low voltage alert threshold of the MAX17048 * * @param threshold The new low voltage alert threshold in volts. */ void setVAlertMinThreshold(float threshold); /** Get the current high voltage alert threshold of the MAX17048 * * @returns The current high voltage alert threshold in volts. */ float getVAlertMaxThreshold(void); /** Set the high voltage alert threshold of the MAX17048 * * @param threshold The new high voltage alert threshold in volts. */ void setVAlertMaxThreshold(float threshold); /** Get the current reset voltage threshold of the MAX17048 * * @returns The current reset voltage threshold in volts. */ float getVResetThreshold(void); /** Set the reset voltage threshold of the MAX17048 * * @param threshold The new reset voltage threshold in volts. */ void setVResetThreshold(float threshold); /** Determine whether or not the reset voltage comparator is enabled on the MAX17048 * * @returns * 'true' if enabled, * 'false' if not enabled. */ bool isComparatorEnabled(void); /** Enable or disable the reset voltage comparator on the MAX17048 * * @param enabled Whether or not the reset voltage comparator is enabled. */ void setComparatorEnabled(bool enabled); /** Get the factory programmed 8-bit ID of the MAX17048 * * @returns The 8-bit ID. */ char getID(void); /** Determine whether or not the voltage reset alert is enabled on the MAX17048 * * @returns * 'true' if enabled, * 'false' if not enabled. */ bool isVResetAlertEnabled(void); /** Enable or disable the voltage reset alert on the MAX17048 * * @param enabled Whether or the voltage reset alert is enabled. */ void setVResetAlertEnabled(bool enabled); /** Get the current alert flags on the MAX17048 * * @returns The current alert flags as AlertFlags enum values OR'd together. */ char getAlertFlags(void); /** Clear the specified alert flags on the MAX17048 * * @param flags The alert flags to clear as AlertFlags enum values OR'd together. */ void clearAlertFlags(char flags); /** Get the current cell voltage measurement of the MAX17048 * * @returns The cell voltage measurement as a float. */ float getVcell(void); /** Get the current state of charge measurement of the MAX17048 * * @returns The state of charge measurement as a float. */ float getSOC(void); /** Get the current C rate measurement of the MAX17048 * * @returns The C rate measurement as a float. */ float getCRate(void); private: I2C _i2c; unsigned short _read(char reg); void _write(char reg, unsigned short data); void _writeRCOMP(char rcomp); }; #endif