![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
bae wrking isr no bcn
Fork of TV_BAE_conops1_1_1 by
EPS.cpp@0:913c9e982740, 2015-11-03 (annotated)
- Committer:
- sakthipriya
- Date:
- Tue Nov 03 14:46:51 2015 +0000
- Revision:
- 0:913c9e982740
i2c in rtos working
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sakthipriya | 0:913c9e982740 | 1 | #include "EPS.h" |
sakthipriya | 0:913c9e982740 | 2 | #include "pin_config.h" |
sakthipriya | 0:913c9e982740 | 3 | /***********************************************global variable declaration***************************************************************/ |
sakthipriya | 0:913c9e982740 | 4 | extern uint32_t BAE_STATUS; |
sakthipriya | 0:913c9e982740 | 5 | extern uint32_t BAE_ENABLE; |
sakthipriya | 0:913c9e982740 | 6 | extern char hk_data[25]; |
sakthipriya | 0:913c9e982740 | 7 | const char RCOMP0= 0x97; |
sakthipriya | 0:913c9e982740 | 8 | SensorData Sensor; |
sakthipriya | 0:913c9e982740 | 9 | SensorDataQuantised SensorQuantised; |
sakthipriya | 0:913c9e982740 | 10 | ShortBeacy Shortbeacon; |
sakthipriya | 0:913c9e982740 | 11 | |
sakthipriya | 0:913c9e982740 | 12 | |
sakthipriya | 0:913c9e982740 | 13 | /***********************************************Configuring Peripherals*******************************************************************/ |
sakthipriya | 0:913c9e982740 | 14 | Serial pc_eps(USBTX,USBRX); |
sakthipriya | 0:913c9e982740 | 15 | |
sakthipriya | 0:913c9e982740 | 16 | I2C BG_I2C(D14,D15); //i2c btwn bae and battery gauge |
sakthipriya | 0:913c9e982740 | 17 | DigitalOut SelectLinesA[] = {PIN43,PIN44,PIN45,PIN46}; //to mux1=>voltage mux , PTA 13-16 , CHNGE TO PIN43 LATER |
sakthipriya | 0:913c9e982740 | 18 | DigitalOut SelectLinesB[] = {PIN56,PIN57,PIN58,PIN59}; //to mux2=>current mux(differential mux) , PTB 3,7,8,9 |
sakthipriya | 0:913c9e982740 | 19 | //MSB is SelectLines[0],LSB is SelectLines[3] |
sakthipriya | 0:913c9e982740 | 20 | AnalogIn CurrentInput(PIN53); // output from Current Mux PTB0 |
sakthipriya | 0:913c9e982740 | 21 | AnalogIn VoltageInput(PIN54); // output from Voltage Multiplexer PTB1 |
sakthipriya | 0:913c9e982740 | 22 | AnalogIn Vbatt_ang(VBATT); //VBATT of battery gauge |
sakthipriya | 0:913c9e982740 | 23 | |
sakthipriya | 0:913c9e982740 | 24 | SPI BTemp_spi(PTD6,PTD7,PTD5); //MOSI,MISO,SLK |
sakthipriya | 0:913c9e982740 | 25 | DigitalOut BTemp_ssn1(PTD4); //Slave select1 |
sakthipriya | 0:913c9e982740 | 26 | DigitalOut BTemp_ssn2(PTD2);//Slave select2 |
sakthipriya | 0:913c9e982740 | 27 | DigitalOut BTemp_PS(PTB0); |
sakthipriya | 0:913c9e982740 | 28 | DigitalOut BTemp_HS(PTB1); |
sakthipriya | 0:913c9e982740 | 29 | |
sakthipriya | 0:913c9e982740 | 30 | DigitalOut TRXY(TRXY_DR_EN); //active high |
sakthipriya | 0:913c9e982740 | 31 | DigitalOut TRZ(TRZ_DR_EN); //active high |
sakthipriya | 0:913c9e982740 | 32 | DigitalOut EN3V3A(ENBL3V3A); |
sakthipriya | 0:913c9e982740 | 33 | DigitalOut EN_BTRY_HT(BATT_HEAT); |
sakthipriya | 0:913c9e982740 | 34 | //DigitalIn BTRY_HT_OUTPUT(BATT_HEAT_OUTPUT); |
sakthipriya | 0:913c9e982740 | 35 | |
sakthipriya | 0:913c9e982740 | 36 | //*********************************************************flags********************************************************// |
sakthipriya | 0:913c9e982740 | 37 | extern char EPS_INIT_STATUS ; |
sakthipriya | 0:913c9e982740 | 38 | extern char EPS_BATTERY_GAUGE_STATUS ; |
sakthipriya | 0:913c9e982740 | 39 | extern char EPS_MAIN_STATUS; |
sakthipriya | 0:913c9e982740 | 40 | extern char EPS_BATTERY_TEMP_STATUS ; |
sakthipriya | 0:913c9e982740 | 41 | extern char EPS_STATUS ; |
sakthipriya | 0:913c9e982740 | 42 | |
sakthipriya | 0:913c9e982740 | 43 | extern char EPS_BATTERY_HEAT_ENABLE ; |
sakthipriya | 0:913c9e982740 | 44 | |
sakthipriya | 0:913c9e982740 | 45 | //----------------------------------------------------EPS INIT---------------------------------------------------------------------------// |
sakthipriya | 0:913c9e982740 | 46 | void FCTN_EPS_INIT() |
sakthipriya | 0:913c9e982740 | 47 | { |
sakthipriya | 0:913c9e982740 | 48 | printf("\n\r eps init \n"); |
sakthipriya | 0:913c9e982740 | 49 | EPS_INIT_STATUS = 's' ; //set EPS_INIT_STATUS flag |
sakthipriya | 0:913c9e982740 | 50 | FLAG(); |
sakthipriya | 0:913c9e982740 | 51 | FCTN_EPS_BG_INIT(); |
sakthipriya | 0:913c9e982740 | 52 | FCTN_EPS_BTEMP_INIT(); |
sakthipriya | 0:913c9e982740 | 53 | EN3V3A = 1; //enable dc dc converter A |
sakthipriya | 0:913c9e982740 | 54 | char value=BG_alertFlags(); |
sakthipriya | 0:913c9e982740 | 55 | unsigned short value_u= (short int )value; |
sakthipriya | 0:913c9e982740 | 56 | value_u &=0x0001; |
sakthipriya | 0:913c9e982740 | 57 | if(value_u ==0x0001) // battery gauge not initialised |
sakthipriya | 0:913c9e982740 | 58 | { |
sakthipriya | 0:913c9e982740 | 59 | Sensor.power_mode = 1; |
sakthipriya | 0:913c9e982740 | 60 | Sensor.SOC = 80; //dummy |
sakthipriya | 0:913c9e982740 | 61 | FCTN_EPS_POWERMODE(Sensor.SOC); |
sakthipriya | 0:913c9e982740 | 62 | EPS_BATTERY_GAUGE_STATUS = 'c'; //clear EPS_BATTERY_GAUGE_STATUS |
sakthipriya | 0:913c9e982740 | 63 | } |
sakthipriya | 0:913c9e982740 | 64 | else |
sakthipriya | 0:913c9e982740 | 65 | { |
sakthipriya | 0:913c9e982740 | 66 | Sensor.SOC = BG_soc(); |
sakthipriya | 0:913c9e982740 | 67 | Sensor.SOC = 80; //dummy |
sakthipriya | 0:913c9e982740 | 68 | Sensor.Vbatt = Vbatt_ang.read()*3.3; |
sakthipriya | 0:913c9e982740 | 69 | FCTN_EPS_POWERMODE(Sensor.SOC); |
sakthipriya | 0:913c9e982740 | 70 | EPS_BATTERY_GAUGE_STATUS = 's'; //set EPS_BATTERY_GAUGE_STATUS |
sakthipriya | 0:913c9e982740 | 71 | } |
sakthipriya | 0:913c9e982740 | 72 | |
sakthipriya | 0:913c9e982740 | 73 | EPS_INIT_STATUS = 'c' ; //clear EPS_INIT_STATUS flag |
sakthipriya | 0:913c9e982740 | 74 | |
sakthipriya | 0:913c9e982740 | 75 | } |
sakthipriya | 0:913c9e982740 | 76 | |
sakthipriya | 0:913c9e982740 | 77 | //---------------------------------------------battery Temp sensor code------------------------------------------------------------------// |
sakthipriya | 0:913c9e982740 | 78 | void FCTN_EPS_BTEMP_INIT() |
sakthipriya | 0:913c9e982740 | 79 | { |
sakthipriya | 0:913c9e982740 | 80 | BTemp_ssn1=1;BTemp_ssn2=1; |
sakthipriya | 0:913c9e982740 | 81 | BTemp_PS=0; //power switch control enable |
sakthipriya | 0:913c9e982740 | 82 | BTemp_HS=0; //heater switch |
sakthipriya | 0:913c9e982740 | 83 | BTemp_spi.format(8,3); |
sakthipriya | 0:913c9e982740 | 84 | BTemp_spi.frequency(1000000); |
sakthipriya | 0:913c9e982740 | 85 | } |
sakthipriya | 0:913c9e982740 | 86 | |
sakthipriya | 0:913c9e982740 | 87 | //----------------------------------------------------Battery Gauge code-----------------------------------------------------------------// |
sakthipriya | 0:913c9e982740 | 88 | |
sakthipriya | 0:913c9e982740 | 89 | void FCTN_EPS_BG_INIT() |
sakthipriya | 0:913c9e982740 | 90 | { |
sakthipriya | 0:913c9e982740 | 91 | BG_disableSleep(); |
sakthipriya | 0:913c9e982740 | 92 | BG_disableHibernate(); |
sakthipriya | 0:913c9e982740 | 93 | BG_socChangeAlertEnabled(true); //enabling alert on soc changing by 1% |
sakthipriya | 0:913c9e982740 | 94 | BG_emptyAlertThreshold(32);//setting empty alert threshold to 32% soc |
sakthipriya | 0:913c9e982740 | 95 | BG_vAlertMinMaxThreshold();//set min, max value of Valrt register |
sakthipriya | 0:913c9e982740 | 96 | BG_vResetThresholdSet();//set threshold voltage for reset |
sakthipriya | 0:913c9e982740 | 97 | BG_vResetAlertEnabled(true);//enable alert on reset for V < Vreset |
sakthipriya | 0:913c9e982740 | 98 | } |
sakthipriya | 0:913c9e982740 | 99 | |
sakthipriya | 0:913c9e982740 | 100 | unsigned short BG_readReg(char reg) |
sakthipriya | 0:913c9e982740 | 101 | { |
sakthipriya | 0:913c9e982740 | 102 | //Create a temporary buffer |
sakthipriya | 0:913c9e982740 | 103 | char buff[2] = {0,0}; |
sakthipriya | 0:913c9e982740 | 104 | |
sakthipriya | 0:913c9e982740 | 105 | //Select the register |
sakthipriya | 0:913c9e982740 | 106 | BG_I2C.write(BG_ADDR, ®, 1, true); |
sakthipriya | 0:913c9e982740 | 107 | |
sakthipriya | 0:913c9e982740 | 108 | //Read the 16-bit register |
sakthipriya | 0:913c9e982740 | 109 | BG_I2C.read(BG_ADDR, buff, 2); |
sakthipriya | 0:913c9e982740 | 110 | |
sakthipriya | 0:913c9e982740 | 111 | //Return the combined 16-bit value |
sakthipriya | 0:913c9e982740 | 112 | return (buff[0] << 8) | buff[1]; |
sakthipriya | 0:913c9e982740 | 113 | } |
sakthipriya | 0:913c9e982740 | 114 | |
sakthipriya | 0:913c9e982740 | 115 | void BG_writeReg(char reg, unsigned short data) |
sakthipriya | 0:913c9e982740 | 116 | { |
sakthipriya | 0:913c9e982740 | 117 | //Create a temporary buffer |
sakthipriya | 0:913c9e982740 | 118 | char buff[3]; |
sakthipriya | 0:913c9e982740 | 119 | |
sakthipriya | 0:913c9e982740 | 120 | //Load the register address and 16-bit data |
sakthipriya | 0:913c9e982740 | 121 | buff[0] = reg; |
sakthipriya | 0:913c9e982740 | 122 | buff[1] = data >> 8; |
sakthipriya | 0:913c9e982740 | 123 | buff[2] = data; |
sakthipriya | 0:913c9e982740 | 124 | |
sakthipriya | 0:913c9e982740 | 125 | //Write the data |
sakthipriya | 0:913c9e982740 | 126 | BG_I2C.write(BG_ADDR, buff, 3); |
sakthipriya | 0:913c9e982740 | 127 | } |
sakthipriya | 0:913c9e982740 | 128 | |
sakthipriya | 0:913c9e982740 | 129 | |
sakthipriya | 0:913c9e982740 | 130 | |
sakthipriya | 0:913c9e982740 | 131 | // Command the MAX17049 to perform a power-on reset |
sakthipriya | 0:913c9e982740 | 132 | void BG_reset() |
sakthipriya | 0:913c9e982740 | 133 | { |
sakthipriya | 0:913c9e982740 | 134 | //Write the POR command |
sakthipriya | 0:913c9e982740 | 135 | BG_writeReg(REG_CMD, 0x5400); |
sakthipriya | 0:913c9e982740 | 136 | } |
sakthipriya | 0:913c9e982740 | 137 | |
sakthipriya | 0:913c9e982740 | 138 | // Command the MAX17049 to perform a QuickStart |
sakthipriya | 0:913c9e982740 | 139 | void BG_quickStart() |
sakthipriya | 0:913c9e982740 | 140 | { |
sakthipriya | 0:913c9e982740 | 141 | //Read the current 16-bit register value |
sakthipriya | 0:913c9e982740 | 142 | unsigned short value = BG_readReg(REG_MODE); |
sakthipriya | 0:913c9e982740 | 143 | |
sakthipriya | 0:913c9e982740 | 144 | //Set the QuickStart bit |
sakthipriya | 0:913c9e982740 | 145 | value |= (1 << 14); |
sakthipriya | 0:913c9e982740 | 146 | |
sakthipriya | 0:913c9e982740 | 147 | //Write the value back out |
sakthipriya | 0:913c9e982740 | 148 | BG_writeReg(REG_MODE, value); |
sakthipriya | 0:913c9e982740 | 149 | } |
sakthipriya | 0:913c9e982740 | 150 | |
sakthipriya | 0:913c9e982740 | 151 | |
sakthipriya | 0:913c9e982740 | 152 | //disable sleep |
sakthipriya | 0:913c9e982740 | 153 | void BG_disableSleep() |
sakthipriya | 0:913c9e982740 | 154 | { |
sakthipriya | 0:913c9e982740 | 155 | unsigned short value = BG_readReg(REG_MODE); |
sakthipriya | 0:913c9e982740 | 156 | value &= ~(1 << 13); |
sakthipriya | 0:913c9e982740 | 157 | BG_writeReg(REG_MODE, value); |
sakthipriya | 0:913c9e982740 | 158 | } |
sakthipriya | 0:913c9e982740 | 159 | |
sakthipriya | 0:913c9e982740 | 160 | //disable the hibernate of the MAX17049 |
sakthipriya | 0:913c9e982740 | 161 | void BG_disableHibernate() |
sakthipriya | 0:913c9e982740 | 162 | { |
sakthipriya | 0:913c9e982740 | 163 | BG_writeReg(REG_HIBRT, 0x0000); |
sakthipriya | 0:913c9e982740 | 164 | } |
sakthipriya | 0:913c9e982740 | 165 | |
sakthipriya | 0:913c9e982740 | 166 | |
sakthipriya | 0:913c9e982740 | 167 | // Enable or disable the SOC 1% change alert on the MAX17049 |
sakthipriya | 0:913c9e982740 | 168 | void BG_socChangeAlertEnabled(bool enabled) |
sakthipriya | 0:913c9e982740 | 169 | { |
sakthipriya | 0:913c9e982740 | 170 | //Read the current 16-bit register value |
sakthipriya | 0:913c9e982740 | 171 | unsigned short value = BG_readReg(REG_CONFIG); |
sakthipriya | 0:913c9e982740 | 172 | |
sakthipriya | 0:913c9e982740 | 173 | //Set or clear the ALSC bit |
sakthipriya | 0:913c9e982740 | 174 | if (enabled) |
sakthipriya | 0:913c9e982740 | 175 | value |= (1 << 6); |
sakthipriya | 0:913c9e982740 | 176 | else |
sakthipriya | 0:913c9e982740 | 177 | value &= ~(1 << 6); |
sakthipriya | 0:913c9e982740 | 178 | |
sakthipriya | 0:913c9e982740 | 179 | //Write the value back out |
sakthipriya | 0:913c9e982740 | 180 | BG_writeReg(REG_CONFIG, value); |
sakthipriya | 0:913c9e982740 | 181 | } |
sakthipriya | 0:913c9e982740 | 182 | |
sakthipriya | 0:913c9e982740 | 183 | float BG_compensation() |
sakthipriya | 0:913c9e982740 | 184 | { |
sakthipriya | 0:913c9e982740 | 185 | //Read the 16-bit register value |
sakthipriya | 0:913c9e982740 | 186 | unsigned short value = BG_readReg(REG_CONFIG); |
sakthipriya | 0:913c9e982740 | 187 | |
sakthipriya | 0:913c9e982740 | 188 | //Return only the upper byte |
sakthipriya | 0:913c9e982740 | 189 | return (char)(value >> 8); |
sakthipriya | 0:913c9e982740 | 190 | } |
sakthipriya | 0:913c9e982740 | 191 | |
sakthipriya | 0:913c9e982740 | 192 | void BG_compensation(char rcomp) |
sakthipriya | 0:913c9e982740 | 193 | { |
sakthipriya | 0:913c9e982740 | 194 | //Read the current 16-bit register value |
sakthipriya | 0:913c9e982740 | 195 | unsigned short value = BG_readReg(REG_CONFIG); |
sakthipriya | 0:913c9e982740 | 196 | |
sakthipriya | 0:913c9e982740 | 197 | //Update the register value |
sakthipriya | 0:913c9e982740 | 198 | value &= 0x00FF; |
sakthipriya | 0:913c9e982740 | 199 | value |= rcomp << 8; |
sakthipriya | 0:913c9e982740 | 200 | |
sakthipriya | 0:913c9e982740 | 201 | //Write the value back out |
sakthipriya | 0:913c9e982740 | 202 | BG_writeReg(REG_CONFIG, value); |
sakthipriya | 0:913c9e982740 | 203 | } |
sakthipriya | 0:913c9e982740 | 204 | |
sakthipriya | 0:913c9e982740 | 205 | |
sakthipriya | 0:913c9e982740 | 206 | void BG_tempCompensation(float temp) |
sakthipriya | 0:913c9e982740 | 207 | { |
sakthipriya | 0:913c9e982740 | 208 | //Calculate the new RCOMP value |
sakthipriya | 0:913c9e982740 | 209 | char rcomp; |
sakthipriya | 0:913c9e982740 | 210 | if (temp > 20.0) { |
sakthipriya | 0:913c9e982740 | 211 | rcomp = RCOMP0 + (temp - 20.0) * -0.5; |
sakthipriya | 0:913c9e982740 | 212 | } else { |
sakthipriya | 0:913c9e982740 | 213 | rcomp = RCOMP0 + (temp - 20.0) * -5.0; |
sakthipriya | 0:913c9e982740 | 214 | } |
sakthipriya | 0:913c9e982740 | 215 | |
sakthipriya | 0:913c9e982740 | 216 | //Update the RCOMP value |
sakthipriya | 0:913c9e982740 | 217 | BG_compensation(rcomp); |
sakthipriya | 0:913c9e982740 | 218 | } |
sakthipriya | 0:913c9e982740 | 219 | |
sakthipriya | 0:913c9e982740 | 220 | // Determine whether or not the MAX17049 is asserting the ALRT pin |
sakthipriya | 0:913c9e982740 | 221 | bool BG_alerting() |
sakthipriya | 0:913c9e982740 | 222 | { |
sakthipriya | 0:913c9e982740 | 223 | //Read the 16-bit register value |
sakthipriya | 0:913c9e982740 | 224 | unsigned short value = BG_readReg(REG_CONFIG); |
sakthipriya | 0:913c9e982740 | 225 | |
sakthipriya | 0:913c9e982740 | 226 | //Return the status of the ALRT bit |
sakthipriya | 0:913c9e982740 | 227 | if (value & (1 << 5)) |
sakthipriya | 0:913c9e982740 | 228 | return true; |
sakthipriya | 0:913c9e982740 | 229 | else |
sakthipriya | 0:913c9e982740 | 230 | return false; |
sakthipriya | 0:913c9e982740 | 231 | } |
sakthipriya | 0:913c9e982740 | 232 | |
sakthipriya | 0:913c9e982740 | 233 | // Command the MAX17049 to de-assert the ALRT pin |
sakthipriya | 0:913c9e982740 | 234 | void BG_clearAlert() |
sakthipriya | 0:913c9e982740 | 235 | { |
sakthipriya | 0:913c9e982740 | 236 | //Read the current 16-bit register value |
sakthipriya | 0:913c9e982740 | 237 | unsigned short value = BG_readReg(REG_CONFIG); |
sakthipriya | 0:913c9e982740 | 238 | |
sakthipriya | 0:913c9e982740 | 239 | //Clear the ALRT bit |
sakthipriya | 0:913c9e982740 | 240 | value &= ~(1 << 5); |
sakthipriya | 0:913c9e982740 | 241 | |
sakthipriya | 0:913c9e982740 | 242 | //Write the value back out |
sakthipriya | 0:913c9e982740 | 243 | BG_writeReg(REG_CONFIG, value); |
sakthipriya | 0:913c9e982740 | 244 | } |
sakthipriya | 0:913c9e982740 | 245 | |
sakthipriya | 0:913c9e982740 | 246 | |
sakthipriya | 0:913c9e982740 | 247 | //Set the SOC empty alert threshold of the MAX17049 |
sakthipriya | 0:913c9e982740 | 248 | void BG_emptyAlertThreshold(char threshold) |
sakthipriya | 0:913c9e982740 | 249 | { |
sakthipriya | 0:913c9e982740 | 250 | //Read the current 16-bit register value |
sakthipriya | 0:913c9e982740 | 251 | unsigned short value = BG_readReg(REG_CONFIG); |
sakthipriya | 0:913c9e982740 | 252 | |
sakthipriya | 0:913c9e982740 | 253 | //Update the register value |
sakthipriya | 0:913c9e982740 | 254 | value &= 0xFFE0; |
sakthipriya | 0:913c9e982740 | 255 | value |= 32 - threshold; |
sakthipriya | 0:913c9e982740 | 256 | |
sakthipriya | 0:913c9e982740 | 257 | //Write the 16-bit register |
sakthipriya | 0:913c9e982740 | 258 | BG_writeReg(REG_CONFIG, value); |
sakthipriya | 0:913c9e982740 | 259 | } |
sakthipriya | 0:913c9e982740 | 260 | |
sakthipriya | 0:913c9e982740 | 261 | // Set the low and high voltage alert threshold of the MAX17049 |
sakthipriya | 0:913c9e982740 | 262 | void BG_vAlertMinMaxThreshold() |
sakthipriya | 0:913c9e982740 | 263 | { |
sakthipriya | 0:913c9e982740 | 264 | //Read the current 16-bit register value |
sakthipriya | 0:913c9e982740 | 265 | unsigned short value = BG_readReg(REG_VALRT); |
sakthipriya | 0:913c9e982740 | 266 | |
sakthipriya | 0:913c9e982740 | 267 | //Mask off the old value |
sakthipriya | 0:913c9e982740 | 268 | value = 0x96D2; // threshold is betweeen 6 and 8.4 v |
sakthipriya | 0:913c9e982740 | 269 | |
sakthipriya | 0:913c9e982740 | 270 | //Write the 16-bit register |
sakthipriya | 0:913c9e982740 | 271 | BG_writeReg(REG_VALRT, value); |
sakthipriya | 0:913c9e982740 | 272 | } |
sakthipriya | 0:913c9e982740 | 273 | |
sakthipriya | 0:913c9e982740 | 274 | |
sakthipriya | 0:913c9e982740 | 275 | // Set the reset voltage threshold of the MAX17049 |
sakthipriya | 0:913c9e982740 | 276 | void BG_vResetThresholdSet() |
sakthipriya | 0:913c9e982740 | 277 | { |
sakthipriya | 0:913c9e982740 | 278 | //Read the current 16-bit register value |
sakthipriya | 0:913c9e982740 | 279 | unsigned short value = BG_readReg(REG_VRESET_ID); |
sakthipriya | 0:913c9e982740 | 280 | |
sakthipriya | 0:913c9e982740 | 281 | //Mask off the old //value |
sakthipriya | 0:913c9e982740 | 282 | value &= 0x00FF;//Dis=0 |
sakthipriya | 0:913c9e982740 | 283 | |
sakthipriya | 0:913c9e982740 | 284 | value |= 0x7C00;//corresponding to 2.5 V |
sakthipriya | 0:913c9e982740 | 285 | |
sakthipriya | 0:913c9e982740 | 286 | |
sakthipriya | 0:913c9e982740 | 287 | //write the 16-bit register |
sakthipriya | 0:913c9e982740 | 288 | BG_writeReg(REG_VRESET_ID, value); |
sakthipriya | 0:913c9e982740 | 289 | } |
sakthipriya | 0:913c9e982740 | 290 | |
sakthipriya | 0:913c9e982740 | 291 | |
sakthipriya | 0:913c9e982740 | 292 | // Enable or disable the voltage reset alert on the MAX17049 |
sakthipriya | 0:913c9e982740 | 293 | void BG_vResetAlertEnabled(bool enabled) |
sakthipriya | 0:913c9e982740 | 294 | { |
sakthipriya | 0:913c9e982740 | 295 | //Read the current 16-bit register value |
sakthipriya | 0:913c9e982740 | 296 | unsigned short value = BG_readReg(REG_STATUS); |
sakthipriya | 0:913c9e982740 | 297 | |
sakthipriya | 0:913c9e982740 | 298 | //Set or clear the EnVR bit |
sakthipriya | 0:913c9e982740 | 299 | if (enabled) |
sakthipriya | 0:913c9e982740 | 300 | value |= (1 << 14); |
sakthipriya | 0:913c9e982740 | 301 | else |
sakthipriya | 0:913c9e982740 | 302 | value &= ~(1 << 14); |
sakthipriya | 0:913c9e982740 | 303 | |
sakthipriya | 0:913c9e982740 | 304 | //Write the value back out |
sakthipriya | 0:913c9e982740 | 305 | BG_writeReg(REG_STATUS, value); |
sakthipriya | 0:913c9e982740 | 306 | } |
sakthipriya | 0:913c9e982740 | 307 | |
sakthipriya | 0:913c9e982740 | 308 | //Get the current alert flags on the MAX17049 |
sakthipriya | 0:913c9e982740 | 309 | //refer datasheet-status registers section to decode it. |
sakthipriya | 0:913c9e982740 | 310 | char BG_alertFlags() |
sakthipriya | 0:913c9e982740 | 311 | { |
sakthipriya | 0:913c9e982740 | 312 | //Read the 16-bit register value |
sakthipriya | 0:913c9e982740 | 313 | unsigned short value = BG_readReg(REG_STATUS); |
sakthipriya | 0:913c9e982740 | 314 | |
sakthipriya | 0:913c9e982740 | 315 | //Return only the flag bits |
sakthipriya | 0:913c9e982740 | 316 | return (value >> 8) & 0x3F; |
sakthipriya | 0:913c9e982740 | 317 | } |
sakthipriya | 0:913c9e982740 | 318 | |
sakthipriya | 0:913c9e982740 | 319 | // Clear all the alert flags on the MAX17049 |
sakthipriya | 0:913c9e982740 | 320 | void BG_clearAlertFlags() |
sakthipriya | 0:913c9e982740 | 321 | { |
sakthipriya | 0:913c9e982740 | 322 | //Read the current 16-bit register value |
sakthipriya | 0:913c9e982740 | 323 | unsigned short value = BG_readReg(REG_STATUS); |
sakthipriya | 0:913c9e982740 | 324 | |
sakthipriya | 0:913c9e982740 | 325 | //Clear the specified flag bits |
sakthipriya | 0:913c9e982740 | 326 | value &= ~( 0x3F<< 8); |
sakthipriya | 0:913c9e982740 | 327 | |
sakthipriya | 0:913c9e982740 | 328 | //Write the value back out |
sakthipriya | 0:913c9e982740 | 329 | BG_writeReg(REG_STATUS, value); |
sakthipriya | 0:913c9e982740 | 330 | } |
sakthipriya | 0:913c9e982740 | 331 | |
sakthipriya | 0:913c9e982740 | 332 | // Get the current cell voltage measurement of the MAX17049 |
sakthipriya | 0:913c9e982740 | 333 | float BG_vcell() |
sakthipriya | 0:913c9e982740 | 334 | { |
sakthipriya | 0:913c9e982740 | 335 | //Read the 16-bit raw Vcell value |
sakthipriya | 0:913c9e982740 | 336 | unsigned short value = BG_readReg(REG_VCELL); |
sakthipriya | 0:913c9e982740 | 337 | |
sakthipriya | 0:913c9e982740 | 338 | //Return Vcell in volts |
sakthipriya | 0:913c9e982740 | 339 | return value * 0.000078125*2; |
sakthipriya | 0:913c9e982740 | 340 | } |
sakthipriya | 0:913c9e982740 | 341 | |
sakthipriya | 0:913c9e982740 | 342 | // Get the current state of charge measurement of the MAX17049 as a float |
sakthipriya | 0:913c9e982740 | 343 | float BG_soc() |
sakthipriya | 0:913c9e982740 | 344 | { |
sakthipriya | 0:913c9e982740 | 345 | //Read the 16-bit raw SOC value |
sakthipriya | 0:913c9e982740 | 346 | unsigned short value = BG_readReg(REG_SOC); |
sakthipriya | 0:913c9e982740 | 347 | |
sakthipriya | 0:913c9e982740 | 348 | //Return SOC in percent |
sakthipriya | 0:913c9e982740 | 349 | return value * 0.00390625; |
sakthipriya | 0:913c9e982740 | 350 | } |
sakthipriya | 0:913c9e982740 | 351 | |
sakthipriya | 0:913c9e982740 | 352 | |
sakthipriya | 0:913c9e982740 | 353 | |
sakthipriya | 0:913c9e982740 | 354 | // Get the current C rate measurement of the MAX17049 |
sakthipriya | 0:913c9e982740 | 355 | float BG_crate() |
sakthipriya | 0:913c9e982740 | 356 | { |
sakthipriya | 0:913c9e982740 | 357 | //Read the 16-bit raw C/Rate value |
sakthipriya | 0:913c9e982740 | 358 | short value = BG_readReg(REG_CRATE); |
sakthipriya | 0:913c9e982740 | 359 | |
sakthipriya | 0:913c9e982740 | 360 | //Return C/Rate in %/hr |
sakthipriya | 0:913c9e982740 | 361 | return value * 0.208; |
sakthipriya | 0:913c9e982740 | 362 | } |
sakthipriya | 0:913c9e982740 | 363 | |
sakthipriya | 0:913c9e982740 | 364 | |
sakthipriya | 0:913c9e982740 | 365 | //----------------------------------------------------Power algo code--------------------------------------------------------------------// |
sakthipriya | 0:913c9e982740 | 366 | void FCTN_EPS_POWERMODE(float soc) //dummy algo |
sakthipriya | 0:913c9e982740 | 367 | { |
sakthipriya | 0:913c9e982740 | 368 | if(soc >= 80) |
sakthipriya | 0:913c9e982740 | 369 | Sensor.power_mode = 4; |
sakthipriya | 0:913c9e982740 | 370 | else if(soc >= 70 & soc < 80) |
sakthipriya | 0:913c9e982740 | 371 | Sensor.power_mode = 3; |
sakthipriya | 0:913c9e982740 | 372 | else if(soc >= 60 & soc < 70) |
sakthipriya | 0:913c9e982740 | 373 | Sensor.power_mode = 2; |
sakthipriya | 0:913c9e982740 | 374 | else if(soc < 60) |
sakthipriya | 0:913c9e982740 | 375 | Sensor.power_mode = 1; |
sakthipriya | 0:913c9e982740 | 376 | } |