cdms_update
Dependencies: FreescaleIAP mbed-rtos mbed
Fork of CDMS_SD_MNG_OVERDRIVE by
CDMS_HK.cpp
00001 #include "Flags.h" 00002 #include "CDMS_HK.h" 00003 #include "mbed.h" 00004 #include "cdms_rtc.h" 00005 #include "i2c.h" 00006 #include "Flash.h" 00007 #include "cdms_sd.h" 00008 #include "pinconfig.h" 00009 00010 00011 Serial hk_cdms(USBTX, USBRX); 00012 //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]) 00013 DigitalOut Select_Lines_C[]={D7,D6,D5,D4}; 00014 AnalogIn Temperature_voltage_Input(PIN53); //output from IF mux 00015 //AnalogIn Sensor_Input(PIN53); //output from temperature sensor on CDMS 00016 00017 00018 void FCTN_CDMS_HK_MAIN() 00019 00020 { 00021 CDMS_HK_STATUS=(CDMS_HK_STATUS)|(HK_MAIN_STATUS); 00022 00023 hk_cdms.printf(" \r\nCDMS HK entered Verify COM RX RSSI >0.4 \r\n"); 00024 00025 int HK_I2C; 00026 char BAE_HK[73]; 00027 FCTN_I2C_READ(BAE_HK,73); 00028 printf("BAE_HK=%s",BAE_HK); 00029 //FCTN_I2C_READ(BAE_HK); 00030 /*if(HK_I2C==0) 00031 { 00032 if(Power_level!=0) 00033 { 00034 printf("Update Power_level to 0 in Flash"); 00035 } 00036 Att_level=0; 00037 CDMS_HK_STATUS=(CDMS_HK_STATUS)|(HK_BAE_ERR_I2C); 00038 CDMS_HK_STATUS=(CDMS_HK_STATUS)&(~(HK_MAIN_STATUS)); 00039 }**/ 00040 00041 // printf("BAE HK is %s",BAE_HK); 00042 uint64_t time=FCTN_CDMS_RD_RTC(); 00043 char tree[61]; 00044 hk_cdms.printf("i am done\r\n"); 00045 uint8_t* data; 00046 tree[0]=(char)(time>>(56))&(0xFF); 00047 tree[1]=(char)(time>>(48))&(0xFF); 00048 tree[2]=(char)(time>>(40))&(0xFF); 00049 tree[3]=(char)(time>>(32))&(0xFF); 00050 tree[4]=(char)(time>>(24))&(0xFF); 00051 tree[5]=(char)(time>>(16))&(0xFF); 00052 tree[6]=(char)(time>>(8))&(0xFF); 00053 tree[7]=(char)(time)&(0xFF); 00054 for(int i=0;i<73;i++) 00055 { 00056 tree[i+8]=BAE_HK[i]; 00057 } 00058 printf("Hope u r alive \r\n"); 00059 data=(uint8_t*)tree; 00060 00061 uint8_t fsc=FCTN_SD_MNGR(0x3); 00062 printf("FSC where SD is written is %d\r\n",fsc); 00063 int a=SD_WRITE(data,0x00000012,0x3); 00064 printf("Result of writing is %d \r\n",a); 00065 //BCN long frame ??? 00066 CDMS_HK_STATUS=(CDMS_HK_STATUS)&(~(HK_MAIN_STATUS)); 00067 hk_cdms.printf("let me know the truth\r\n"); 00068 } 00069 00070 00071 00072 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) 00073 { 00074 int l_y = (l_x - l_start)/l_step; 00075 00076 if(l_y <= 0) 00077 l_y = 0; 00078 00079 if(l_y >= 15) 00080 l_y = 15; 00081 00082 return l_y; 00083 } 00084 00085 Sensor_Data Sensor; 00086 Sensor_Data_Quantised Sensor_Quantised; 00087 00088 char* FCTN_CDMS_HK() 00089 { 00090 char CDMS_HK_DATA[8]; 00091 float l_resistance_thermistor; //declaration of variables 00092 float l_voltage_thermistor; 00093 float l_Payload_voltage; 00094 int l_Loop_Iterator = 0; 00095 int l_Select_Line_Iterator = 3; 00096 00097 for(l_Loop_Iterator = 0; l_Loop_Iterator < 16; l_Loop_Iterator++) 00098 { 00099 00100 l_voltage_thermistor = Temperature_voltage_Input.read()*3.3; //voltage across thermistor 00101 l_resistance_thermistor = 24000*l_voltage_thermistor/(3.3 - l_voltage_thermistor); //resistance of thermistor 00102 l_Payload_voltage = Temperature_voltage_Input.read()*3.3; 00103 00104 Sensor.l_Temperature_thermistor[(l_Loop_Iterator)] = 0.00000004*l_resistance_thermistor*l_resistance_thermistor - 0.0039*l_resistance_thermistor + 347.97; 00105 Sensor.l_Temperature_sensor[l_Loop_Iterator] = (-90.7*3.3*Temperature_voltage_Input.read() + 190.1543); 00106 00107 if(l_Loop_Iterator % 2 == 0) 00108 { 00109 if(l_Loop_Iterator < 4) 00110 Sensor_Quantised.l_Temperature_thermistor[(l_Loop_Iterator)/2] = quantiz(tstart_thermistor,tstep_thermistor,Sensor.l_Temperature_thermistor[(l_Loop_Iterator)]); 00111 00112 else 00113 { 00114 if(4 < l_Loop_Iterator < 14) 00115 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]); 00116 00117 else 00118 Sensor_Quantised.l_Temperature_sensor[(l_Loop_Iterator)/2] = quantiz(tstart,tstep,Sensor.l_Temperature_sensor[l_Loop_Iterator]); 00119 } 00120 } 00121 00122 else 00123 { 00124 00125 if(l_Loop_Iterator < 4) 00126 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]); 00127 00128 else 00129 { 00130 if(4 < l_Loop_Iterator < 14) 00131 Sensor_Quantised.l_Payload_voltage[(l_Loop_Iterator)/2] = quantiz(tstart,tstep,Sensor.l_Payload_voltage[l_Loop_Iterator]); 00132 00133 else 00134 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]); 00135 00136 } 00137 } 00138 00139 00140 00141 // The following lines are used to iterate the select lines from 0 to 15 00142 for(l_Select_Line_Iterator = 3;l_Select_Line_Iterator >= 0;l_Select_Line_Iterator--) 00143 { 00144 if(Select_Lines_C[l_Select_Line_Iterator] == 0) 00145 { 00146 Select_Lines_C[l_Select_Line_Iterator] = 1; 00147 break; 00148 } 00149 else Select_Lines_C[l_Select_Line_Iterator] = 0; 00150 printf("%d\n",l_Select_Line_Iterator); 00151 } 00152 00153 wait_us(10.0); // A delay of 10 microseconds between each sensor output. Can be changed. 00154 } 00155 printf("vol %f temp %f",Temperature_voltage_Input.read()*3.3,-90.7*3.3*Temperature_voltage_Input.read() + 190.1543 ); 00156 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); 00157 strcpy (CDMS_HK_DATA,Sensor_Quantised.l_Temperature_sensor); 00158 strcat (CDMS_HK_DATA,Sensor_Quantised.l_Temperature_thermistor); 00159 strcat (CDMS_HK_DATA,Sensor_Quantised.l_Payload_voltage); 00160 return(CDMS_HK_DATA); 00161 } 00162 00163 00164
Generated on Thu Jul 14 2022 03:00:44 by 1.7.2