i2c working with old hk

Dependencies:   mbed-rtos mbed

Fork of BAE_vr2_1_1 by green rosh

Revision:
14:ef6be8ac6569
Parent:
13:1b37d98840d3
--- a/HK.h	Wed Dec 17 05:25:04 2014 +0000
+++ b/HK.h	Wed Dec 17 06:06:59 2014 +0000
@@ -1,469 +1,36 @@
-//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
-#define Vcell_start 0
-#define Vcell_step 0.56//assuming vcell ranges from 0-8.4
-#define soc_start 0 //========
-#define soc_step 6.6667//assuming soc ranges from 0-100
-#define crate_start 0//------------
-#define crate_step 6.6667//assuming crate ranges from 0-100
-#define Bnewvalue_start -100//in microTesla...max possible field is .0001 T 
-#define Bnewvalue_step 13.333
-#define AngularSpeed_start -10//max possible ang. velocity in space is 10 deg/sec
-#define AngularSpeed_step 1.3333 
 
-typedef struct SensorData
-{
-    float Voltage[16];
-    float Current[8];
-    float Temperature[1];
-    float PanelTemperature[4];
-    float Vcell;
-    float soc;
-    char alerts;
-    //(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)
-    float crate;
-    float BatteryTemperature;   //to be populated
-    char faultpoll;             //polled faults
-    char faultir;               //interrupted faults
-    char power_mode;            //power modes
-    
-    float AngularSpeed[3];      //in order x,y,z
-    float Bnewvalue[3];         //in order Bx,By,Bz
-   
-    
-} SensorData;
+
 
  
-typedef struct SensorDataQuantised {
-    char Voltage[8];
-    char Current[4];
-    char Temperature[1];
-    char PanelTemperature[2];//read by the 4 thermistors on solar panels
-    char Vcell_soc;//MSBs correspond to Vcell, LSBs to Soc
-    char alerts;//UNQUANTISED
-    //(alerts[0]=1)-> reset indicator=>dont care
-    //(alerts[1]=1)-> Vcell>ValrtMax(5.1V)->will always be high->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;
-    char BatteryTemperature;    //to be populated   
-    char faultpoll;             //polled faults
-    char faultir;               //interrupted faults
-    char power_mode;            //power modes
+struct SensorData {
+    char Voltage[10];
+    char Current[10];
+    char Temperature[10];
+    char faultpoll;
+    char faultir;
+    char power_mode;
+    //float Battery[2];
+};
+
+ 
+typedef struct ShortBeacon {
+    char Voltage[1];
     char AngularSpeed[2];
-    char Bnewvalue[2];
-    
-    //float magnetometer,gyro=>to be addes
-} SensorDataQuantised;
- 
- 
-typedef struct ShortBeacon 
-{
-    char Voltage[1];                            //battery voltage from gauge, needs  to be quantised
-    char AngularSpeed[2];                       //all the 3 data
-    char SubsystemStatus[1];                    //power modes
-    char Temp[2];                               //temp of solar panel
-    //Temp[0]'s LSB=> PanelTemperature[0], Temp[0]'s MSB=> PanelTemperature[1], Temp[1]'s LSB=> PanelTemperature[2], Temp[1]'s MSB=> PanelTemperature[3]
-    char ErrorFlag[1];                          //fault
-}ShortBeacy; 
- 
- 
+    char SubsystemStatus[1]; 
+    char Temp[3];  
+    char ErrorFlag[1];
+}ShortBeacy;
+
  
 void FUNC_HK_MAIN();
  
 int quantiz(float start,float step,float x);
-void init_beacon(ShortBeacy* x,SensorDataQuantised y);
-
-
-//--------------------------------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, &reg, 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[]);
+