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.
Dependencies: FreescaleIAP mbed-rtos mbed
Fork of workinQM_10thDec by
Diff: EPS.cpp
- Revision:
- 33:76f2b8735501
- Parent:
- 27:61c856be467e
- Child:
- 39:670133e7ffd8
--- a/EPS.cpp Sat Jul 02 14:06:34 2016 +0000 +++ b/EPS.cpp Mon Jul 04 04:29:59 2016 +0000 @@ -47,6 +47,7 @@ extern uint8_t BCN_INIT_STATUS; extern uint8_t BCN_FAIL_COUNT; extern uint16_t BCN_TX_MAIN_COUNTER; +extern uint8_t BCN_TX_MAIN_STATUS; //bae extern uint8_t BAE_RESET_COUNTER; @@ -57,6 +58,8 @@ //eps extern uint8_t ACS_INIT_STATUS; extern uint16_t EPS_MAIN_COUNTER; +extern uint8_t EPS_BTRY_TMP_STATUS; + //main extern uint8_t HTR_CYCLE_COUNTER; @@ -69,7 +72,8 @@ /***********************************************global variable declaration***************************************************************/ extern uint32_t BAE_STATUS; extern uint32_t BAE_ENABLE; -extern uint8_t BAE_HK_data[134]; +extern uint8_t LONG_HK_data[2][134]; +//extern uint8_t BAE_HK_data[134]; //extern char BAE_chardata[74]; //implement them assign them default values @@ -102,7 +106,7 @@ DigitalOut TRXY(TRXY_DR_EN); //active high DigitalOut TRZ(TRZ_DR_EN); //active high DigitalOut EN3V3A(ENBL3V3A); -DigitalOut EN_BTRY_HT(BATT_HEAT); +DigitalOut BTRY_HTR_ENABLE(BATT_HEAT);// earlier BTRY_HTR_ENABLE //DigitalIn BTRY_HT_OUTPUT(BATT_HEAT_OUTPUT); //AnalogIn Vbatt_ang(VBATT); AnalogIn Batt_voltage(PIN20); //Battery voltage @@ -132,16 +136,17 @@ extern uint8_t EPS_INIT_STATUS ; extern uint8_t EPS_BATTERY_GAUGE_STATUS ; extern uint8_t EPS_MAIN_STATUS; -extern uint8_t EPS_BATTERY_TEMP_STATUS ; +extern uint8_t EPS_BTRY_TMP_STATUS ; extern uint8_t EPS_STATUS ; -extern uint8_t EPS_BTRY_HTR_AUTO ; +extern uint8_t EPS_BTRY_HTR ; //eps cdms fault extern uint8_t CDMS_SW_STATUS; extern DigitalOut CDMS_OC_FAULT; extern bool CDMS_SW_ENABLE; extern int CDMS_FAULT_COUNTER; +extern uint8_t EPS_BTRY_HTR_AUTO; //eps hw faults @@ -188,11 +193,12 @@ EN3V3A = 1; //enable dc dc converter A char value=alertFlags(); // initialization part of battery gauge unsigned short value_u= (short int )value; - value_u &=0x0001; - if(value_u ==0x0001) // battery gauge not initialised + //value_u &=0x0001; + if(value_u & 0x0001 == 0x0001) // battery gauge not initialised { actual_data.power_mode = 1; EPS_BATTERY_GAUGE_STATUS = 0; //clear EPS_BATTERY_GAUGE_STATUS + printf(" init BTG fail - %d\n\r", value_u); } else { @@ -200,7 +206,11 @@ actual_data.Batt_voltage_actual = Batt_voltage.read()*3.3; //1 corresponds to 3.3 scaling factor FCTN_EPS_POWERMODE(actual_data.Batt_gauge_actual[1]); EPS_BATTERY_GAUGE_STATUS = 1; //set EPS_BATTERY_GAUGE_STATUS + printf("init BTG success - %d\n\r", value_u); } + + //if( read(REG_VERSION) == + printf("REG_VERSION = %d\r\n",read(REG_VERSION)); FCTN_BATTTEMP_INIT(); EPS_BATTERY_GAUGE_STATUS = 1; @@ -515,169 +525,169 @@ void FCTN_APPEND_HKDATA() { - BAE_HK_data[0] = 0x28; - BAE_HK_data[1] = 0x00; - BAE_HK_data[2] = 0x00; - BAE_HK_data[3] = 0x00; - BAE_HK_data[4] = ACS_ATS_STATUS; - BAE_HK_data[5] = ACS_TR_XY_SW_STATUS; - BAE_HK_data[5] = (BAE_HK_data[5]<<2)| ACS_TR_Z_SW_STATUS; - BAE_HK_data[5] = (BAE_HK_data[5]<<4) | ACS_STATE; + LONG_HK_data[1][0] = 0x28; + LONG_HK_data[1][1] = 0x00; + LONG_HK_data[1][2] = 0x00; + LONG_HK_data[1][3] = 0x00; + LONG_HK_data[1][4] = ACS_ATS_STATUS; + LONG_HK_data[1][5] = ACS_TR_XY_SW_STATUS; + LONG_HK_data[1][5] = (LONG_HK_data[1][5]<<2)| ACS_TR_Z_SW_STATUS; + LONG_HK_data[1][5] = (LONG_HK_data[1][5]<<4) | ACS_STATE; - BAE_HK_data[6] = ACS_DETUMBLING_ALGO_TYPE; - BAE_HK_data[6] = (BAE_HK_data[6]<<2) | BCN_TX_SW_STATUS; - BAE_HK_data[6] = (BAE_HK_data[6]<<1) | BCN_SPND_TX; - BAE_HK_data[6] = (BAE_HK_data[6]<<1) | BCN_FEN; - BAE_HK_data[6] = (BAE_HK_data[6]<<1) | BCN_LONG_MSG_TYPE; - BAE_HK_data[6] = (BAE_HK_data[6]<<1) | EPS_BTRY_HTR_AUTO;//EPS_BATTERY_HEATER_ENABLE - BAE_HK_data[6] = (BAE_HK_data[6]<<1); + LONG_HK_data[1][6] = ACS_DETUMBLING_ALGO_TYPE; + LONG_HK_data[1][6] = (LONG_HK_data[1][6]<<2) | BCN_TX_SW_STATUS; + LONG_HK_data[1][6] = (LONG_HK_data[1][6]<<1) | BCN_SPND_TX; + LONG_HK_data[1][6] = (LONG_HK_data[1][6]<<1) | BCN_FEN; + LONG_HK_data[1][6] = (LONG_HK_data[1][6]<<1) | BCN_LONG_MSG_TYPE; + LONG_HK_data[1][6] = (LONG_HK_data[1][6]<<1) | EPS_BTRY_HTR_AUTO;//EPS_BATTERY_HEATER_ENABLE + LONG_HK_data[1][6] = (LONG_HK_data[1][6]<<1); //now one spares in BAE_HK_data[5] - BAE_HK_data[7] = BAE_RESET_COUNTER; - BAE_HK_data[8] = EPS_SOC_LEVEL_12; - BAE_HK_data[9] = EPS_SOC_LEVEL_23; - BAE_HK_data[10] = ACS_MAG_TIME_DELAY; - BAE_HK_data[11] = ACS_DEMAG_TIME_DELAY; - BAE_HK_data[12] = EPS_BAT_TEMP_LOW; - BAE_HK_data[13] = EPS_BAT_TEMP_HIGH; - BAE_HK_data[14] = EPS_BAT_TEMP_DEFAULT; - BAE_HK_data[15] = ACS_MM_X_COMSN >> 8; - BAE_HK_data[16] = ACS_MM_X_COMSN; + LONG_HK_data[1][7] = BAE_RESET_COUNTER; + LONG_HK_data[1][8] = EPS_SOC_LEVEL_12; + LONG_HK_data[1][9] = EPS_SOC_LEVEL_23; + LONG_HK_data[1][10] = ACS_MAG_TIME_DELAY; + LONG_HK_data[1][11] = ACS_DEMAG_TIME_DELAY; + LONG_HK_data[1][12] = EPS_BAT_TEMP_LOW; + LONG_HK_data[1][13] = EPS_BAT_TEMP_HIGH; + LONG_HK_data[1][14] = EPS_BAT_TEMP_DEFAULT; + LONG_HK_data[1][15] = ACS_MM_X_COMSN >> 8; + LONG_HK_data[1][16] = ACS_MM_X_COMSN; - BAE_HK_data[17] = ACS_MM_Y_COMSN >> 8; - BAE_HK_data[18] = ACS_MM_Y_COMSN; + LONG_HK_data[1][17] = ACS_MM_Y_COMSN >> 8; + LONG_HK_data[1][18] = ACS_MM_Y_COMSN; - BAE_HK_data[19] = ACS_MG_X_COMSN >> 8; - BAE_HK_data[20] = ACS_MG_X_COMSN; + LONG_HK_data[1][19] = ACS_MG_X_COMSN >> 8; + LONG_HK_data[1][20] = ACS_MG_X_COMSN; - BAE_HK_data[21] = ACS_MG_Y_COMSN >> 8; - BAE_HK_data[22] = ACS_MG_Y_COMSN; + LONG_HK_data[1][21] = ACS_MG_Y_COMSN >> 8; + LONG_HK_data[1][22] = ACS_MG_Y_COMSN; - BAE_HK_data[23] = ACS_MM_Z_COMSN >> 8; - BAE_HK_data[24] = ACS_MM_Z_COMSN; + LONG_HK_data[1][23] = ACS_MM_Z_COMSN >> 8; + LONG_HK_data[1][24] = ACS_MM_Z_COMSN; - BAE_HK_data[25] = ACS_MG_Z_COMSN >> 8; - BAE_HK_data[26] = ACS_MG_Z_COMSN; + LONG_HK_data[1][25] = ACS_MG_Z_COMSN >> 8; + LONG_HK_data[1][26] = ACS_MG_Z_COMSN; - BAE_HK_data[27] = ACS_Z_FIXED_MOMENT >> 8; - BAE_HK_data[28] = ACS_Z_FIXED_MOMENT; + LONG_HK_data[1][27] = ACS_Z_FIXED_MOMENT >> 8; + LONG_HK_data[1][28] = ACS_Z_FIXED_MOMENT; //BAE RAM PARAMETER - BAE_HK_data[29] = BAE_INIT_STATUS; - BAE_HK_data[29] = (BAE_HK_data[29]<<1) | 0;//change it================================ - BAE_HK_data[29] = (BAE_HK_data[29]<<1) | BCN_INIT_STATUS; - BAE_HK_data[29] = (BAE_HK_data[29]<<1) | BCN_TX_MAIN_STATUS; - BAE_HK_data[29] = (BAE_HK_data[29]<<3) | BCN_TX_STATUS; - BAE_HK_data[29] = (BAE_HK_data[29]<<3) | ACS_INIT_STATUS; + LONG_HK_data[1][29] = BAE_INIT_STATUS; + LONG_HK_data[1][29] = (LONG_HK_data[1][29]<<1) | 0;//change it================================ + LONG_HK_data[1][29] = (LONG_HK_data[1][29]<<1) | BCN_INIT_STATUS; + LONG_HK_data[1][29] = (LONG_HK_data[1][29]<<1) | BCN_TX_MAIN_STATUS; + LONG_HK_data[1][29] = (LONG_HK_data[1][29]<<3) | BCN_TX_STATUS; + LONG_HK_data[1][29] = (LONG_HK_data[1][29]<<3) | ACS_INIT_STATUS; - BAE_HK_data[30] = ACS_DATA_ACQ_STATUS; - BAE_HK_data[30] = (BAE_HK_data[30]<<1) | ACS_MAIN_STATUS; - BAE_HK_data[30] = (BAE_HK_data[30]<<4) | ACS_STATUS; - BAE_HK_data[30] = (BAE_HK_data[30]<<1) | EPS_INIT_STATUS; + LONG_HK_data[1][30] = ACS_DATA_ACQ_STATUS; + LONG_HK_data[1][30] = (LONG_HK_data[1][30]<<1) | ACS_MAIN_STATUS; + LONG_HK_data[1][30] = (LONG_HK_data[1][30]<<4) | ACS_STATUS; + LONG_HK_data[1][30] = (LONG_HK_data[1][30]<<1) | EPS_INIT_STATUS; - BAE_HK_data[31] = EPS_BATTERY_GAUGE_STATUS; - BAE_HK_data[31] = (BAE_HK_data[31]<<1) | EPS_MAIN_STATUS; - BAE_HK_data[31] = (BAE_HK_data[31]<<1) | EPS_BATTERY_TEMP_STATUS; - BAE_HK_data[31] = (BAE_HK_data[31]<<3) | EPS_STATUS; - BAE_HK_data[31] = (BAE_HK_data[31]<<2) | CDMS_SW_STATUS; + LONG_HK_data[1][31] = EPS_BATTERY_GAUGE_STATUS; + LONG_HK_data[1][31] = (LONG_HK_data[1][31]<<1) | EPS_MAIN_STATUS; + LONG_HK_data[1][31] = (LONG_HK_data[1][31]<<1) | EPS_BTRY_TMP_STATUS;; + LONG_HK_data[1][31] = (LONG_HK_data[1][31]<<3) | EPS_STATUS; + LONG_HK_data[1][31] = (LONG_HK_data[1][31]<<2) | CDMS_SW_STATUS; ////BAE_HK_data[31] = (BAE_HK_data[31]<<1) | EPS_BTRY_HTR_STATUS;//new to : implement=========== - //BAE_HK_data[32] = EPS_BTRY_HTR_STATUS; + LONG_HK_data[1][32] = EPS_BTRY_HTR;// to be disscussed //spare 4 - BAE_HK_data[32] = (BAE_HK_data[32]<<7) | BAE_STANDBY; + LONG_HK_data[1][32] = (LONG_HK_data[1][32]<<7) | BAE_STANDBY; // 6 next telemetries value to be given by registers - BAE_HK_data[33] = ATS1_EVENT_STATUS_RGTR; - BAE_HK_data[34] = ATS1_SENTRAL_STATUS_RGTR; - BAE_HK_data[35] = ATS1_ERROR_RGTR; - BAE_HK_data[36] = ATS2_EVENT_STATUS_RGTR; - BAE_HK_data[37] = ATS2_SENTRAL_STATUS_RGTR; - BAE_HK_data[38] = ATS2_ERROR_RGTR; + LONG_HK_data[1][33] = ATS1_EVENT_STATUS_RGTR; + LONG_HK_data[1][34] = ATS1_SENTRAL_STATUS_RGTR; + LONG_HK_data[1][35] = ATS1_ERROR_RGTR; + LONG_HK_data[1][36] = ATS2_EVENT_STATUS_RGTR; + LONG_HK_data[1][37] = ATS2_SENTRAL_STATUS_RGTR; + LONG_HK_data[1][38] = ATS2_ERROR_RGTR; - BAE_HK_data[39] = BCN_FAIL_COUNT; - BAE_HK_data[40] = actual_data.power_mode; - BAE_HK_data[41] = HTR_CYCLE_COUNTER;//new to : implement + LONG_HK_data[1][39] = BCN_FAIL_COUNT; + LONG_HK_data[1][40] = actual_data.power_mode; + LONG_HK_data[1][41] = HTR_CYCLE_COUNTER;//new to : implement - BAE_HK_data[42] = BAE_I2C_COUNTER; - BAE_HK_data[43] = BAE_I2C_COUNTER>>8; - BAE_HK_data[44] = ACS_MAIN_COUNTER; - BAE_HK_data[45] = ACS_MAIN_COUNTER>>8; - BAE_HK_data[46] = BCN_TX_MAIN_COUNTER; - BAE_HK_data[47] = BCN_TX_MAIN_COUNTER>>8; - BAE_HK_data[48] = EPS_MAIN_COUNTER; - BAE_HK_data[49] = EPS_MAIN_COUNTER>>8; - BAE_HK_data[50] = actual_data.bit_data_acs_mm[0]; - BAE_HK_data[51] = actual_data.bit_data_acs_mm[0]>>8; - BAE_HK_data[52] = actual_data.bit_data_acs_mm[1]; - BAE_HK_data[53] = actual_data.bit_data_acs_mm[1]>>8; - BAE_HK_data[54] = actual_data.bit_data_acs_mm[2]; - BAE_HK_data[55] = actual_data.bit_data_acs_mm[2]>>8; + LONG_HK_data[1][42] = BAE_I2C_COUNTER; + LONG_HK_data[1][43] = BAE_I2C_COUNTER>>8; + LONG_HK_data[1][44] = ACS_MAIN_COUNTER; + LONG_HK_data[1][45] = ACS_MAIN_COUNTER>>8; + LONG_HK_data[1][46] = BCN_TX_MAIN_COUNTER; + LONG_HK_data[1][47] = BCN_TX_MAIN_COUNTER>>8; + LONG_HK_data[1][48] = EPS_MAIN_COUNTER; + LONG_HK_data[1][49] = EPS_MAIN_COUNTER>>8; + LONG_HK_data[1][50] = actual_data.bit_data_acs_mm[0]; + LONG_HK_data[1][51] = actual_data.bit_data_acs_mm[0]>>8; + LONG_HK_data[1][52] = actual_data.bit_data_acs_mm[1]; + LONG_HK_data[1][53] = actual_data.bit_data_acs_mm[1]>>8; + LONG_HK_data[1][54] = actual_data.bit_data_acs_mm[2]; + LONG_HK_data[1][55] = actual_data.bit_data_acs_mm[2]>>8; - BAE_HK_data[56] = actual_data.bit_data_acs_mg[0]; - BAE_HK_data[57] = actual_data.bit_data_acs_mg[0]>>8; - BAE_HK_data[58] = actual_data.bit_data_acs_mg[1]; - BAE_HK_data[59] = actual_data.bit_data_acs_mg[1]>>8; - BAE_HK_data[60] = actual_data.bit_data_acs_mg[2]; - BAE_HK_data[61] = actual_data.bit_data_acs_mg[2]>>8; + LONG_HK_data[1][56] = actual_data.bit_data_acs_mg[0]; + LONG_HK_data[1][57] = actual_data.bit_data_acs_mg[0]>>8; + LONG_HK_data[1][58] = actual_data.bit_data_acs_mg[1]; + LONG_HK_data[1][59] = actual_data.bit_data_acs_mg[1]>>8; + LONG_HK_data[1][60] = actual_data.bit_data_acs_mg[2]; + LONG_HK_data[1][61] = actual_data.bit_data_acs_mg[2]>>8; - BAE_HK_data[62] = BCN_TX_OC_FAULT; - BAE_HK_data[62] = (BAE_HK_data[62]<<1) | ACS_TR_XY_ENABLE; - BAE_HK_data[62] = (BAE_HK_data[62]<<1) | ACS_TR_Z_ENABLE; - BAE_HK_data[62] = (BAE_HK_data[62]<<1) | ACS_TR_XY_OC_FAULT; - BAE_HK_data[62] = (BAE_HK_data[62]<<1) | ACS_TR_Z_OC_FAULT; - BAE_HK_data[62] = (BAE_HK_data[62]<<1) | ACS_TR_XY_FAULT; - BAE_HK_data[62] = (BAE_HK_data[62]<<1) | EPS_CHARGER_FAULT; - BAE_HK_data[62] = (BAE_HK_data[62]<<1) | EPS_CHARGER_STATUS; + LONG_HK_data[1][62] = BCN_TX_OC_FAULT; + LONG_HK_data[1][62] = (LONG_HK_data[1][62]<<1) | ACS_TR_XY_ENABLE; + LONG_HK_data[1][62] = (LONG_HK_data[1][62]<<1) | ACS_TR_Z_ENABLE; + LONG_HK_data[1][62] = (LONG_HK_data[1][62]<<1) | ACS_TR_XY_OC_FAULT; + LONG_HK_data[1][62] = (LONG_HK_data[1][62]<<1) | ACS_TR_Z_OC_FAULT; + LONG_HK_data[1][62] = (LONG_HK_data[1][62]<<1) | ACS_TR_XY_FAULT; + LONG_HK_data[1][62] = (LONG_HK_data[1][62]<<1) | EPS_CHARGER_FAULT; + LONG_HK_data[1][62] = (LONG_HK_data[1][62]<<1) | EPS_CHARGER_STATUS; - BAE_HK_data[63] = EPS_BATTERY_GAUGE_ALERT; - BAE_HK_data[63] = (BAE_HK_data[63]<<1) | CDMS_OC_FAULT; - BAE_HK_data[63] = (BAE_HK_data[63]<<1) | ACS_ATS1_OC_FAULT; - BAE_HK_data[63] = (BAE_HK_data[63]<<1) | ACS_ATS2_OC_FAULT; - BAE_HK_data[63] = (BAE_HK_data[63]<<1) | ACS_TR_Z_FAULT; - BAE_HK_data[63] = (BAE_HK_data[63]<<3); + LONG_HK_data[1][63] = EPS_BATTERY_GAUGE_ALERT; + LONG_HK_data[1][63] = (LONG_HK_data[1][63]<<1) | CDMS_OC_FAULT; + LONG_HK_data[1][63] = (LONG_HK_data[1][63]<<1) | ACS_ATS1_OC_FAULT; + LONG_HK_data[1][63] = (LONG_HK_data[1][63]<<1) | ACS_ATS2_OC_FAULT; + LONG_HK_data[1][63] = (LONG_HK_data[1][63]<<1) | ACS_TR_Z_FAULT; + LONG_HK_data[1][63] = (LONG_HK_data[1][63]<<3); //3 spare - BAE_HK_data[64] = ACS_TR_X_PWM; - BAE_HK_data[65] = ACS_TR_Y_PWM; - BAE_HK_data[66] = ACS_TR_Z_PWM; + LONG_HK_data[1][64] = ACS_TR_X_PWM; + LONG_HK_data[1][65] = ACS_TR_Y_PWM; + LONG_HK_data[1][66] = ACS_TR_Z_PWM; //spare byte //assigned it to counter HTR_CYCLE_COUNTER //assign it b_scz_angle - BAE_HK_data[67] = 0x00; - BAE_HK_data[67] = (BAE_HK_data[67]<<1) | alarmmode; - BAE_HK_data[67] = (BAE_HK_data[67]<<1) | controlmode_mms; - BAE_HK_data[67] = (BAE_HK_data[67]<<2); + LONG_HK_data[1][67] = 0x00; + LONG_HK_data[1][67] = (LONG_HK_data[1][67]<<1) | alarmmode; + LONG_HK_data[1][67] = (LONG_HK_data[1][67]<<1) | controlmode_mms; + LONG_HK_data[1][67] = (LONG_HK_data[1][67]<<2); //2 bit spare for(int i=0;i<9;i++) { - BAE_HK_data[68+i] = invjm_mms[i]; - BAE_HK_data[81+i] = jm_mms[i]; + LONG_HK_data[1][68+i] = invjm_mms[i]; + LONG_HK_data[1][81+i] = jm_mms[i]; } for(int i=0;i<3;i++) - BAE_HK_data[77+i] = bb_mms[i]; + LONG_HK_data[1][77+i] = bb_mms[i]; - BAE_HK_data[80] = singularity_flag_mms; + LONG_HK_data[1][80] = singularity_flag_mms; for(int i=0;i<16;i++) { - BAE_HK_data[90+i] = quant_data.voltage_quant[i]; - BAE_HK_data[106+i] = quant_data.current_quant[i]; + LONG_HK_data[1][90+i] = quant_data.voltage_quant[i]; + LONG_HK_data[1][106+i] = quant_data.current_quant[i]; } - BAE_HK_data[122] = quant_data.Batt_voltage_quant; - BAE_HK_data[123] = quant_data.BAE_temp_quant; - BAE_HK_data[124] = (uint8_t)(actual_data.Batt_gauge_actual[1]); - BAE_HK_data[125] = quant_data.Batt_temp_quant[0]; - BAE_HK_data[126] = quant_data.Batt_temp_quant[1]; - BAE_HK_data[127] = BCN_TMP; - BAE_HK_data[128] = 0x00; - BAE_HK_data[129] = 0x00; - BAE_HK_data[130] = 0x00; - BAE_HK_data[131] = 0x00; + LONG_HK_data[1][122] = quant_data.Batt_voltage_quant; + LONG_HK_data[1][123] = quant_data.BAE_temp_quant; + LONG_HK_data[1][124] = (uint8_t)(actual_data.Batt_gauge_actual[1]); + LONG_HK_data[1][125] = quant_data.Batt_temp_quant[0]; + LONG_HK_data[1][126] = quant_data.Batt_temp_quant[1]; + LONG_HK_data[1][127] = BCN_TMP; + LONG_HK_data[1][128] = 0x00; + LONG_HK_data[1][129] = 0x00; + LONG_HK_data[1][130] = 0x00; + LONG_HK_data[1][131] = 0x00; uint16_t crc = crc_hk_data(); - BAE_HK_data[132] = (uint8_t)(crc >> 8); - BAE_HK_data[133] = crc; + LONG_HK_data[1][132] = (uint8_t)(crc >> 8); + LONG_HK_data[1][133] = crc; //=================================================== /* can be retrived from the earlier code (function)*/ @@ -810,13 +820,17 @@ vAlertMinMaxThreshold();//set min, max value of Valrt register vResetThresholdSet();//set threshold voltage for reset vResetAlertEnabled(true);//enable alert on reset for V < Vreset + int ack = write(REG_STATUS, read(REG_STATUS) & 0xFEFF); //Clearing Reset Indicator bit + if( ack == 0 ) printf("BTG init success\n\r"); + else printf("BTG init fail ack = %d\n\r", ack); + write(REG_STATUS, read(REG_STATUS) & 0xFEFF); //Clearing Reset Indicator bit } -void FCTN_BATTERYGAUGE_MAIN(float Battery_parameters[4]) +int FCTN_BATTERYGAUGE_MAIN(float Battery_parameters[4], float temp) { //// printf("\n\r battery gauge \n"); - float temp=30; //=Battery_temp (from temp sensor on battery board) //value of battery temperature in C currently given a dummy value. Should be updated everytime. + //float temp=30; //=Battery_temp (from temp sensor on battery board) //value of battery temperature in C currently given a dummy value. Should be updated everytime. tempCompensation(temp); @@ -835,9 +849,83 @@ clearAlert();//clear alert clearAlertFlags();//clear all alert flags } + if( soc() == 200) return 0; + else return 1; } +void tempCompensation(float temp) +{ + //Calculate the new RCOMP value + char rcomp; + if (temp > 20.0) { + rcomp = RCOMP0 + (temp - 20.0) * -0.5; + } else { + rcomp = RCOMP0 + (temp - 20.0) * -5.0; + } + + //Update the RCOMP value + compensation(rcomp); +} + +void compensation(char rcomp) +{ + //Read the current 16-bit register value + unsigned short value = read(REG_CONFIG); + + //Update the register value + value &= 0x00FF; + value |= rcomp << 8; + + //Write the value back out + write(REG_CONFIG, value); +} + +int 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; + + int flag = m_I2C.write(m_ADDR, buff, 3); //Write the data and return ack + + if( flag != 0 ) + { + flag = m_I2C.write(m_ADDR, buff, 3); //Write the data and return ack + if( data != read(reg) ) //Verify written data + EPS_BATTERY_GAUGE_STATUS = 0; //clear EPS_BATTERY_GAUGE_STATUS + } + + return flag; + } + +unsigned short read(char reg) + { + int flag = 1; + char buff[2]; //Create a temporary buffer + + //Select the register + m_I2C.write(m_ADDR, ®, 1, true); + //Read the 16-bit register + flag = m_I2C.read(m_ADDR, buff, 2); + + if( flag ) + { + m_I2C.write(m_ADDR, ®, 1, true); + flag = m_I2C.read(m_ADDR, buff, 2); + if( flag ) + EPS_BATTERY_GAUGE_STATUS = 0; //clear EPS_BATTERY_GAUGE_STATUS + } + + //Return the combined 16-bit value + return (buff[0] << 8) | buff[1]; + } +/* + unsigned short read(char reg) { @@ -873,12 +961,14 @@ } - +*/ // Command the MAX17049 to perform a power-on reset void reset() { //Write the POR command write(REG_CMD, 0x5400); + //Re-initialise gauge + FCTN_BATTERYGAUGE_INIT(); } // Command the MAX17049 to perform a QuickStart @@ -926,7 +1016,7 @@ write(REG_CONFIG, value); } - +/* void compensation(char rcomp) { //Read the current 16-bit register value @@ -940,7 +1030,7 @@ write(REG_CONFIG, value); } - + void tempCompensation(float temp) { //Calculate the new RCOMP value @@ -955,6 +1045,7 @@ compensation(rcomp); } +*/ // Command the MAX17049 to de-assert the ALRT pin void clearAlert() { @@ -1124,7 +1215,7 @@ //HS=0; spi_bt.format(8,3); spi_bt.frequency(1000000); - EPS_BATTERY_TEMP_STATUS = 1; + EPS_BTRY_TMP_STATUS = 1; } void FCTN_BATT_TEMP_SENSOR_MAIN(float temp[2])