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.
Dependents: MAX17048_HelloWorld ECGAFE_copy MAX17048_HelloWorld Orion_newPCB_test_LV ... more
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
MAX17048 Fuel Gauge