cdms_update
Dependencies: FreescaleIAP mbed-rtos mbed
Fork of CDMS_SD_MNG_OVERDRIVE by
Diff: CDMS_HK.cpp
- Revision:
- 1:ad3b8a8032e2
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CDMS_HK.cpp Thu Jan 21 14:46:28 2016 +0000 @@ -0,0 +1,164 @@ +#include "Flags.h" +#include "CDMS_HK.h" +#include "mbed.h" +#include "cdms_rtc.h" +#include "i2c.h" +#include "Flash.h" +#include "cdms_sd.h" +#include "pinconfig.h" + + +Serial hk_cdms(USBTX, USBRX); +//DigitalOut Select_Lines_C[]={PIN85,PIN84,PIN39,PIN38}; //to mux on IF board,from LSB(Select_Lines_C[3]) to MSB(Select_Lines_C[0]) +DigitalOut Select_Lines_C[]={D7,D6,D5,D4}; +AnalogIn Temperature_voltage_Input(PIN53); //output from IF mux +//AnalogIn Sensor_Input(PIN53); //output from temperature sensor on CDMS + + +void FCTN_CDMS_HK_MAIN() + +{ + CDMS_HK_STATUS=(CDMS_HK_STATUS)|(HK_MAIN_STATUS); + + hk_cdms.printf(" \r\nCDMS HK entered Verify COM RX RSSI >0.4 \r\n"); + + int HK_I2C; + char BAE_HK[73]; + FCTN_I2C_READ(BAE_HK,73); + printf("BAE_HK=%s",BAE_HK); + //FCTN_I2C_READ(BAE_HK); + /*if(HK_I2C==0) + { + if(Power_level!=0) + { + printf("Update Power_level to 0 in Flash"); + } + Att_level=0; + CDMS_HK_STATUS=(CDMS_HK_STATUS)|(HK_BAE_ERR_I2C); + CDMS_HK_STATUS=(CDMS_HK_STATUS)&(~(HK_MAIN_STATUS)); + }**/ + + // printf("BAE HK is %s",BAE_HK); + uint64_t time=FCTN_CDMS_RD_RTC(); + char tree[61]; + hk_cdms.printf("i am done\r\n"); + uint8_t* data; + tree[0]=(char)(time>>(56))&(0xFF); + tree[1]=(char)(time>>(48))&(0xFF); + tree[2]=(char)(time>>(40))&(0xFF); + tree[3]=(char)(time>>(32))&(0xFF); + tree[4]=(char)(time>>(24))&(0xFF); + tree[5]=(char)(time>>(16))&(0xFF); + tree[6]=(char)(time>>(8))&(0xFF); + tree[7]=(char)(time)&(0xFF); + for(int i=0;i<73;i++) + { + tree[i+8]=BAE_HK[i]; + } + printf("Hope u r alive \r\n"); + data=(uint8_t*)tree; + + uint8_t fsc=FCTN_SD_MNGR(0x3); + printf("FSC where SD is written is %d\r\n",fsc); + int a=SD_WRITE(data,0x00000012,0x3); + printf("Result of writing is %d \r\n",a); + //BCN long frame ??? + CDMS_HK_STATUS=(CDMS_HK_STATUS)&(~(HK_MAIN_STATUS)); + hk_cdms.printf("let me know the truth\r\n"); +} + + + +int quantiz(float l_start,float l_step,float l_x) // accepts min and measured values and step->quantises on a scale 0-15..(4 bit quantisation) +{ + int l_y = (l_x - l_start)/l_step; + + if(l_y <= 0) + l_y = 0; + + if(l_y >= 15) + l_y = 15; + + return l_y; +} + +Sensor_Data Sensor; +Sensor_Data_Quantised Sensor_Quantised; + +char* FCTN_CDMS_HK() +{ + char CDMS_HK_DATA[8]; + float l_resistance_thermistor; //declaration of variables + float l_voltage_thermistor; + float l_Payload_voltage; + int l_Loop_Iterator = 0; + int l_Select_Line_Iterator = 3; + + for(l_Loop_Iterator = 0; l_Loop_Iterator < 16; l_Loop_Iterator++) + { + + l_voltage_thermistor = Temperature_voltage_Input.read()*3.3; //voltage across thermistor + l_resistance_thermistor = 24000*l_voltage_thermistor/(3.3 - l_voltage_thermistor); //resistance of thermistor + l_Payload_voltage = Temperature_voltage_Input.read()*3.3; + + Sensor.l_Temperature_thermistor[(l_Loop_Iterator)] = 0.00000004*l_resistance_thermistor*l_resistance_thermistor - 0.0039*l_resistance_thermistor + 347.97; + Sensor.l_Temperature_sensor[l_Loop_Iterator] = (-90.7*3.3*Temperature_voltage_Input.read() + 190.1543); + + if(l_Loop_Iterator % 2 == 0) + { + if(l_Loop_Iterator < 4) + Sensor_Quantised.l_Temperature_thermistor[(l_Loop_Iterator)/2] = quantiz(tstart_thermistor,tstep_thermistor,Sensor.l_Temperature_thermistor[(l_Loop_Iterator)]); + + else + { + if(4 < l_Loop_Iterator < 14) + Sensor_Quantised.l_Payload_voltage[(l_Loop_Iterator)/2] = Sensor_Quantised.l_Payload_voltage[(l_Loop_Iterator)/2] <<4 + quantiz(tstart,tstep,Sensor.l_Payload_voltage[l_Loop_Iterator]); + + else + Sensor_Quantised.l_Temperature_sensor[(l_Loop_Iterator)/2] = quantiz(tstart,tstep,Sensor.l_Temperature_sensor[l_Loop_Iterator]); + } + } + + else + { + + if(l_Loop_Iterator < 4) + Sensor_Quantised.l_Temperature_thermistor[(l_Loop_Iterator)/2] = Sensor_Quantised.l_Temperature_thermistor[(l_Loop_Iterator)/2] <<4 + quantiz(tstart_thermistor,tstep_thermistor,Sensor.l_Temperature_thermistor[l_Loop_Iterator]); + + else + { + if(4 < l_Loop_Iterator < 14) + Sensor_Quantised.l_Payload_voltage[(l_Loop_Iterator)/2] = quantiz(tstart,tstep,Sensor.l_Payload_voltage[l_Loop_Iterator]); + + else + Sensor_Quantised.l_Temperature_sensor[(l_Loop_Iterator)/2] = Sensor_Quantised.l_Temperature_sensor[(l_Loop_Iterator)/2] <<4 + quantiz(tstart,tstep,Sensor.l_Temperature_sensor[l_Loop_Iterator]); + + } + } + + + + // The following lines are used to iterate the select lines from 0 to 15 + for(l_Select_Line_Iterator = 3;l_Select_Line_Iterator >= 0;l_Select_Line_Iterator--) + { + if(Select_Lines_C[l_Select_Line_Iterator] == 0) + { + Select_Lines_C[l_Select_Line_Iterator] = 1; + break; + } + else Select_Lines_C[l_Select_Line_Iterator] = 0; + printf("%d\n",l_Select_Line_Iterator); + } + + wait_us(10.0); // A delay of 10 microseconds between each sensor output. Can be changed. + } + printf("vol %f temp %f",Temperature_voltage_Input.read()*3.3,-90.7*3.3*Temperature_voltage_Input.read() + 190.1543 ); + printf("CDMS_HK Data is Temperature_sensor=%s, l_Temperature_thermistor=%s, Payload_voltage=%s ",Sensor_Quantised.l_Temperature_sensor,Sensor_Quantised.l_Temperature_thermistor,Sensor_Quantised.l_Payload_voltage); + strcpy (CDMS_HK_DATA,Sensor_Quantised.l_Temperature_sensor); + strcat (CDMS_HK_DATA,Sensor_Quantised.l_Temperature_thermistor); + strcat (CDMS_HK_DATA,Sensor_Quantised.l_Payload_voltage); + return(CDMS_HK_DATA); +} + + +