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.
Fork of BAE_FRDM_INTEGRATION by
HK.h
- Committer:
- sakthipriya
- Date:
- 2014-12-15
- Revision:
- 9:a9de938283f9
- Parent:
- 8:667fbc82d634
File content as of revision 9:a9de938283f9:
//to be saved as HK.h
#include "mbed.h"
#define tstart -40
#define tstep 8
#define tstep_thermistor 8//verify!!
#define tstart_thermistor -40
#define vstart 3.3
#define vstep 0.84667
#define cstart 0.0691
#define cstep 0.09133
#define rsens 0.095
struct SensorData {
char Voltage[10];
char Current[10];
char Temperature[10];
char PanelTemperature[2];//read by the 4 thermistors on solar panels
char Vcell;//unquantised
char soc;//unquantised
char alerts;//UNQUANTISED
//(alerts[0]=1)-> reset indicator=>dont care
//(alerts[1]=1)-> Vcell>ValrtMax(5.1V)->will always be on->dont care
//(alerts[2]=1)-> Vcell<ValrtMin(5.1V)->indicates deep discharge
//(alerts[3]=1)-> Vcell<Vreset(2.5V)
//(alerts[5]=1)-> Soc CROSSES the threshold value
//(alerts[6]=1)-> alert on (alerts[3]) enabled when Vcell<Vreset(here we set it to be 2.5V)
char crate;//unquantised
char faultpoll; //polled faults
char faultir; //interupted faults
char power_mode; //power modes
//float magnetometer,gyro=>to be addes
};
typedef struct ShortBeacon {
char Voltage[1]; //battery voltage from gauge
char AngularSpeed[2]; //all the 3 data
char SubsystemStatus[1]; //power modes
char Temp[3]; //temp of solar panel
char ErrorFlag[1]; //fault
}ShortBeacy;
void FUNC_HK_MAIN();
int quantiz(float start,float step,float x);
//--------------------------------following is header details for battery gauge-------------------------------------------
#define MAX17048_H
class MAX17048
{
public:
/** The default compensation value for the MAX17048
*/
static const char RCOMP0= 0x97;
/** 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 */
};
//parametrised constructor
MAX17048(PinName sda, PinName scl, int hz = 400000): m_I2C(sda, scl)//should it be same as the uC clock freq
{
//Set the I2C bus frequency
m_I2C.frequency(hz);
}
// Probe for the MAX17048 and indicate if it's present on the bus
bool open()
{
//Probe for the MAX17048 using a Zero Length Transfer
if (!m_I2C.write(m_ADDR, NULL, 0)) {
//Return success
return true;
} else {
//Return failure
return false;
}
}
// Command the MAX17048 to perform a power-on reset
void reset()
{
//Write the POR command
write(REG_CMD, 0x5400);
}
// Command the MAX17048 to perform a QuickStart
void quickStart()
{
//Read the current 16-bit register value
unsigned short value = read(REG_MODE);
//Set the QuickStart bit
value |= (1 << 14);
//Write the value back out
write(REG_MODE, value);
}
//disable sleep
void disable_sleep()
{
unsigned short value = read(REG_MODE);
value &= ~(1 << 13);
write(REG_MODE, value);
}
//disable the hibernate of the MAX17048
void disable_hibernate()
{
write(REG_HIBRT, 0x0000);
}
// Determine whether or not the SOC 1% change alert is enabled on the MAX17048
bool socChangeAlertEnabled()
{
//Read the 16-bit register value
unsigned short value = read(REG_CONFIG);
//Return the status of the ALSC bit
if (value & (1 << 6))
return true;
else
return false;
}
// Enable or disable the SOC 1% change alert on the MAX17048
void socChangeAlertEnabled(bool enabled)
{
//Read the current 16-bit register value
unsigned short value = read(REG_CONFIG);
//Set or clear the ALSC bit
if (enabled)
value |= (1 << 6);
else
value &= ~(1 << 6);
//Write the value back out
write(REG_CONFIG, value);
}
// Determine whether or not the MAX17048 is asserting the ALRT pin
bool alerting()
{
//Read the 16-bit register value
unsigned short value = read(REG_CONFIG);
//Return the status of the ALRT bit
if (value & (1 << 5))
return true;
else
return false;
}
// Command the MAX17048 to de-assert the ALRT pin
void clearAlert()
{
//Read the current 16-bit register value
unsigned short value = read(REG_CONFIG);
//Clear the ALRT bit
value &= ~(1 << 5);
//Write the value back out
write(REG_CONFIG, value);
}
// return The current SOC empty alert threshold in %.
char emptyAlertThreshold()
{
//Read the 16-bit register value
unsigned short value = read(REG_CONFIG);
//Extract the threshold
return 32 - (value & 0x001F);
}
//Set the SOC empty alert threshold of the MAX17048
void emptyAlertThreshold(char threshold)
{
//Read the current 16-bit register value
unsigned short value = read(REG_CONFIG);
//Update the register value
value &= 0xFFE0;
value |= 32 - threshold;
//Write the 16-bit register
write(REG_CONFIG, value);
}
//return The current low voltage alert threshold in volts.
float vAlertMinThreshold()
{
//Read the 16-bit register value
unsigned short value = read(REG_VALRT);
//Extract the alert threshold
return (value >> 8) * 0.02;//least count is 20mV
}
// Set the low and high voltage alert threshold of the MAX17048
void vAlertMinMaxThreshold()
{
//Read the current 16-bit register value
unsigned short value = read(REG_VALRT);
//Mask off the old value
value = 0xFFFF;
//Write the 16-bit register
write(REG_VALRT, value);
}
//return The current high voltage alert threshold in volts.
float vAlertMaxThreshold()
{
//Read the 16-bit register value
unsigned short value = read(REG_VALRT);
//Extract the active threshold
return (value & 0x00FF) * 0.02;
}
//return The current reset voltage threshold in volts.
float vResetThreshold()
{
//Read the 16-bit register value
unsigned short value = read(REG_VRESET_ID);
//Extract the threshold
return (value >> 9) * 0.04;
}
// Set the reset voltage threshold of the MAX17048
void vResetThresholdSet()
{
//Read the current 16-bit register value
unsigned short value = read(REG_VRESET_ID);
//Mask off the old //value
value &= 0x00FF;//Dis=0
value |= 0x7C00;//corresponding to 2.5 V
//Write the 16-bit register
write(REG_VRESET_ID, value);
}
// Get the factory programmed 8-bit ID of the MAX17048
char id()
{
//Read the 16-bit register value
unsigned short value = read(REG_VRESET_ID);
//Return only the ID bits
return value;
}
// Determine whether or not the voltage reset alert is enabled on the MAX17048
bool vResetAlertEnabled()
{
//Read the 16-bit register value
unsigned short value = read(REG_STATUS);
//Return the status of the EnVR bit
if (value & (1 << 14))
return true;
else
return false;
}
// Enable or disable the voltage reset alert on the MAX17048
void vResetAlertEnabled(bool enabled)
{
//Read the current 16-bit register value
unsigned short value = read(REG_STATUS);
//Set or clear the EnVR bit
if (enabled)
value |= (1 << 14);
else
value &= ~(1 << 14);
//Write the value back out
write(REG_STATUS, value);
}
//Get the current alert flags on the MAX17048
//refer datasheet-status registers section to decode it.
char alertFlags()
{
//Read the 16-bit register value
unsigned short value = read(REG_STATUS);
//Return only the flag bits
return (value >> 8) & 0x3F;
}
// Clear all the alert flags on the MAX17048
void clearAlertFlags()
{
//Read the current 16-bit register value
unsigned short value = read(REG_STATUS);
//Clear the specified flag bits
value &= ~( 0x3F<< 8);
//Write the value back out
write(REG_STATUS, value);
}
// Get the current cell voltage measurement of the MAX17048
float vcell()
{
//Read the 16-bit raw Vcell value
unsigned short value = read(REG_VCELL);
//Return Vcell in volts
return value * 0.000078125;
}
// Get the current state of charge measurement of the MAX17048 as a float
float soc()
{
//Read the 16-bit raw SOC value
unsigned short value = read(REG_SOC);
//Return SOC in percent
return value * 0.00390625;
}
// Get the current state of charge measurement of the MAX17048 as an int
int soc_int()
{
//Read the 16-bit raw SOC value
unsigned short value = read(REG_SOC);
//Return only the top byte
return value >> 8;
}
// Get the current C rate measurement of the MAX17048
float crate()
{
//Read the 16-bit raw C/Rate value
short value = read(REG_CRATE);
//Return C/Rate in %/hr
return value * 0.208;
}
//I2C register addresses
enum Register {
REG_VCELL = 0x02,
REG_SOC = 0x04,
REG_MODE = 0x06,
REG_VERSION = 0x08,
REG_HIBRT = 0x0A,
REG_CONFIG = 0x0C,
REG_VALRT = 0x14,
REG_CRATE = 0x16,
REG_VRESET_ID = 0x18,
REG_STATUS = 0x1A,
REG_TABLE = 0x40,
REG_CMD = 0xFE
};
//Member constants
static const int m_ADDR=(0x36 << 1);
//Member variables
I2C m_I2C;
//Internal functions
unsigned short read(char reg)
{
//Create a temporary buffer
char buff[2];
//Select the register
m_I2C.write(m_ADDR, ®, 1, true);
//Read the 16-bit register
m_I2C.read(m_ADDR, buff, 2);
//Return the combined 16-bit value
return (buff[0] << 8) | buff[1];
}
void write(char reg, unsigned short data)
{
//Create a temporary buffer
char buff[3];
//Load the register address and 16-bit data
buff[0] = reg;
buff[1] = data >> 8;
buff[2] = data;
//Write the data
m_I2C.write(m_ADDR, buff, 3);
}
};
void FUNC_BATTERYGAUGE_MAIN(float[]);
