Team Fox / Mbed 2 deprecated BAE_QM_MAR9

Dependencies:   FreescaleIAP mbed-rtos mbed

Fork of workinQM_5thJan_azad by Team Fox

Committer:
azaddevarm
Date:
Sun Jul 03 17:49:37 2016 +0000
Revision:
32:623747b1cecb
Parent:
30:22b338b027de
Updated EPS with flowchart v2.6;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sakthipriya 0:7b4c00e3912f 1 #include "EPS.h"
sakthipriya 0:7b4c00e3912f 2 #include "pin_config.h"
sakthipriya 6:036d08b62785 3 #include "iostream"
sakthipriya 0:7b4c00e3912f 4 /***********************************************global variable declaration***************************************************************/
sakthipriya 0:7b4c00e3912f 5 extern uint32_t BAE_STATUS;
sakthipriya 0:7b4c00e3912f 6 extern uint32_t BAE_ENABLE;
sakthipriya 6:036d08b62785 7 extern uint8_t BAE_data[74];
sakthipriya 6:036d08b62785 8 extern char BAE_chardata[74];
sakthipriya 0:7b4c00e3912f 9
sakthipriya 0:7b4c00e3912f 10 //m_I2C.frequency(10000)
lakshya 15:e09aaaccf134 11 const char RCOMP0= 0x97;// don't know what it is now
sakthipriya 0:7b4c00e3912f 12 BAE_HK_actual actual_data;
sakthipriya 0:7b4c00e3912f 13 BAE_HK_quant quant_data;
sakthipriya 0:7b4c00e3912f 14 BAE_HK_min_max bae_HK_minmax;
sakthipriya 0:7b4c00e3912f 15 BAE_HK_arch arch_data;
sakthipriya 0:7b4c00e3912f 16
sakthipriya 5:bb592f3185cc 17
sakthipriya 0:7b4c00e3912f 18 //......................................Peripheral declarations.........................................................//
sakthipriya 0:7b4c00e3912f 19 Serial pc_eps(USBTX,USBRX);
sakthipriya 3:07e15677a75c 20
sakthipriya 0:7b4c00e3912f 21 I2C m_I2C(PIN85,PIN84);
sakthipriya 0:7b4c00e3912f 22 DigitalOut TRXY(TRXY_DR_EN); //active high
sakthipriya 0:7b4c00e3912f 23 DigitalOut TRZ(TRZ_DR_EN); //active high
sakthipriya 0:7b4c00e3912f 24 DigitalOut EN3V3A(ENBL3V3A);
azaddevarm 30:22b338b027de 25 //DigitalOut BTRY_HTR_ENABLE(BATT_HEAT); //EN_BTRY_HT
sakthipriya 0:7b4c00e3912f 26 //DigitalIn BTRY_HT_OUTPUT(BATT_HEAT_OUTPUT);
sakthipriya 3:07e15677a75c 27 //AnalogIn Vbatt_ang(VBATT);
sakthipriya 3:07e15677a75c 28 AnalogIn Batt_voltage(PIN20); //Battery voltage
sakthipriya 3:07e15677a75c 29
lakshya 15:e09aaaccf134 30 SPI spi_bt(PIN99,PIN100,PIN98); //MOSI,MISO,SLK // battery temp something 3
lakshya 15:e09aaaccf134 31 DigitalOut ssn1(PIN19); //Slave select1 // low line master talks
sakthipriya 2:c823d84b4cb0 32 DigitalOut ssn2(PIN21);//Slave select2
sakthipriya 2:c823d84b4cb0 33 //DigitalOut PS(PTB0);
sakthipriya 2:c823d84b4cb0 34 //DigitalOut HS(PTB1);
sakthipriya 2:c823d84b4cb0 35
sakthipriya 3:07e15677a75c 36 AnalogIn CurrentInput(PIN54); // Input from Current Multiplexer //PIN54
sakthipriya 3:07e15677a75c 37 AnalogIn VoltageInput(PIN53); // Input from Voltage Multiplexer //PIN53
sakthipriya 3:07e15677a75c 38 AnalogIn BAE_temp_sensor(PIN55); //Input from BAE temp sensor
sakthipriya 3:07e15677a75c 39
lakshya 15:e09aaaccf134 40 /*mux for reading value one by one*/
sakthipriya 3:07e15677a75c 41 DigitalOut SelectLinea3 (PIN46); // MSB of Select Lines
sakthipriya 3:07e15677a75c 42 DigitalOut SelectLinea2 (PIN45);
sakthipriya 3:07e15677a75c 43 DigitalOut SelectLinea1 (PIN44);
sakthipriya 3:07e15677a75c 44 DigitalOut SelectLinea0 (PIN43); // LSB of Select Lines
sakthipriya 3:07e15677a75c 45
sakthipriya 3:07e15677a75c 46 DigitalOut SelectLineb3 (PIN56); // MSB of Select Lines
sakthipriya 3:07e15677a75c 47 DigitalOut SelectLineb2 (PIN57);
sakthipriya 3:07e15677a75c 48 DigitalOut SelectLineb1 (PIN58);
sakthipriya 3:07e15677a75c 49 DigitalOut SelectLineb0 (PIN59); // LSB of Select Lines
sakthipriya 0:7b4c00e3912f 50
sakthipriya 0:7b4c00e3912f 51 //*********************************************************flags********************************************************//
azaddevarm 29:bb0d64656ba1 52 extern uint8_t EPS_INIT_STATUS ;
azaddevarm 29:bb0d64656ba1 53 extern uint8_t EPS_BATTERY_GAUGE_STATUS ;
azaddevarm 29:bb0d64656ba1 54 extern uint8_t EPS_MAIN_STATUS;
azaddevarm 30:22b338b027de 55 extern uint8_t EPS_BTRY_TMP_STATUS ;
azaddevarm 29:bb0d64656ba1 56 extern uint8_t EPS_STATUS ;
sakthipriya 0:7b4c00e3912f 57
azaddevarm 30:22b338b027de 58 extern uint8_t EPS_BTRY_HTR ;
sakthipriya 0:7b4c00e3912f 59
azaddevarm 28:5f0f2a3f3e8d 60 //eps cdms fault
azaddevarm 28:5f0f2a3f3e8d 61 extern uint8_t CDMS_SW_STATUS;
azaddevarm 28:5f0f2a3f3e8d 62 extern bool CDMS_OC_FAULT;
azaddevarm 28:5f0f2a3f3e8d 63 extern bool CDMS_SW_ENABLE;
azaddevarm 28:5f0f2a3f3e8d 64 extern int CDMS_FAULT_COUNTER;
azaddevarm 28:5f0f2a3f3e8d 65
azaddevarm 28:5f0f2a3f3e8d 66 //eps hw faults
azaddevarm 28:5f0f2a3f3e8d 67
azaddevarm 28:5f0f2a3f3e8d 68 extern uint8_t ACS_TR_Z_SW_STATUS;
azaddevarm 28:5f0f2a3f3e8d 69 extern bool ACS_TR_Z_ENABLE;
azaddevarm 28:5f0f2a3f3e8d 70 extern bool ACS_TR_Z_OC_FAULT;
azaddevarm 28:5f0f2a3f3e8d 71 extern bool ACS_TR_Z_FAULT; //Driver IC fault
azaddevarm 28:5f0f2a3f3e8d 72 extern int ACS_TR_Z_FAULT_COUNTER;
azaddevarm 28:5f0f2a3f3e8d 73
azaddevarm 28:5f0f2a3f3e8d 74 extern uint8_t ACS_TR_XY_SW_STATUS;
azaddevarm 28:5f0f2a3f3e8d 75 extern bool ACS_TR_XY_ENABLE;
azaddevarm 28:5f0f2a3f3e8d 76 extern bool ACS_TR_XY_OC_FAULT;
azaddevarm 28:5f0f2a3f3e8d 77 extern bool ACS_TR_XY_FAULT; //Driver IC fault
azaddevarm 28:5f0f2a3f3e8d 78 extern int ACS_TR_XY_FAULT_COUNTER;
azaddevarm 28:5f0f2a3f3e8d 79
azaddevarm 28:5f0f2a3f3e8d 80 extern uint8_t ACS_ATS1_SW_STATUS;
azaddevarm 28:5f0f2a3f3e8d 81 extern bool ACS_ATS1_ENABLE;
azaddevarm 28:5f0f2a3f3e8d 82 extern bool ACS_ATS1_OC_FAULT;
azaddevarm 28:5f0f2a3f3e8d 83 extern int ACS_ATS1_FAULT_COUNTER;
azaddevarm 28:5f0f2a3f3e8d 84
azaddevarm 28:5f0f2a3f3e8d 85 extern uint8_t ACS_ATS2_SW_STATUS;
azaddevarm 28:5f0f2a3f3e8d 86 extern bool ACS_ATS2_ENABLE;
azaddevarm 28:5f0f2a3f3e8d 87 extern bool ACS_ATS2_OC_FAULT;
azaddevarm 28:5f0f2a3f3e8d 88 extern int ACS_ATS2_FAULT_COUNTER;
azaddevarm 28:5f0f2a3f3e8d 89
azaddevarm 28:5f0f2a3f3e8d 90 extern uint8_t BCN_TX_SW_STATUS;
azaddevarm 28:5f0f2a3f3e8d 91 extern bool BCN_TX_ENABLE;
azaddevarm 28:5f0f2a3f3e8d 92 extern bool BCN_TX_OC_FAULT;
azaddevarm 28:5f0f2a3f3e8d 93 extern int BCN_TX_FAULT_COUNTER;
azaddevarm 28:5f0f2a3f3e8d 94
azaddevarm 28:5f0f2a3f3e8d 95
sakthipriya 0:7b4c00e3912f 96 //........................................... FUCTIONS.................................................//
sakthipriya 0:7b4c00e3912f 97
sakthipriya 0:7b4c00e3912f 98 void FCTN_EPS_INIT()
sakthipriya 0:7b4c00e3912f 99 {
sakthipriya 0:7b4c00e3912f 100 printf("\n\r eps init \n");
azaddevarm 29:bb0d64656ba1 101 EPS_INIT_STATUS = 1 ; //set EPS_INIT_STATUS flag
sakthipriya 3:07e15677a75c 102 // FLAG();
sakthipriya 0:7b4c00e3912f 103 FCTN_BATTERYGAUGE_INIT();
sakthipriya 0:7b4c00e3912f 104 EN3V3A = 1; //enable dc dc converter A
azaddevarm 32:623747b1cecb 105
lakshya 15:e09aaaccf134 106 char value=alertFlags(); // initialization part of battery gauge
sakthipriya 0:7b4c00e3912f 107 unsigned short value_u= (short int )value;
azaddevarm 32:623747b1cecb 108 //value_u &=0x0001;
azaddevarm 32:623747b1cecb 109 if(value_u & 0x0001 == 0x0001) // battery gauge not initialised
sakthipriya 0:7b4c00e3912f 110 {
sakthipriya 0:7b4c00e3912f 111 actual_data.power_mode = 1;
azaddevarm 29:bb0d64656ba1 112 EPS_BATTERY_GAUGE_STATUS = 0; //clear EPS_BATTERY_GAUGE_STATUS
azaddevarm 32:623747b1cecb 113 printf(" init BTG fail - %d\n\r", value_u);
sakthipriya 0:7b4c00e3912f 114 }
sakthipriya 0:7b4c00e3912f 115 else
sakthipriya 0:7b4c00e3912f 116 {
sakthipriya 0:7b4c00e3912f 117 actual_data.Batt_gauge_actual[1] = soc();
lakshya 15:e09aaaccf134 118 actual_data.Batt_voltage_actual = Batt_voltage.read()*3.3; //1 corresponds to 3.3 scaling factor
sakthipriya 0:7b4c00e3912f 119 FCTN_EPS_POWERMODE(actual_data.Batt_gauge_actual[1]);
azaddevarm 29:bb0d64656ba1 120 EPS_BATTERY_GAUGE_STATUS = 1; //set EPS_BATTERY_GAUGE_STATUS
azaddevarm 32:623747b1cecb 121 printf("init BTG success - %d\n\r", value_u);
sakthipriya 0:7b4c00e3912f 122 }
azaddevarm 32:623747b1cecb 123
azaddevarm 32:623747b1cecb 124 //if( read(REG_VERSION) ==
azaddevarm 32:623747b1cecb 125 printf("REG_VERSION = %d\r\n",read(REG_VERSION));
azaddevarm 29:bb0d64656ba1 126 FCTN_BATTTEMP_INIT();
azaddevarm 29:bb0d64656ba1 127 EPS_BATTERY_GAUGE_STATUS = 1;
azaddevarm 29:bb0d64656ba1 128
azaddevarm 29:bb0d64656ba1 129 EPS_INIT_STATUS = 0 ; //clear EPS_INIT_STATUS flag
sakthipriya 0:7b4c00e3912f 130
sakthipriya 0:7b4c00e3912f 131 }
sakthipriya 0:7b4c00e3912f 132
azaddevarm 28:5f0f2a3f3e8d 133 void FCTN_EPS_HANDLE_CDMS_FAULT()
azaddevarm 28:5f0f2a3f3e8d 134 { //Variable names from MMS structure, if not, marked as //Temp name
azaddevarm 28:5f0f2a3f3e8d 135 if(CDMS_SW_STATUS == 0b11) //powered on and oc fault
azaddevarm 28:5f0f2a3f3e8d 136 if(!CDMS_OC_FAULT)
azaddevarm 28:5f0f2a3f3e8d 137 CDMS_SW_STATUS = 0b01; //powered on and working
azaddevarm 28:5f0f2a3f3e8d 138 else
azaddevarm 28:5f0f2a3f3e8d 139 {
azaddevarm 28:5f0f2a3f3e8d 140 if(CDMS_SW_STATUS == 0b10) //powered off and oc fault
azaddevarm 28:5f0f2a3f3e8d 141 CDMS_SW_ENABLE = 1; //Temp name
azaddevarm 28:5f0f2a3f3e8d 142 if(CDMS_OC_FAULT == 0)
azaddevarm 28:5f0f2a3f3e8d 143 {
azaddevarm 28:5f0f2a3f3e8d 144 CDMS_FAULT_COUNTER = 0; //Temp name
azaddevarm 28:5f0f2a3f3e8d 145 CDMS_SW_STATUS = 0b01; //powered on and working
azaddevarm 28:5f0f2a3f3e8d 146 }
azaddevarm 28:5f0f2a3f3e8d 147 else
azaddevarm 28:5f0f2a3f3e8d 148 {
azaddevarm 28:5f0f2a3f3e8d 149 CDMS_FAULT_COUNTER++;
azaddevarm 28:5f0f2a3f3e8d 150 if(CDMS_FAULT_COUNTER == 3)
azaddevarm 28:5f0f2a3f3e8d 151 CDMS_SW_STATUS = 0b11; //powered on and oc fault
azaddevarm 28:5f0f2a3f3e8d 152 else
azaddevarm 28:5f0f2a3f3e8d 153 {
azaddevarm 28:5f0f2a3f3e8d 154 CDMS_SW_ENABLE = 0; //power OFF switch
azaddevarm 28:5f0f2a3f3e8d 155 CDMS_SW_STATUS = 0b10; //powered off and oc fault
azaddevarm 28:5f0f2a3f3e8d 156 }
azaddevarm 28:5f0f2a3f3e8d 157 }
azaddevarm 28:5f0f2a3f3e8d 158 }
azaddevarm 28:5f0f2a3f3e8d 159 }
azaddevarm 28:5f0f2a3f3e8d 160
azaddevarm 28:5f0f2a3f3e8d 161 void FCTN_EPS_HANDLE_HW_FAULTS()
azaddevarm 28:5f0f2a3f3e8d 162 { //Variable names from MMS structure, if not, marked as //Temp name
azaddevarm 28:5f0f2a3f3e8d 163
azaddevarm 28:5f0f2a3f3e8d 164 //--------ACS_TR_Z--------//
azaddevarm 28:5f0f2a3f3e8d 165 if(ACS_TR_Z_SW_STATUS != 0b11) //!disabled
azaddevarm 28:5f0f2a3f3e8d 166 {
azaddevarm 28:5f0f2a3f3e8d 167 if(ACS_TR_Z_SW_STATUS == 0b10) //oc fault and powered off
azaddevarm 28:5f0f2a3f3e8d 168 ACS_TR_Z_ENABLE = 1;
azaddevarm 28:5f0f2a3f3e8d 169 if(ACS_TR_Z_OC_FAULT || ACS_TR_Z_FAULT)
azaddevarm 28:5f0f2a3f3e8d 170 {
azaddevarm 28:5f0f2a3f3e8d 171 ACS_TR_Z_ENABLE = 0;
azaddevarm 28:5f0f2a3f3e8d 172 ACS_TR_Z_FAULT_COUNTER++; //Temp name
azaddevarm 28:5f0f2a3f3e8d 173 if(ACS_TR_Z_FAULT_COUNTER == 3)
azaddevarm 28:5f0f2a3f3e8d 174 ACS_TR_Z_SW_STATUS = 0b11; //disabled
azaddevarm 28:5f0f2a3f3e8d 175 //update in flash as default state at bootup
azaddevarm 28:5f0f2a3f3e8d 176 else ACS_TR_Z_SW_STATUS = 0b10; //oc fault and powered off
azaddevarm 28:5f0f2a3f3e8d 177 }
azaddevarm 28:5f0f2a3f3e8d 178 else
azaddevarm 28:5f0f2a3f3e8d 179 {
azaddevarm 28:5f0f2a3f3e8d 180 ACS_TR_Z_SW_STATUS = 0b01; //powered on and working;
azaddevarm 28:5f0f2a3f3e8d 181 //update in flash also
azaddevarm 28:5f0f2a3f3e8d 182 ACS_TR_Z_FAULT_COUNTER = 0;
azaddevarm 28:5f0f2a3f3e8d 183 }
azaddevarm 28:5f0f2a3f3e8d 184 }
azaddevarm 28:5f0f2a3f3e8d 185
azaddevarm 28:5f0f2a3f3e8d 186 //--------ACS_TR_XY--------//
azaddevarm 28:5f0f2a3f3e8d 187 //Same as ACS_TR_Z, just replace Z with XY
azaddevarm 28:5f0f2a3f3e8d 188
azaddevarm 28:5f0f2a3f3e8d 189 //--------ACS_ATS1--------//
azaddevarm 28:5f0f2a3f3e8d 190 //Same as ACS_ATS2
azaddevarm 28:5f0f2a3f3e8d 191
azaddevarm 28:5f0f2a3f3e8d 192 //--------ACS_ATS2--------//
azaddevarm 28:5f0f2a3f3e8d 193 if(ACS_ATS2_SW_STATUS & 0b1100 != 0b1100) //!disabled
azaddevarm 28:5f0f2a3f3e8d 194 {
azaddevarm 28:5f0f2a3f3e8d 195 if(ACS_ATS2_SW_STATUS & 0b1100 == 0b1000) //oc fault and powered off
azaddevarm 28:5f0f2a3f3e8d 196 ACS_ATS2_ENABLE = 1; //Temp name
azaddevarm 28:5f0f2a3f3e8d 197 if(ACS_ATS2_OC_FAULT)
azaddevarm 28:5f0f2a3f3e8d 198 {
azaddevarm 28:5f0f2a3f3e8d 199 ACS_ATS2_ENABLE = 0;
azaddevarm 28:5f0f2a3f3e8d 200 ACS_ATS2_FAULT_COUNTER++; //Temp name
azaddevarm 28:5f0f2a3f3e8d 201 if(ACS_ATS2_FAULT_COUNTER == 3)
azaddevarm 28:5f0f2a3f3e8d 202 ACS_ATS2_SW_STATUS = ACS_ATS2_SW_STATUS | 0b1100; //disabled
azaddevarm 28:5f0f2a3f3e8d 203 //update in flash as default state at bootup
azaddevarm 28:5f0f2a3f3e8d 204 else
azaddevarm 28:5f0f2a3f3e8d 205 {
azaddevarm 28:5f0f2a3f3e8d 206 ACS_ATS2_SW_STATUS = ACS_ATS2_SW_STATUS | 0b1000; //setting to 10xx
azaddevarm 28:5f0f2a3f3e8d 207 ACS_ATS2_SW_STATUS = ACS_ATS2_SW_STATUS & 0b1011; //oc fault and powered off
azaddevarm 28:5f0f2a3f3e8d 208 }
azaddevarm 28:5f0f2a3f3e8d 209 }
azaddevarm 28:5f0f2a3f3e8d 210 else
azaddevarm 28:5f0f2a3f3e8d 211 {
azaddevarm 28:5f0f2a3f3e8d 212 if(ACS_ATS2_SW_STATUS & 0b1100 == 0b1000) //Device oc fault?
azaddevarm 28:5f0f2a3f3e8d 213 ACS_ATS2_ENABLE = 0;
azaddevarm 28:5f0f2a3f3e8d 214 ACS_ATS2_SW_STATUS = ACS_ATS2_SW_STATUS & 0b0011; //working but powered off
azaddevarm 28:5f0f2a3f3e8d 215 //Update in flash also
azaddevarm 28:5f0f2a3f3e8d 216 ACS_ATS2_FAULT_COUNTER = 0;
azaddevarm 28:5f0f2a3f3e8d 217 }
azaddevarm 28:5f0f2a3f3e8d 218 }
azaddevarm 28:5f0f2a3f3e8d 219
azaddevarm 28:5f0f2a3f3e8d 220 //--------BCN_TX----------//
azaddevarm 28:5f0f2a3f3e8d 221 if(BCN_TX_SW_STATUS != 0b11) //!disabled
azaddevarm 28:5f0f2a3f3e8d 222 {
azaddevarm 28:5f0f2a3f3e8d 223 if(BCN_TX_SW_STATUS == 0b10) //oc fault and powered off
azaddevarm 28:5f0f2a3f3e8d 224 BCN_TX_ENABLE = 1; //Temp name
azaddevarm 28:5f0f2a3f3e8d 225 if(BCN_TX_OC_FAULT)
azaddevarm 28:5f0f2a3f3e8d 226 {
azaddevarm 28:5f0f2a3f3e8d 227 BCN_TX_ENABLE = 0;
azaddevarm 28:5f0f2a3f3e8d 228 BCN_TX_FAULT_COUNTER++; //Temp name
azaddevarm 28:5f0f2a3f3e8d 229 if(BCN_TX_FAULT_COUNTER == 3)
azaddevarm 28:5f0f2a3f3e8d 230 BCN_TX_SW_STATUS = 0b11; //disabled
azaddevarm 28:5f0f2a3f3e8d 231 //update in flash as default state at bootup
azaddevarm 28:5f0f2a3f3e8d 232 else BCN_TX_SW_STATUS = 0b10; //oc fault and powered off
azaddevarm 28:5f0f2a3f3e8d 233 }
azaddevarm 28:5f0f2a3f3e8d 234 else
azaddevarm 28:5f0f2a3f3e8d 235 {
azaddevarm 28:5f0f2a3f3e8d 236 BCN_TX_SW_STATUS = 0b01; //powered on and working;
azaddevarm 28:5f0f2a3f3e8d 237 //update in flash also
azaddevarm 28:5f0f2a3f3e8d 238 BCN_TX_FAULT_COUNTER = 0;
azaddevarm 28:5f0f2a3f3e8d 239 }
azaddevarm 28:5f0f2a3f3e8d 240 }
azaddevarm 28:5f0f2a3f3e8d 241
azaddevarm 28:5f0f2a3f3e8d 242 }
azaddevarm 28:5f0f2a3f3e8d 243
sakthipriya 0:7b4c00e3912f 244 //----------------------------------------------------Power algo code--------------------------------------------------------------------//
lakshya 15:e09aaaccf134 245 /*update the power modes*/
lakshya 15:e09aaaccf134 246
sakthipriya 0:7b4c00e3912f 247 void FCTN_EPS_POWERMODE(float soc) //dummy algo
sakthipriya 0:7b4c00e3912f 248 {
sakthipriya 0:7b4c00e3912f 249 if(soc >= 80)
sakthipriya 0:7b4c00e3912f 250 actual_data.power_mode = 4;
sakthipriya 0:7b4c00e3912f 251 else if(soc >= 70 & soc < 80)
sakthipriya 0:7b4c00e3912f 252 actual_data.power_mode = 3;
sakthipriya 0:7b4c00e3912f 253 else if(soc >= 60 & soc < 70)
sakthipriya 0:7b4c00e3912f 254 actual_data.power_mode = 2;
sakthipriya 0:7b4c00e3912f 255 else if(soc < 60)
sakthipriya 0:7b4c00e3912f 256 actual_data.power_mode = 1;
sakthipriya 0:7b4c00e3912f 257 }
sakthipriya 0:7b4c00e3912f 258
sakthipriya 0:7b4c00e3912f 259 //...................................................HK...........................................//
lakshya 15:e09aaaccf134 260 /*reading values*/
sakthipriya 3:07e15677a75c 261
sakthipriya 3:07e15677a75c 262 void FCTN_HK_MAIN()
sakthipriya 3:07e15677a75c 263 {
sakthipriya 3:07e15677a75c 264 int Iteration=0;
sakthipriya 3:07e15677a75c 265
sakthipriya 3:07e15677a75c 266 SelectLinea0=0;
sakthipriya 3:07e15677a75c 267 SelectLinea1=0;
sakthipriya 3:07e15677a75c 268 SelectLinea2=0;
sakthipriya 3:07e15677a75c 269 SelectLinea3=0;
sakthipriya 3:07e15677a75c 270
sakthipriya 3:07e15677a75c 271 SelectLineb0=0;
sakthipriya 3:07e15677a75c 272 SelectLineb1=0;
sakthipriya 3:07e15677a75c 273 SelectLineb2=0;
sakthipriya 3:07e15677a75c 274 SelectLineb3=0;
sakthipriya 3:07e15677a75c 275
sakthipriya 3:07e15677a75c 276 //collecting data
azaddevarm 29:bb0d64656ba1 277 for(Iteration=0; Iteration<16; Iteration++)
azaddevarm 29:bb0d64656ba1 278 {
sakthipriya 3:07e15677a75c 279 actual_data.voltage_actual[Iteration]=VoltageInput.read();
sakthipriya 3:07e15677a75c 280 actual_data.current_actual[Iteration]=CurrentInput.read();
sakthipriya 3:07e15677a75c 281
sakthipriya 3:07e15677a75c 282 SelectLinea0=!(SelectLinea0);
sakthipriya 3:07e15677a75c 283 if(Iteration%2==1)
sakthipriya 3:07e15677a75c 284 SelectLinea1=!(SelectLinea1);
sakthipriya 3:07e15677a75c 285 if(Iteration%4==3)
sakthipriya 3:07e15677a75c 286 SelectLinea2=!(SelectLinea2);
sakthipriya 3:07e15677a75c 287 if(Iteration%8==7)
sakthipriya 3:07e15677a75c 288 SelectLinea3=!(SelectLinea3);
sakthipriya 3:07e15677a75c 289 int s0,s1,s2,s3;
sakthipriya 3:07e15677a75c 290 s0=SelectLineb0=SelectLinea0;
sakthipriya 3:07e15677a75c 291 s1=SelectLineb1=SelectLinea2;
sakthipriya 3:07e15677a75c 292 s2=SelectLineb2=SelectLinea2;
sakthipriya 3:07e15677a75c 293 s3=SelectLineb3=SelectLinea3;
azaddevarm 32:623747b1cecb 294 // printf("\n\r %d %d %d %d", s0,s1,s2,s3);
sakthipriya 3:07e15677a75c 295
sakthipriya 3:07e15677a75c 296 }
azaddevarm 29:bb0d64656ba1 297 for(Iteration=0; Iteration<16; Iteration++)
azaddevarm 29:bb0d64656ba1 298 {
sakthipriya 3:07e15677a75c 299 if(Iteration==14)
sakthipriya 3:07e15677a75c 300 actual_data.voltage_actual[Iteration]= (-90.7*3.3*actual_data.voltage_actual[Iteration])+190.1543;
sakthipriya 3:07e15677a75c 301 else
sakthipriya 3:07e15677a75c 302 actual_data.voltage_actual[Iteration]= actual_data.voltage_actual[Iteration]*3.3*5.63;
sakthipriya 3:07e15677a75c 303 }
sakthipriya 3:07e15677a75c 304
sakthipriya 3:07e15677a75c 305 for(Iteration=0;Iteration<12;Iteration++){
sakthipriya 3:07e15677a75c 306 if(Iteration<8)
sakthipriya 3:07e15677a75c 307 actual_data.current_actual[Iteration]= actual_data.current_actual[Iteration]*3.3/(50*rsens);
sakthipriya 3:07e15677a75c 308 else
sakthipriya 3:07e15677a75c 309 actual_data.current_actual[Iteration]=actual_data.current_actual[Iteration]*3.3;
sakthipriya 3:07e15677a75c 310 int resistance;
sakthipriya 3:07e15677a75c 311
sakthipriya 3:07e15677a75c 312 resistance=24000*actual_data.current_actual[Iteration]/(3.3-actual_data.current_actual[Iteration]);
sakthipriya 3:07e15677a75c 313 if(actual_data.current_actual[Iteration]>1.47)
sakthipriya 3:07e15677a75c 314 {
sakthipriya 3:07e15677a75c 315 actual_data.current_actual[Iteration]=3694/log(24.032242*resistance);
sakthipriya 3:07e15677a75c 316 }
sakthipriya 3:07e15677a75c 317 else{
sakthipriya 3:07e15677a75c 318
sakthipriya 3:07e15677a75c 319 actual_data.current_actual[Iteration]=3365.4/log(7.60573*resistance);
sakthipriya 3:07e15677a75c 320 }
sakthipriya 3:07e15677a75c 321 }
sakthipriya 3:07e15677a75c 322 actual_data.BAE_temp_actual=(-90.7*3.3*actual_data.BAE_temp_actual)+190.1543;
sakthipriya 3:07e15677a75c 323
sakthipriya 3:07e15677a75c 324 actual_data.Batt_voltage_actual=Batt_voltage.read()*3.3*5.63;
sakthipriya 3:07e15677a75c 325
sakthipriya 3:07e15677a75c 326 //quantizing data
sakthipriya 3:07e15677a75c 327 for(Iteration=0; Iteration<16; Iteration++){
sakthipriya 3:07e15677a75c 328
sakthipriya 3:07e15677a75c 329 if(Iteration==14)
sakthipriya 3:07e15677a75c 330 quant_data.voltage_quant[Iteration]=quantiz(tstart,tstep,actual_data.voltage_actual[Iteration]);
sakthipriya 3:07e15677a75c 331 else
sakthipriya 3:07e15677a75c 332 quant_data.voltage_quant[Iteration]=quantiz(vstart,vstep,actual_data.voltage_actual[Iteration]);
sakthipriya 3:07e15677a75c 333
sakthipriya 3:07e15677a75c 334 }
sakthipriya 3:07e15677a75c 335 for(Iteration=0;Iteration<12;Iteration++){
sakthipriya 3:07e15677a75c 336 if(Iteration<8)
sakthipriya 3:07e15677a75c 337 quant_data.current_quant[Iteration]=quantiz(cstart,cstep,actual_data.current_actual[Iteration]);
sakthipriya 3:07e15677a75c 338 else
sakthipriya 3:07e15677a75c 339 quant_data.current_quant[Iteration]=quantiz(tstart_thermistor,tstep_thermistor,actual_data.current_actual[Iteration]);
sakthipriya 3:07e15677a75c 340 }
sakthipriya 3:07e15677a75c 341 for(Iteration=0;Iteration<2;Iteration++){
sakthipriya 3:07e15677a75c 342
sakthipriya 3:07e15677a75c 343 quant_data.Batt_temp_quant[Iteration]=quantiz(tstart,tstep,actual_data.Batt_temp_actual[Iteration]);
sakthipriya 3:07e15677a75c 344 }
sakthipriya 3:07e15677a75c 345
sakthipriya 3:07e15677a75c 346 quant_data.Batt_gauge_quant[0]=quantiz(vcell_start,vcell_step,actual_data.Batt_gauge_actual[0]);
sakthipriya 3:07e15677a75c 347 quant_data.Batt_gauge_quant[1]=quantiz(soc_start,soc_step,actual_data.Batt_gauge_actual[1]);
sakthipriya 3:07e15677a75c 348 quant_data.Batt_gauge_quant[2]=quantiz(crate_start,crate_step,actual_data.Batt_gauge_actual[2]);
sakthipriya 3:07e15677a75c 349 quant_data.Batt_gauge_alerts=actual_data.Batt_gauge_actual[3];
sakthipriya 3:07e15677a75c 350
sakthipriya 3:07e15677a75c 351 quant_data.BAE_temp_quant=quantiz(tstart,tstep,actual_data.BAE_temp_actual);
sakthipriya 3:07e15677a75c 352
sakthipriya 3:07e15677a75c 353 for(Iteration=0;Iteration<3;Iteration++){
sakthipriya 5:bb592f3185cc 354 quant_data.AngularSpeed_quant[Iteration]=actual_data.AngularSpeed_actual[Iteration];
azaddevarm 30:22b338b027de 355 //printf("\n\r w value %f",quant_data.AngularSpeed_quant[Iteration]);
sakthipriya 3:07e15677a75c 356 }
sakthipriya 3:07e15677a75c 357
sakthipriya 3:07e15677a75c 358 for(Iteration=0;Iteration<3;Iteration++){
sakthipriya 3:07e15677a75c 359 quant_data.Bvalue_quant[Iteration]=actual_data.Bvalue_actual[Iteration];
azaddevarm 30:22b338b027de 360 //printf("\n\r b value %f",quant_data.Bvalue_quant[Iteration]);
sakthipriya 3:07e15677a75c 361 }
sakthipriya 3:07e15677a75c 362
sakthipriya 3:07e15677a75c 363 quant_data.Batt_voltage_quant=quantiz(vstart,vstep,actual_data.Batt_voltage_actual);
sakthipriya 3:07e15677a75c 364
sakthipriya 3:07e15677a75c 365
sakthipriya 3:07e15677a75c 366 arch_data.Batt_1_temp=quant_data.Batt_temp_quant[0];
sakthipriya 3:07e15677a75c 367 arch_data.Batt_2_temp=quant_data.Batt_temp_quant[1];
sakthipriya 3:07e15677a75c 368 arch_data.EPS_PCB_temp=quant_data.voltage_quant[14];
sakthipriya 3:07e15677a75c 369 arch_data.Batt_SOC=quant_data.Batt_gauge_quant[1];
sakthipriya 3:07e15677a75c 370 arch_data.power_mode=actual_data.power_mode;
sakthipriya 5:bb592f3185cc 371 arch_data.faultPoll_status=actual_data.faultPoll_status;
sakthipriya 5:bb592f3185cc 372 arch_data.faultIr_status=actual_data.faultIr_status;
sakthipriya 3:07e15677a75c 373 arch_data.Batt_voltage=quant_data.Batt_voltage_quant;
sakthipriya 6:036d08b62785 374 printf("\n\r in hk");
sakthipriya 3:07e15677a75c 375
sakthipriya 3:07e15677a75c 376 }
sakthipriya 3:07e15677a75c 377
sakthipriya 5:bb592f3185cc 378 void FCTN_APPEND_HKDATA()
sakthipriya 5:bb592f3185cc 379 {
sakthipriya 5:bb592f3185cc 380 // quantized data
sakthipriya 5:bb592f3185cc 381 for (int i=0;i<16;i++)
sakthipriya 5:bb592f3185cc 382 BAE_data[i] = quant_data.voltage_quant[i];
sakthipriya 5:bb592f3185cc 383 for (int i=16;i<28;i++)
sakthipriya 5:bb592f3185cc 384 BAE_data[i] = quant_data.current_quant[i-16];
sakthipriya 5:bb592f3185cc 385 BAE_data[28] = quant_data.Batt_temp_quant[0];
sakthipriya 5:bb592f3185cc 386 BAE_data[29] = quant_data.Batt_temp_quant[1];
sakthipriya 5:bb592f3185cc 387 BAE_data[30] = quant_data.Batt_gauge_quant[1];
sakthipriya 5:bb592f3185cc 388 BAE_data[31] = quant_data.Batt_gauge_quant[1];
sakthipriya 5:bb592f3185cc 389 BAE_data[32] = quant_data.Batt_gauge_quant[1];
sakthipriya 5:bb592f3185cc 390 FCTN_CONVERT_FLOAT(quant_data.Batt_gauge_alerts,&BAE_data[33]);
sakthipriya 5:bb592f3185cc 391 BAE_data[37] = quant_data.BAE_temp_quant;
sakthipriya 5:bb592f3185cc 392 FCTN_CONVERT_FLOAT(quant_data.AngularSpeed_quant[0],&BAE_data[38]);
sakthipriya 6:036d08b62785 393 //printf("\n\r outside %d %d %d %d", BAE_data[38],BAE_data[39],BAE_data[40],BAE_data[41]);
sakthipriya 6:036d08b62785 394 //std:: cout << "\n\r uint8 outside " << BAE_data[38] << '\t' << BAE_data[39] << '\t' << BAE_data[40] << '\t' << BAE_data[41] <<std::endl;
sakthipriya 5:bb592f3185cc 395 FCTN_CONVERT_FLOAT(quant_data.AngularSpeed_quant[1],&BAE_data[42]);
sakthipriya 6:036d08b62785 396 //std:: cout << "\n\r uint8 outside " << BAE_data[42] << '\t' << BAE_data[43] << '\t' << BAE_data[44] << '\t' << BAE_data[45] <<std::endl;
sakthipriya 6:036d08b62785 397 // printf("\n\r outside %d %d %d %d", BAE_data[42],BAE_data[43],BAE_data[44],BAE_data[45]);
sakthipriya 5:bb592f3185cc 398 FCTN_CONVERT_FLOAT(quant_data.AngularSpeed_quant[2],&BAE_data[46]);
sakthipriya 6:036d08b62785 399 //printf("\n\r outside %d %d %d %d", BAE_data[46],BAE_data[47],BAE_data[48],BAE_data[49]);
sakthipriya 6:036d08b62785 400 //std:: cout << "\n\r uint8 outside " << BAE_data[46] << '\t' << BAE_data[47] << '\t' << BAE_data[48] << '\t' << BAE_data[49] <<std::endl;
sakthipriya 5:bb592f3185cc 401 FCTN_CONVERT_FLOAT(quant_data.Bvalue_quant[0],&BAE_data[50]);
sakthipriya 5:bb592f3185cc 402 FCTN_CONVERT_FLOAT(quant_data.Bvalue_quant[1],&BAE_data[54]);
sakthipriya 5:bb592f3185cc 403 FCTN_CONVERT_FLOAT(quant_data.Bvalue_quant[2],&BAE_data[58]);
sakthipriya 5:bb592f3185cc 404 BAE_data[62] = quant_data.Batt_voltage_quant;
sakthipriya 5:bb592f3185cc 405 BAE_data[63] = (uint8_t)actual_data.power_mode;
sakthipriya 5:bb592f3185cc 406 BAE_data[64] = actual_data.faultPoll_status;
sakthipriya 5:bb592f3185cc 407 BAE_data[65] = actual_data.faultIr_status;
sakthipriya 5:bb592f3185cc 408 // archived data
sakthipriya 5:bb592f3185cc 409 BAE_data[66] = arch_data.Batt_1_temp; //verify if uint8_t is right
sakthipriya 5:bb592f3185cc 410 BAE_data[67] = arch_data.Batt_2_temp;
sakthipriya 5:bb592f3185cc 411 BAE_data[68] = arch_data.EPS_PCB_temp;
sakthipriya 5:bb592f3185cc 412 BAE_data[69] = arch_data.Batt_SOC;
sakthipriya 5:bb592f3185cc 413 BAE_data[70] = (uint8_t)arch_data.power_mode;
sakthipriya 5:bb592f3185cc 414 BAE_data[71] = arch_data.faultPoll_status;
sakthipriya 5:bb592f3185cc 415 BAE_data[72] = arch_data.faultIr_status;
sakthipriya 5:bb592f3185cc 416 BAE_data[73] = arch_data.Batt_voltage;
sakthipriya 6:036d08b62785 417 for(int i=0; i<73;i++)
sakthipriya 6:036d08b62785 418 BAE_chardata[i] = (char)BAE_data[i];
sakthipriya 6:036d08b62785 419 BAE_chardata[73] = '\0';
sakthipriya 7:a46a1dee4497 420 printf("\n\r bae ats data %c %c %c", BAE_chardata[38],BAE_chardata[39],BAE_chardata[40]);
sakthipriya 6:036d08b62785 421 printf("\n\r BAE data is %s", BAE_chardata);
sakthipriya 5:bb592f3185cc 422
sakthipriya 5:bb592f3185cc 423 }
sakthipriya 5:bb592f3185cc 424
sakthipriya 5:bb592f3185cc 425 uint8_t quantiz(float start,float step,float x)
sakthipriya 0:7b4c00e3912f 426 {
sakthipriya 0:7b4c00e3912f 427 int y=(x-start)/step;
sakthipriya 0:7b4c00e3912f 428 if(y<=0)y=0;
sakthipriya 0:7b4c00e3912f 429 if(y>=255)y=255;
sakthipriya 0:7b4c00e3912f 430 return y;
sakthipriya 0:7b4c00e3912f 431 }
sakthipriya 0:7b4c00e3912f 432
sakthipriya 3:07e15677a75c 433 bool firstCount=true; // goes to EPS init
sakthipriya 3:07e15677a75c 434
sakthipriya 3:07e15677a75c 435
sakthipriya 3:07e15677a75c 436 void saveMin(char x,char y){
sakthipriya 3:07e15677a75c 437 if(y<x){
sakthipriya 3:07e15677a75c 438 x=y;
sakthipriya 3:07e15677a75c 439 }
sakthipriya 3:07e15677a75c 440
sakthipriya 3:07e15677a75c 441 }
sakthipriya 3:07e15677a75c 442 void saveMax(char x,char y){
sakthipriya 3:07e15677a75c 443 if (y>x)
sakthipriya 3:07e15677a75c 444 {
sakthipriya 3:07e15677a75c 445 x=y;
sakthipriya 3:07e15677a75c 446 }
sakthipriya 0:7b4c00e3912f 447 }
sakthipriya 0:7b4c00e3912f 448
sakthipriya 3:07e15677a75c 449
sakthipriya 3:07e15677a75c 450 void minMaxHkData(){
sakthipriya 3:07e15677a75c 451 if(firstCount==true){
sakthipriya 3:07e15677a75c 452 for (int i = 0; i < 16; ++i){
sakthipriya 3:07e15677a75c 453 bae_HK_minmax.voltage_min[i] = quant_data.voltage_quant[i];
sakthipriya 3:07e15677a75c 454 bae_HK_minmax.voltage_max[i] = quant_data.voltage_quant[i];
sakthipriya 3:07e15677a75c 455 }
sakthipriya 3:07e15677a75c 456 for (int i = 0; i < 12; ++i){
sakthipriya 3:07e15677a75c 457 bae_HK_minmax.current_min[i] = quant_data.current_quant[i];
sakthipriya 3:07e15677a75c 458 bae_HK_minmax.current_max[i] = quant_data.current_quant[i];
sakthipriya 3:07e15677a75c 459 }
sakthipriya 3:07e15677a75c 460
sakthipriya 3:07e15677a75c 461 for (int i = 0; i < 2; ++i){
sakthipriya 3:07e15677a75c 462 bae_HK_minmax.Batt_temp_min[i] = quant_data.Batt_temp_quant[i];
sakthipriya 3:07e15677a75c 463 bae_HK_minmax.Batt_temp_max[i] = quant_data.Batt_temp_quant[i];
sakthipriya 3:07e15677a75c 464 }
sakthipriya 3:07e15677a75c 465 for (int i = 0; i < 3; ++i){
sakthipriya 3:07e15677a75c 466 bae_HK_minmax.Batt_gauge_min[i] = quant_data.Batt_gauge_quant[i];
sakthipriya 3:07e15677a75c 467 bae_HK_minmax.Batt_gauge_max[i] = quant_data.Batt_gauge_quant[i];
sakthipriya 3:07e15677a75c 468 }
sakthipriya 3:07e15677a75c 469 for (int i = 0; i < 3; ++i){
sakthipriya 3:07e15677a75c 470 bae_HK_minmax.AngularSpeed_min[i] = quant_data.AngularSpeed_quant[i];
sakthipriya 3:07e15677a75c 471 bae_HK_minmax.AngularSpeed_max[i] = quant_data.AngularSpeed_quant[i];
sakthipriya 3:07e15677a75c 472 }
sakthipriya 3:07e15677a75c 473 for (int i = 0; i < 3; ++i){
sakthipriya 3:07e15677a75c 474 bae_HK_minmax.Bvalue_min[i] = quant_data.Bvalue_quant[i];
sakthipriya 3:07e15677a75c 475 bae_HK_minmax.Bvalue_max[i] = quant_data.Bvalue_quant[i];
sakthipriya 3:07e15677a75c 476 }
sakthipriya 3:07e15677a75c 477 bae_HK_minmax.BAE_temp_min=quant_data.BAE_temp_quant;
sakthipriya 3:07e15677a75c 478 bae_HK_minmax.BAE_temp_max=quant_data.BAE_temp_quant;
sakthipriya 3:07e15677a75c 479 bae_HK_minmax.Batt_voltage_min=quant_data.Batt_voltage_quant;
sakthipriya 3:07e15677a75c 480 bae_HK_minmax.Batt_voltage_max=quant_data.Batt_voltage_quant;
sakthipriya 3:07e15677a75c 481
sakthipriya 3:07e15677a75c 482 }
sakthipriya 3:07e15677a75c 483 else {
sakthipriya 3:07e15677a75c 484 for (int i = 0; i < 16; ++i)
sakthipriya 3:07e15677a75c 485 {
sakthipriya 3:07e15677a75c 486 saveMin(bae_HK_minmax.voltage_min[i],quant_data.voltage_quant[i]);
sakthipriya 3:07e15677a75c 487 saveMax(bae_HK_minmax.voltage_max[i],quant_data.voltage_quant[i]);
sakthipriya 3:07e15677a75c 488 }
sakthipriya 3:07e15677a75c 489 for (int i = 0; i < 12; ++i)
sakthipriya 3:07e15677a75c 490 {
sakthipriya 3:07e15677a75c 491 saveMin(bae_HK_minmax.current_min[i],quant_data.current_quant[i]);
sakthipriya 3:07e15677a75c 492 saveMax(bae_HK_minmax.current_max[i],quant_data.current_quant[i]);
sakthipriya 3:07e15677a75c 493 }
sakthipriya 3:07e15677a75c 494
sakthipriya 3:07e15677a75c 495 for (int i = 0; i < 2; ++i)
sakthipriya 3:07e15677a75c 496 {
sakthipriya 3:07e15677a75c 497 saveMin(bae_HK_minmax.Batt_temp_min[i],quant_data.Batt_temp_quant[i]);
sakthipriya 3:07e15677a75c 498 saveMax(bae_HK_minmax.Batt_temp_max[i],quant_data.Batt_temp_quant[i]);
sakthipriya 3:07e15677a75c 499 }
sakthipriya 3:07e15677a75c 500 for (int i = 0; i < 3; ++i)
sakthipriya 3:07e15677a75c 501 {
sakthipriya 3:07e15677a75c 502 saveMin(bae_HK_minmax.Batt_gauge_min[i], quant_data.Batt_gauge_quant[i]);
sakthipriya 3:07e15677a75c 503 saveMax(bae_HK_minmax.Batt_gauge_max[i], quant_data.Batt_gauge_quant[i]);
sakthipriya 3:07e15677a75c 504 }
sakthipriya 3:07e15677a75c 505 for (int i = 0; i < 3; ++i)
sakthipriya 3:07e15677a75c 506 {
sakthipriya 3:07e15677a75c 507 saveMin(bae_HK_minmax.AngularSpeed_min[i], quant_data.AngularSpeed_quant[i]);
sakthipriya 3:07e15677a75c 508 saveMax(bae_HK_minmax.AngularSpeed_max[i], quant_data.AngularSpeed_quant[i]);
sakthipriya 3:07e15677a75c 509 }
sakthipriya 3:07e15677a75c 510 for (int i = 0; i < 3; ++i)
sakthipriya 3:07e15677a75c 511 {
sakthipriya 3:07e15677a75c 512 saveMin(bae_HK_minmax.Bvalue_min[i], quant_data.Bvalue_quant[i]);
sakthipriya 3:07e15677a75c 513 saveMax(bae_HK_minmax.Bvalue_max[i], quant_data.Bvalue_quant[i]);
sakthipriya 3:07e15677a75c 514 }
sakthipriya 3:07e15677a75c 515 saveMin(bae_HK_minmax.BAE_temp_min,quant_data.BAE_temp_quant);
sakthipriya 3:07e15677a75c 516 saveMax(bae_HK_minmax.BAE_temp_max,quant_data.BAE_temp_quant);
sakthipriya 3:07e15677a75c 517 saveMin(bae_HK_minmax.Batt_voltage_min,quant_data.Batt_voltage_quant);
sakthipriya 3:07e15677a75c 518 saveMin(bae_HK_minmax.Batt_voltage_max,quant_data.Batt_voltage_quant);
sakthipriya 3:07e15677a75c 519
sakthipriya 3:07e15677a75c 520
sakthipriya 3:07e15677a75c 521 }
sakthipriya 3:07e15677a75c 522 firstCount=false;
sakthipriya 3:07e15677a75c 523 }
sakthipriya 3:07e15677a75c 524
sakthipriya 3:07e15677a75c 525
sakthipriya 0:7b4c00e3912f 526 //............................................BATTERY GAUGE......................................//
sakthipriya 0:7b4c00e3912f 527 void FCTN_BATTERYGAUGE_INIT()
sakthipriya 0:7b4c00e3912f 528 {
sakthipriya 0:7b4c00e3912f 529 disable_sleep();
sakthipriya 0:7b4c00e3912f 530 disable_hibernate();
sakthipriya 0:7b4c00e3912f 531 socChangeAlertEnabled(true); //enabling alert on soc changing by 1%
sakthipriya 0:7b4c00e3912f 532 emptyAlertThreshold(32);//setting empty alert threshold to 32% soc
sakthipriya 0:7b4c00e3912f 533 vAlertMinMaxThreshold();//set min, max value of Valrt register
sakthipriya 0:7b4c00e3912f 534 vResetThresholdSet();//set threshold voltage for reset
sakthipriya 0:7b4c00e3912f 535 vResetAlertEnabled(true);//enable alert on reset for V < Vreset
azaddevarm 32:623747b1cecb 536 int ack = write(REG_STATUS, read(REG_STATUS) & 0xFEFF); //Clearing Reset Indicator bit
azaddevarm 32:623747b1cecb 537 if( ack == 0 ) printf("BTG init success\n\r");
azaddevarm 32:623747b1cecb 538 else printf("BTG init fail ack = %d\n\r", ack);
sakthipriya 0:7b4c00e3912f 539 }
sakthipriya 0:7b4c00e3912f 540
azaddevarm 30:22b338b027de 541 int FCTN_BATTERYGAUGE_MAIN(float Battery_parameters[4], float temp)
sakthipriya 0:7b4c00e3912f 542 {
sakthipriya 1:446a959e36ce 543 printf("\n\r battery gauge \n");
sakthipriya 0:7b4c00e3912f 544
sakthipriya 0:7b4c00e3912f 545 tempCompensation(temp);
sakthipriya 0:7b4c00e3912f 546
sakthipriya 0:7b4c00e3912f 547
sakthipriya 0:7b4c00e3912f 548 Battery_parameters[0]=vcell();
sakthipriya 0:7b4c00e3912f 549 Battery_parameters[1]=soc();
sakthipriya 0:7b4c00e3912f 550 Battery_parameters[2]=crate();
azaddevarm 30:22b338b027de 551
sakthipriya 0:7b4c00e3912f 552 printf("\nVcell=%f",vcell()); //remove this for final code
azaddevarm 32:623747b1cecb 553 printf("\nSOC=%f",Battery_parameters[1]); //remove this for final code
sakthipriya 0:7b4c00e3912f 554 printf("\nC_rate=%f",crate()); //remove this for final code
sakthipriya 0:7b4c00e3912f 555
sakthipriya 0:7b4c00e3912f 556 if (alerting()== true) //alert is on
sakthipriya 0:7b4c00e3912f 557 {
sakthipriya 0:7b4c00e3912f 558 Battery_parameters[3]=alertFlags();
sakthipriya 0:7b4c00e3912f 559 clearAlert();//clear alert
sakthipriya 0:7b4c00e3912f 560 clearAlertFlags();//clear all alert flags
sakthipriya 0:7b4c00e3912f 561 }
azaddevarm 30:22b338b027de 562
azaddevarm 30:22b338b027de 563 if( soc() == 200) return 0; //Data not received - Invalid SOC
azaddevarm 30:22b338b027de 564 else return 1;
azaddevarm 30:22b338b027de 565 }
azaddevarm 30:22b338b027de 566
azaddevarm 30:22b338b027de 567 void tempCompensation(float temp)
azaddevarm 30:22b338b027de 568 {
azaddevarm 30:22b338b027de 569 //Calculate the new RCOMP value
azaddevarm 30:22b338b027de 570 char rcomp;
azaddevarm 30:22b338b027de 571 if (temp > 20.0) {
azaddevarm 30:22b338b027de 572 rcomp = RCOMP0 + (temp - 20.0) * -0.5;
azaddevarm 30:22b338b027de 573 } else {
azaddevarm 30:22b338b027de 574 rcomp = RCOMP0 + (temp - 20.0) * -5.0;
azaddevarm 30:22b338b027de 575 }
azaddevarm 30:22b338b027de 576
azaddevarm 30:22b338b027de 577 //Update the RCOMP value
azaddevarm 30:22b338b027de 578 compensation(rcomp);
sakthipriya 0:7b4c00e3912f 579 }
sakthipriya 0:7b4c00e3912f 580
azaddevarm 30:22b338b027de 581 void compensation(char rcomp)
azaddevarm 30:22b338b027de 582 {
azaddevarm 30:22b338b027de 583 //Read the current 16-bit register value
azaddevarm 30:22b338b027de 584 unsigned short value = read(REG_CONFIG);
azaddevarm 30:22b338b027de 585
azaddevarm 30:22b338b027de 586 //Update the register value
azaddevarm 30:22b338b027de 587 value &= 0x00FF;
azaddevarm 30:22b338b027de 588 value |= rcomp << 8;
azaddevarm 30:22b338b027de 589
azaddevarm 30:22b338b027de 590 //Write the value back out
azaddevarm 30:22b338b027de 591 write(REG_CONFIG, value);
azaddevarm 30:22b338b027de 592 }
azaddevarm 30:22b338b027de 593
azaddevarm 30:22b338b027de 594
azaddevarm 30:22b338b027de 595 int write(char reg, unsigned short data)
azaddevarm 30:22b338b027de 596 {
azaddevarm 30:22b338b027de 597 //Create a temporary buffer
azaddevarm 30:22b338b027de 598 char buff[3];
azaddevarm 30:22b338b027de 599
azaddevarm 30:22b338b027de 600 //Load the register address and 16-bit data
azaddevarm 30:22b338b027de 601 buff[0] = reg;
azaddevarm 30:22b338b027de 602 buff[1] = data >> 8;
azaddevarm 30:22b338b027de 603 buff[2] = data;
azaddevarm 30:22b338b027de 604
azaddevarm 30:22b338b027de 605 int flag = m_I2C.write(m_ADDR, buff, 3); //Write the data and return ack
azaddevarm 30:22b338b027de 606
azaddevarm 30:22b338b027de 607 if( flag != 0 )
azaddevarm 30:22b338b027de 608 {
azaddevarm 30:22b338b027de 609 flag = m_I2C.write(m_ADDR, buff, 3); //Write the data and return ack
azaddevarm 30:22b338b027de 610 if( data != read(reg) ) //Verify written data
azaddevarm 30:22b338b027de 611 EPS_BATTERY_GAUGE_STATUS = 0; //clear EPS_BATTERY_GAUGE_STATUS
azaddevarm 30:22b338b027de 612 }
azaddevarm 30:22b338b027de 613
azaddevarm 30:22b338b027de 614 return flag;
azaddevarm 30:22b338b027de 615 }
azaddevarm 30:22b338b027de 616
sakthipriya 0:7b4c00e3912f 617 unsigned short read(char reg)
sakthipriya 0:7b4c00e3912f 618 {
azaddevarm 30:22b338b027de 619 int flag = 1;
azaddevarm 30:22b338b027de 620 char buff[2]; //Create a temporary buffer
sakthipriya 0:7b4c00e3912f 621
sakthipriya 0:7b4c00e3912f 622 //Select the register
sakthipriya 0:7b4c00e3912f 623 m_I2C.write(m_ADDR, &reg, 1, true);
sakthipriya 0:7b4c00e3912f 624 //Read the 16-bit register
azaddevarm 30:22b338b027de 625 flag = m_I2C.read(m_ADDR, buff, 2);
azaddevarm 30:22b338b027de 626
azaddevarm 30:22b338b027de 627 if( flag )
azaddevarm 30:22b338b027de 628 {
azaddevarm 30:22b338b027de 629 m_I2C.write(m_ADDR, &reg, 1, true);
azaddevarm 30:22b338b027de 630 flag = m_I2C.read(m_ADDR, buff, 2);
azaddevarm 30:22b338b027de 631 if( flag )
azaddevarm 30:22b338b027de 632 EPS_BATTERY_GAUGE_STATUS = 0; //clear EPS_BATTERY_GAUGE_STATUS
azaddevarm 30:22b338b027de 633 }
sakthipriya 0:7b4c00e3912f 634
sakthipriya 0:7b4c00e3912f 635 //Return the combined 16-bit value
sakthipriya 0:7b4c00e3912f 636 return (buff[0] << 8) | buff[1];
sakthipriya 0:7b4c00e3912f 637 }
sakthipriya 0:7b4c00e3912f 638
sakthipriya 0:7b4c00e3912f 639
sakthipriya 0:7b4c00e3912f 640 // Command the MAX17049 to perform a power-on reset
sakthipriya 0:7b4c00e3912f 641 void reset()
sakthipriya 0:7b4c00e3912f 642 {
sakthipriya 0:7b4c00e3912f 643 //Write the POR command
sakthipriya 0:7b4c00e3912f 644 write(REG_CMD, 0x5400);
azaddevarm 30:22b338b027de 645 //Re-initialise gauge
azaddevarm 30:22b338b027de 646 FCTN_BATTERYGAUGE_INIT();
sakthipriya 0:7b4c00e3912f 647 }
sakthipriya 0:7b4c00e3912f 648
sakthipriya 0:7b4c00e3912f 649 // Command the MAX17049 to perform a QuickStart
sakthipriya 0:7b4c00e3912f 650 void quickStart()
sakthipriya 0:7b4c00e3912f 651 {
sakthipriya 0:7b4c00e3912f 652 //Read the current 16-bit register value
sakthipriya 0:7b4c00e3912f 653 unsigned short value = read(REG_MODE);
lakshya 15:e09aaaccf134 654
sakthipriya 0:7b4c00e3912f 655 //Set the QuickStart bit
sakthipriya 0:7b4c00e3912f 656 value |= (1 << 14);
sakthipriya 0:7b4c00e3912f 657
sakthipriya 0:7b4c00e3912f 658 //Write the value back out
sakthipriya 0:7b4c00e3912f 659 write(REG_MODE, value);
sakthipriya 0:7b4c00e3912f 660 }
sakthipriya 0:7b4c00e3912f 661
sakthipriya 0:7b4c00e3912f 662
sakthipriya 0:7b4c00e3912f 663 //disable sleep
sakthipriya 0:7b4c00e3912f 664 void disable_sleep()
sakthipriya 0:7b4c00e3912f 665 {
sakthipriya 0:7b4c00e3912f 666 unsigned short value = read(REG_MODE);
sakthipriya 0:7b4c00e3912f 667 value &= ~(1 << 13);
sakthipriya 0:7b4c00e3912f 668 write(REG_MODE, value);
sakthipriya 0:7b4c00e3912f 669 }
sakthipriya 0:7b4c00e3912f 670
sakthipriya 0:7b4c00e3912f 671 //disable the hibernate of the MAX17049
sakthipriya 0:7b4c00e3912f 672 void disable_hibernate()
sakthipriya 0:7b4c00e3912f 673 {
sakthipriya 0:7b4c00e3912f 674 write(REG_HIBRT, 0x0000);
sakthipriya 0:7b4c00e3912f 675 }
sakthipriya 0:7b4c00e3912f 676
sakthipriya 0:7b4c00e3912f 677
sakthipriya 0:7b4c00e3912f 678 // Enable or disable the SOC 1% change alert on the MAX17049
sakthipriya 0:7b4c00e3912f 679 void socChangeAlertEnabled(bool enabled)
sakthipriya 0:7b4c00e3912f 680 {
sakthipriya 0:7b4c00e3912f 681 //Read the current 16-bit register value
sakthipriya 0:7b4c00e3912f 682 unsigned short value = read(REG_CONFIG);
sakthipriya 0:7b4c00e3912f 683
sakthipriya 0:7b4c00e3912f 684 //Set or clear the ALSC bit
sakthipriya 0:7b4c00e3912f 685 if (enabled)
sakthipriya 0:7b4c00e3912f 686 value |= (1 << 6);
sakthipriya 0:7b4c00e3912f 687 else
sakthipriya 0:7b4c00e3912f 688 value &= ~(1 << 6);
sakthipriya 0:7b4c00e3912f 689
sakthipriya 0:7b4c00e3912f 690 //Write the value back out
sakthipriya 0:7b4c00e3912f 691 write(REG_CONFIG, value);
sakthipriya 0:7b4c00e3912f 692 }
sakthipriya 0:7b4c00e3912f 693
sakthipriya 0:7b4c00e3912f 694 //Set the SOC empty alert threshold of the MAX17049
sakthipriya 0:7b4c00e3912f 695 void emptyAlertThreshold(char threshold)
sakthipriya 0:7b4c00e3912f 696 {
sakthipriya 0:7b4c00e3912f 697 //Read the current 16-bit register value
sakthipriya 0:7b4c00e3912f 698 unsigned short value = read(REG_CONFIG);
sakthipriya 0:7b4c00e3912f 699
sakthipriya 0:7b4c00e3912f 700 //Update the register value
sakthipriya 0:7b4c00e3912f 701 value &= 0xFFE0;
sakthipriya 0:7b4c00e3912f 702 value |= 32 - threshold;
sakthipriya 0:7b4c00e3912f 703
sakthipriya 0:7b4c00e3912f 704 //Write the 16-bit register
sakthipriya 0:7b4c00e3912f 705 write(REG_CONFIG, value);
sakthipriya 0:7b4c00e3912f 706 }
sakthipriya 0:7b4c00e3912f 707
sakthipriya 0:7b4c00e3912f 708 // Set the low and high voltage alert threshold of the MAX17049
sakthipriya 0:7b4c00e3912f 709 void vAlertMinMaxThreshold()
sakthipriya 0:7b4c00e3912f 710 {
sakthipriya 0:7b4c00e3912f 711 //Read the current 16-bit register value
sakthipriya 0:7b4c00e3912f 712 unsigned short value = read(REG_VALRT);
sakthipriya 0:7b4c00e3912f 713
sakthipriya 0:7b4c00e3912f 714 //Mask off the old value
sakthipriya 0:7b4c00e3912f 715
sakthipriya 0:7b4c00e3912f 716 value = 0x96D2;
sakthipriya 0:7b4c00e3912f 717
sakthipriya 0:7b4c00e3912f 718 //Write the 16-bit register
sakthipriya 0:7b4c00e3912f 719 write(REG_VALRT, value);
sakthipriya 0:7b4c00e3912f 720 }
sakthipriya 0:7b4c00e3912f 721
sakthipriya 0:7b4c00e3912f 722
sakthipriya 0:7b4c00e3912f 723 // Set the reset voltage threshold of the MAX17049
sakthipriya 0:7b4c00e3912f 724 void vResetThresholdSet()
sakthipriya 0:7b4c00e3912f 725 {
sakthipriya 0:7b4c00e3912f 726 //Read the current 16-bit register value
sakthipriya 0:7b4c00e3912f 727 unsigned short value = read(REG_VRESET_ID);
sakthipriya 0:7b4c00e3912f 728
sakthipriya 0:7b4c00e3912f 729 //Mask off the old //value
sakthipriya 0:7b4c00e3912f 730 value &= 0x00FF;//Dis=0
sakthipriya 0:7b4c00e3912f 731
sakthipriya 0:7b4c00e3912f 732 value |= 0x9400;//corresponding to 2.5 V
sakthipriya 0:7b4c00e3912f 733
sakthipriya 0:7b4c00e3912f 734
sakthipriya 0:7b4c00e3912f 735 //Write the 16-bit register
sakthipriya 0:7b4c00e3912f 736 write(REG_VRESET_ID, value);
sakthipriya 0:7b4c00e3912f 737 }
sakthipriya 0:7b4c00e3912f 738
sakthipriya 0:7b4c00e3912f 739
sakthipriya 0:7b4c00e3912f 740 // Enable or disable the voltage reset alert on the MAX17049
sakthipriya 0:7b4c00e3912f 741 void vResetAlertEnabled(bool enabled)
sakthipriya 0:7b4c00e3912f 742 {
sakthipriya 0:7b4c00e3912f 743 //Read the current 16-bit register value
sakthipriya 0:7b4c00e3912f 744 unsigned short value = read(REG_STATUS);
sakthipriya 0:7b4c00e3912f 745
sakthipriya 0:7b4c00e3912f 746 //Set or clear the EnVR bit
sakthipriya 0:7b4c00e3912f 747 if (enabled)
sakthipriya 0:7b4c00e3912f 748 value |= (1 << 14);
sakthipriya 0:7b4c00e3912f 749 else
sakthipriya 0:7b4c00e3912f 750 value &= ~(1 << 14);
sakthipriya 0:7b4c00e3912f 751
sakthipriya 0:7b4c00e3912f 752 //Write the value back out
sakthipriya 0:7b4c00e3912f 753 write(REG_STATUS, value);
sakthipriya 0:7b4c00e3912f 754 }
azaddevarm 30:22b338b027de 755
azaddevarm 30:22b338b027de 756 // Command the MAX17049 to de-assert the ALRT pin
azaddevarm 30:22b338b027de 757 void clearAlert()
azaddevarm 30:22b338b027de 758 {
azaddevarm 30:22b338b027de 759 //Read the current 16-bit register value
azaddevarm 30:22b338b027de 760 unsigned short value = read(REG_CONFIG);
sakthipriya 0:7b4c00e3912f 761
azaddevarm 30:22b338b027de 762 //Clear the ALRT bit
azaddevarm 30:22b338b027de 763 value &= ~(1 << 5);
azaddevarm 30:22b338b027de 764
azaddevarm 30:22b338b027de 765 //Write the value back out
azaddevarm 30:22b338b027de 766 write(REG_CONFIG, value);
azaddevarm 30:22b338b027de 767 }
azaddevarm 30:22b338b027de 768
sakthipriya 0:7b4c00e3912f 769 //Get the current alert flags on the MAX17049
sakthipriya 0:7b4c00e3912f 770 //refer datasheet-status registers section to decode it.
sakthipriya 0:7b4c00e3912f 771 char alertFlags()
sakthipriya 0:7b4c00e3912f 772 {
sakthipriya 0:7b4c00e3912f 773 //Read the 16-bit register value
sakthipriya 0:7b4c00e3912f 774 unsigned short value = read(REG_STATUS);
sakthipriya 0:7b4c00e3912f 775
sakthipriya 0:7b4c00e3912f 776 //Return only the flag bits
sakthipriya 0:7b4c00e3912f 777 return (value >> 8) & 0x3F;
sakthipriya 0:7b4c00e3912f 778 }
sakthipriya 0:7b4c00e3912f 779
sakthipriya 0:7b4c00e3912f 780 // Clear all the alert flags on the MAX17049
sakthipriya 0:7b4c00e3912f 781 void clearAlertFlags()
sakthipriya 0:7b4c00e3912f 782 {
sakthipriya 0:7b4c00e3912f 783 //Read the current 16-bit register value
sakthipriya 0:7b4c00e3912f 784 unsigned short value = read(REG_STATUS);
sakthipriya 0:7b4c00e3912f 785
sakthipriya 0:7b4c00e3912f 786 //Clear the specified flag bits
sakthipriya 0:7b4c00e3912f 787 value &= ~( 0x3F<< 8);
sakthipriya 0:7b4c00e3912f 788
sakthipriya 0:7b4c00e3912f 789 //Write the value back out
sakthipriya 0:7b4c00e3912f 790 write(REG_STATUS, value);
sakthipriya 0:7b4c00e3912f 791 }
sakthipriya 0:7b4c00e3912f 792
sakthipriya 0:7b4c00e3912f 793 // Get the current cell voltage measurement of the MAX17049
sakthipriya 0:7b4c00e3912f 794 float vcell()
sakthipriya 0:7b4c00e3912f 795 {
sakthipriya 1:446a959e36ce 796
sakthipriya 0:7b4c00e3912f 797 //Read the 16-bit raw Vcell value
sakthipriya 0:7b4c00e3912f 798 unsigned short value = read(REG_VCELL);
sakthipriya 0:7b4c00e3912f 799
sakthipriya 0:7b4c00e3912f 800 //Return Vcell in volts
sakthipriya 0:7b4c00e3912f 801 return value * 0.000078125*2;
sakthipriya 0:7b4c00e3912f 802 }
sakthipriya 0:7b4c00e3912f 803
sakthipriya 0:7b4c00e3912f 804 // Get the current state of charge measurement of the MAX17049 as a float
sakthipriya 0:7b4c00e3912f 805 float soc()
sakthipriya 0:7b4c00e3912f 806 {
sakthipriya 3:07e15677a75c 807
sakthipriya 3:07e15677a75c 808 //Create a temporary buffer
sakthipriya 0:7b4c00e3912f 809 char buff[2];
sakthipriya 3:07e15677a75c 810 int ack = 1;
sakthipriya 3:07e15677a75c 811 //Select the register
sakthipriya 3:07e15677a75c 812 char reg = REG_SOC; // cannot pass the hash defined values directly
sakthipriya 3:07e15677a75c 813 m_I2C.write(m_ADDR, &reg, 1, true);
sakthipriya 3:07e15677a75c 814
sakthipriya 3:07e15677a75c 815
sakthipriya 3:07e15677a75c 816 //Read the 16-bit register
sakthipriya 3:07e15677a75c 817
sakthipriya 3:07e15677a75c 818 ack = m_I2C.read(m_ADDR, buff, 2);
sakthipriya 3:07e15677a75c 819
azaddevarm 32:623747b1cecb 820 printf("\n\r SOC: acknow %d\n\r", ack);
sakthipriya 0:7b4c00e3912f 821
sakthipriya 0:7b4c00e3912f 822 //Return SOC in percent
sakthipriya 2:c823d84b4cb0 823 if(ack == 0)
sakthipriya 3:07e15677a75c 824 return ((buff[0] << 8) | buff[1]) * 0.00390625;
sakthipriya 2:c823d84b4cb0 825 else
sakthipriya 2:c823d84b4cb0 826 return 200;
sakthipriya 0:7b4c00e3912f 827 }
sakthipriya 0:7b4c00e3912f 828
sakthipriya 0:7b4c00e3912f 829
sakthipriya 0:7b4c00e3912f 830
sakthipriya 0:7b4c00e3912f 831 // Get the current C rate measurement of the MAX17049
sakthipriya 0:7b4c00e3912f 832 float crate()
sakthipriya 0:7b4c00e3912f 833 {
sakthipriya 0:7b4c00e3912f 834 //Read the 16-bit raw C/Rate value
sakthipriya 0:7b4c00e3912f 835 short value = read(REG_CRATE);
sakthipriya 0:7b4c00e3912f 836
sakthipriya 0:7b4c00e3912f 837 //Return C/Rate in %/hr
sakthipriya 0:7b4c00e3912f 838 return value * 0.208;
sakthipriya 0:7b4c00e3912f 839 }
sakthipriya 0:7b4c00e3912f 840
sakthipriya 0:7b4c00e3912f 841 // Determine whether or not the MAX17049 is asserting the ALRT pin
sakthipriya 0:7b4c00e3912f 842 bool alerting()
sakthipriya 0:7b4c00e3912f 843 {
sakthipriya 0:7b4c00e3912f 844 //Read the 16-bit register value
sakthipriya 0:7b4c00e3912f 845 unsigned short value = read(REG_CONFIG);
sakthipriya 0:7b4c00e3912f 846
sakthipriya 0:7b4c00e3912f 847 //Return the status of the ALRT bit
sakthipriya 0:7b4c00e3912f 848 if (value & (1 << 5))
sakthipriya 0:7b4c00e3912f 849 return true;
sakthipriya 0:7b4c00e3912f 850 else
sakthipriya 0:7b4c00e3912f 851 return false;
sakthipriya 2:c823d84b4cb0 852 }
sakthipriya 2:c823d84b4cb0 853
sakthipriya 2:c823d84b4cb0 854 //.............................Battery board Temp sensor........................//
sakthipriya 2:c823d84b4cb0 855 void FCTN_BATTTEMP_INIT()
sakthipriya 2:c823d84b4cb0 856 {
sakthipriya 2:c823d84b4cb0 857 ssn1=1;ssn2=1;
sakthipriya 2:c823d84b4cb0 858 //PS=0;
sakthipriya 2:c823d84b4cb0 859 //HS=0;
sakthipriya 2:c823d84b4cb0 860 spi_bt.format(8,3);
sakthipriya 2:c823d84b4cb0 861 spi_bt.frequency(1000000);
azaddevarm 30:22b338b027de 862 EPS_BTRY_TMP_STATUS = 1;
sakthipriya 2:c823d84b4cb0 863 }
sakthipriya 2:c823d84b4cb0 864
sakthipriya 2:c823d84b4cb0 865 void FCTN_BATT_TEMP_SENSOR_MAIN(float temp[2])
sakthipriya 2:c823d84b4cb0 866 {
sakthipriya 2:c823d84b4cb0 867 uint8_t MSB, LSB;
sakthipriya 2:c823d84b4cb0 868 int16_t bit_data;
sakthipriya 2:c823d84b4cb0 869 float sensitivity=0.0078125; //1 LSB = sensitivity degree celcius
sakthipriya 2:c823d84b4cb0 870 wait_ms(320);
sakthipriya 2:c823d84b4cb0 871 ssn1=0;
sakthipriya 2:c823d84b4cb0 872
sakthipriya 2:c823d84b4cb0 873 spi_bt.write(0x80);//Reading digital data from Sensor 1
sakthipriya 2:c823d84b4cb0 874 LSB = spi_bt.write(0x00);//LSB first
sakthipriya 2:c823d84b4cb0 875 wait_ms(0);
sakthipriya 2:c823d84b4cb0 876 MSB = spi_bt.write(0x00);
sakthipriya 2:c823d84b4cb0 877 wait_ms(10);
sakthipriya 2:c823d84b4cb0 878 pc_eps.printf("%d %d\n",MSB,LSB);
sakthipriya 2:c823d84b4cb0 879 bit_data= ((uint16_t)MSB<<8)|LSB;
sakthipriya 2:c823d84b4cb0 880 wait_ms(10);
sakthipriya 2:c823d84b4cb0 881 temp[0]=(float)bit_data*sensitivity;//Converting into decimal value
sakthipriya 2:c823d84b4cb0 882 ssn1=1;
sakthipriya 2:c823d84b4cb0 883 wait_ms(10);
sakthipriya 2:c823d84b4cb0 884 ssn2=0;//Reading data from sensor 2
sakthipriya 2:c823d84b4cb0 885 spi_bt.write(0x80);
sakthipriya 2:c823d84b4cb0 886 LSB = spi_bt.write(0x00);
sakthipriya 2:c823d84b4cb0 887 wait_ms(10);
sakthipriya 2:c823d84b4cb0 888 MSB = spi_bt.write(0x00);
sakthipriya 2:c823d84b4cb0 889 wait_ms(10);
sakthipriya 2:c823d84b4cb0 890 bit_data= ((int16_t)MSB<<8)|LSB;
sakthipriya 2:c823d84b4cb0 891 wait_ms(10);
sakthipriya 2:c823d84b4cb0 892 temp[1]=(float)bit_data*sensitivity;
sakthipriya 2:c823d84b4cb0 893 ssn2=1;
sakthipriya 2:c823d84b4cb0 894
sakthipriya 2:c823d84b4cb0 895 }