cdms_update
Dependencies: FreescaleIAP mbed-rtos mbed
Fork of CDMS_SD_MNG_OVERDRIVE by
CDMS_HK.cpp@1:ad3b8a8032e2, 2016-01-21 (annotated)
- Committer:
- pradeepvk2208
- Date:
- Thu Jan 21 14:46:28 2016 +0000
- Revision:
- 1:ad3b8a8032e2
cdms_updated
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
pradeepvk2208 | 1:ad3b8a8032e2 | 1 | #include "Flags.h" |
pradeepvk2208 | 1:ad3b8a8032e2 | 2 | #include "CDMS_HK.h" |
pradeepvk2208 | 1:ad3b8a8032e2 | 3 | #include "mbed.h" |
pradeepvk2208 | 1:ad3b8a8032e2 | 4 | #include "cdms_rtc.h" |
pradeepvk2208 | 1:ad3b8a8032e2 | 5 | #include "i2c.h" |
pradeepvk2208 | 1:ad3b8a8032e2 | 6 | #include "Flash.h" |
pradeepvk2208 | 1:ad3b8a8032e2 | 7 | #include "cdms_sd.h" |
pradeepvk2208 | 1:ad3b8a8032e2 | 8 | #include "pinconfig.h" |
pradeepvk2208 | 1:ad3b8a8032e2 | 9 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 10 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 11 | Serial hk_cdms(USBTX, USBRX); |
pradeepvk2208 | 1:ad3b8a8032e2 | 12 | //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]) |
pradeepvk2208 | 1:ad3b8a8032e2 | 13 | DigitalOut Select_Lines_C[]={D7,D6,D5,D4}; |
pradeepvk2208 | 1:ad3b8a8032e2 | 14 | AnalogIn Temperature_voltage_Input(PIN53); //output from IF mux |
pradeepvk2208 | 1:ad3b8a8032e2 | 15 | //AnalogIn Sensor_Input(PIN53); //output from temperature sensor on CDMS |
pradeepvk2208 | 1:ad3b8a8032e2 | 16 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 17 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 18 | void FCTN_CDMS_HK_MAIN() |
pradeepvk2208 | 1:ad3b8a8032e2 | 19 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 20 | { |
pradeepvk2208 | 1:ad3b8a8032e2 | 21 | CDMS_HK_STATUS=(CDMS_HK_STATUS)|(HK_MAIN_STATUS); |
pradeepvk2208 | 1:ad3b8a8032e2 | 22 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 23 | hk_cdms.printf(" \r\nCDMS HK entered Verify COM RX RSSI >0.4 \r\n"); |
pradeepvk2208 | 1:ad3b8a8032e2 | 24 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 25 | int HK_I2C; |
pradeepvk2208 | 1:ad3b8a8032e2 | 26 | char BAE_HK[73]; |
pradeepvk2208 | 1:ad3b8a8032e2 | 27 | FCTN_I2C_READ(BAE_HK,73); |
pradeepvk2208 | 1:ad3b8a8032e2 | 28 | printf("BAE_HK=%s",BAE_HK); |
pradeepvk2208 | 1:ad3b8a8032e2 | 29 | //FCTN_I2C_READ(BAE_HK); |
pradeepvk2208 | 1:ad3b8a8032e2 | 30 | /*if(HK_I2C==0) |
pradeepvk2208 | 1:ad3b8a8032e2 | 31 | { |
pradeepvk2208 | 1:ad3b8a8032e2 | 32 | if(Power_level!=0) |
pradeepvk2208 | 1:ad3b8a8032e2 | 33 | { |
pradeepvk2208 | 1:ad3b8a8032e2 | 34 | printf("Update Power_level to 0 in Flash"); |
pradeepvk2208 | 1:ad3b8a8032e2 | 35 | } |
pradeepvk2208 | 1:ad3b8a8032e2 | 36 | Att_level=0; |
pradeepvk2208 | 1:ad3b8a8032e2 | 37 | CDMS_HK_STATUS=(CDMS_HK_STATUS)|(HK_BAE_ERR_I2C); |
pradeepvk2208 | 1:ad3b8a8032e2 | 38 | CDMS_HK_STATUS=(CDMS_HK_STATUS)&(~(HK_MAIN_STATUS)); |
pradeepvk2208 | 1:ad3b8a8032e2 | 39 | }**/ |
pradeepvk2208 | 1:ad3b8a8032e2 | 40 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 41 | // printf("BAE HK is %s",BAE_HK); |
pradeepvk2208 | 1:ad3b8a8032e2 | 42 | uint64_t time=FCTN_CDMS_RD_RTC(); |
pradeepvk2208 | 1:ad3b8a8032e2 | 43 | char tree[61]; |
pradeepvk2208 | 1:ad3b8a8032e2 | 44 | hk_cdms.printf("i am done\r\n"); |
pradeepvk2208 | 1:ad3b8a8032e2 | 45 | uint8_t* data; |
pradeepvk2208 | 1:ad3b8a8032e2 | 46 | tree[0]=(char)(time>>(56))&(0xFF); |
pradeepvk2208 | 1:ad3b8a8032e2 | 47 | tree[1]=(char)(time>>(48))&(0xFF); |
pradeepvk2208 | 1:ad3b8a8032e2 | 48 | tree[2]=(char)(time>>(40))&(0xFF); |
pradeepvk2208 | 1:ad3b8a8032e2 | 49 | tree[3]=(char)(time>>(32))&(0xFF); |
pradeepvk2208 | 1:ad3b8a8032e2 | 50 | tree[4]=(char)(time>>(24))&(0xFF); |
pradeepvk2208 | 1:ad3b8a8032e2 | 51 | tree[5]=(char)(time>>(16))&(0xFF); |
pradeepvk2208 | 1:ad3b8a8032e2 | 52 | tree[6]=(char)(time>>(8))&(0xFF); |
pradeepvk2208 | 1:ad3b8a8032e2 | 53 | tree[7]=(char)(time)&(0xFF); |
pradeepvk2208 | 1:ad3b8a8032e2 | 54 | for(int i=0;i<73;i++) |
pradeepvk2208 | 1:ad3b8a8032e2 | 55 | { |
pradeepvk2208 | 1:ad3b8a8032e2 | 56 | tree[i+8]=BAE_HK[i]; |
pradeepvk2208 | 1:ad3b8a8032e2 | 57 | } |
pradeepvk2208 | 1:ad3b8a8032e2 | 58 | printf("Hope u r alive \r\n"); |
pradeepvk2208 | 1:ad3b8a8032e2 | 59 | data=(uint8_t*)tree; |
pradeepvk2208 | 1:ad3b8a8032e2 | 60 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 61 | uint8_t fsc=FCTN_SD_MNGR(0x3); |
pradeepvk2208 | 1:ad3b8a8032e2 | 62 | printf("FSC where SD is written is %d\r\n",fsc); |
pradeepvk2208 | 1:ad3b8a8032e2 | 63 | int a=SD_WRITE(data,0x00000012,0x3); |
pradeepvk2208 | 1:ad3b8a8032e2 | 64 | printf("Result of writing is %d \r\n",a); |
pradeepvk2208 | 1:ad3b8a8032e2 | 65 | //BCN long frame ??? |
pradeepvk2208 | 1:ad3b8a8032e2 | 66 | CDMS_HK_STATUS=(CDMS_HK_STATUS)&(~(HK_MAIN_STATUS)); |
pradeepvk2208 | 1:ad3b8a8032e2 | 67 | hk_cdms.printf("let me know the truth\r\n"); |
pradeepvk2208 | 1:ad3b8a8032e2 | 68 | } |
pradeepvk2208 | 1:ad3b8a8032e2 | 69 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 70 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 71 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 72 | 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) |
pradeepvk2208 | 1:ad3b8a8032e2 | 73 | { |
pradeepvk2208 | 1:ad3b8a8032e2 | 74 | int l_y = (l_x - l_start)/l_step; |
pradeepvk2208 | 1:ad3b8a8032e2 | 75 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 76 | if(l_y <= 0) |
pradeepvk2208 | 1:ad3b8a8032e2 | 77 | l_y = 0; |
pradeepvk2208 | 1:ad3b8a8032e2 | 78 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 79 | if(l_y >= 15) |
pradeepvk2208 | 1:ad3b8a8032e2 | 80 | l_y = 15; |
pradeepvk2208 | 1:ad3b8a8032e2 | 81 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 82 | return l_y; |
pradeepvk2208 | 1:ad3b8a8032e2 | 83 | } |
pradeepvk2208 | 1:ad3b8a8032e2 | 84 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 85 | Sensor_Data Sensor; |
pradeepvk2208 | 1:ad3b8a8032e2 | 86 | Sensor_Data_Quantised Sensor_Quantised; |
pradeepvk2208 | 1:ad3b8a8032e2 | 87 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 88 | char* FCTN_CDMS_HK() |
pradeepvk2208 | 1:ad3b8a8032e2 | 89 | { |
pradeepvk2208 | 1:ad3b8a8032e2 | 90 | char CDMS_HK_DATA[8]; |
pradeepvk2208 | 1:ad3b8a8032e2 | 91 | float l_resistance_thermistor; //declaration of variables |
pradeepvk2208 | 1:ad3b8a8032e2 | 92 | float l_voltage_thermistor; |
pradeepvk2208 | 1:ad3b8a8032e2 | 93 | float l_Payload_voltage; |
pradeepvk2208 | 1:ad3b8a8032e2 | 94 | int l_Loop_Iterator = 0; |
pradeepvk2208 | 1:ad3b8a8032e2 | 95 | int l_Select_Line_Iterator = 3; |
pradeepvk2208 | 1:ad3b8a8032e2 | 96 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 97 | for(l_Loop_Iterator = 0; l_Loop_Iterator < 16; l_Loop_Iterator++) |
pradeepvk2208 | 1:ad3b8a8032e2 | 98 | { |
pradeepvk2208 | 1:ad3b8a8032e2 | 99 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 100 | l_voltage_thermistor = Temperature_voltage_Input.read()*3.3; //voltage across thermistor |
pradeepvk2208 | 1:ad3b8a8032e2 | 101 | l_resistance_thermistor = 24000*l_voltage_thermistor/(3.3 - l_voltage_thermistor); //resistance of thermistor |
pradeepvk2208 | 1:ad3b8a8032e2 | 102 | l_Payload_voltage = Temperature_voltage_Input.read()*3.3; |
pradeepvk2208 | 1:ad3b8a8032e2 | 103 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 104 | Sensor.l_Temperature_thermistor[(l_Loop_Iterator)] = 0.00000004*l_resistance_thermistor*l_resistance_thermistor - 0.0039*l_resistance_thermistor + 347.97; |
pradeepvk2208 | 1:ad3b8a8032e2 | 105 | Sensor.l_Temperature_sensor[l_Loop_Iterator] = (-90.7*3.3*Temperature_voltage_Input.read() + 190.1543); |
pradeepvk2208 | 1:ad3b8a8032e2 | 106 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 107 | if(l_Loop_Iterator % 2 == 0) |
pradeepvk2208 | 1:ad3b8a8032e2 | 108 | { |
pradeepvk2208 | 1:ad3b8a8032e2 | 109 | if(l_Loop_Iterator < 4) |
pradeepvk2208 | 1:ad3b8a8032e2 | 110 | Sensor_Quantised.l_Temperature_thermistor[(l_Loop_Iterator)/2] = quantiz(tstart_thermistor,tstep_thermistor,Sensor.l_Temperature_thermistor[(l_Loop_Iterator)]); |
pradeepvk2208 | 1:ad3b8a8032e2 | 111 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 112 | else |
pradeepvk2208 | 1:ad3b8a8032e2 | 113 | { |
pradeepvk2208 | 1:ad3b8a8032e2 | 114 | if(4 < l_Loop_Iterator < 14) |
pradeepvk2208 | 1:ad3b8a8032e2 | 115 | 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]); |
pradeepvk2208 | 1:ad3b8a8032e2 | 116 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 117 | else |
pradeepvk2208 | 1:ad3b8a8032e2 | 118 | Sensor_Quantised.l_Temperature_sensor[(l_Loop_Iterator)/2] = quantiz(tstart,tstep,Sensor.l_Temperature_sensor[l_Loop_Iterator]); |
pradeepvk2208 | 1:ad3b8a8032e2 | 119 | } |
pradeepvk2208 | 1:ad3b8a8032e2 | 120 | } |
pradeepvk2208 | 1:ad3b8a8032e2 | 121 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 122 | else |
pradeepvk2208 | 1:ad3b8a8032e2 | 123 | { |
pradeepvk2208 | 1:ad3b8a8032e2 | 124 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 125 | if(l_Loop_Iterator < 4) |
pradeepvk2208 | 1:ad3b8a8032e2 | 126 | 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]); |
pradeepvk2208 | 1:ad3b8a8032e2 | 127 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 128 | else |
pradeepvk2208 | 1:ad3b8a8032e2 | 129 | { |
pradeepvk2208 | 1:ad3b8a8032e2 | 130 | if(4 < l_Loop_Iterator < 14) |
pradeepvk2208 | 1:ad3b8a8032e2 | 131 | Sensor_Quantised.l_Payload_voltage[(l_Loop_Iterator)/2] = quantiz(tstart,tstep,Sensor.l_Payload_voltage[l_Loop_Iterator]); |
pradeepvk2208 | 1:ad3b8a8032e2 | 132 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 133 | else |
pradeepvk2208 | 1:ad3b8a8032e2 | 134 | 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]); |
pradeepvk2208 | 1:ad3b8a8032e2 | 135 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 136 | } |
pradeepvk2208 | 1:ad3b8a8032e2 | 137 | } |
pradeepvk2208 | 1:ad3b8a8032e2 | 138 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 139 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 140 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 141 | // The following lines are used to iterate the select lines from 0 to 15 |
pradeepvk2208 | 1:ad3b8a8032e2 | 142 | for(l_Select_Line_Iterator = 3;l_Select_Line_Iterator >= 0;l_Select_Line_Iterator--) |
pradeepvk2208 | 1:ad3b8a8032e2 | 143 | { |
pradeepvk2208 | 1:ad3b8a8032e2 | 144 | if(Select_Lines_C[l_Select_Line_Iterator] == 0) |
pradeepvk2208 | 1:ad3b8a8032e2 | 145 | { |
pradeepvk2208 | 1:ad3b8a8032e2 | 146 | Select_Lines_C[l_Select_Line_Iterator] = 1; |
pradeepvk2208 | 1:ad3b8a8032e2 | 147 | break; |
pradeepvk2208 | 1:ad3b8a8032e2 | 148 | } |
pradeepvk2208 | 1:ad3b8a8032e2 | 149 | else Select_Lines_C[l_Select_Line_Iterator] = 0; |
pradeepvk2208 | 1:ad3b8a8032e2 | 150 | printf("%d\n",l_Select_Line_Iterator); |
pradeepvk2208 | 1:ad3b8a8032e2 | 151 | } |
pradeepvk2208 | 1:ad3b8a8032e2 | 152 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 153 | wait_us(10.0); // A delay of 10 microseconds between each sensor output. Can be changed. |
pradeepvk2208 | 1:ad3b8a8032e2 | 154 | } |
pradeepvk2208 | 1:ad3b8a8032e2 | 155 | printf("vol %f temp %f",Temperature_voltage_Input.read()*3.3,-90.7*3.3*Temperature_voltage_Input.read() + 190.1543 ); |
pradeepvk2208 | 1:ad3b8a8032e2 | 156 | 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); |
pradeepvk2208 | 1:ad3b8a8032e2 | 157 | strcpy (CDMS_HK_DATA,Sensor_Quantised.l_Temperature_sensor); |
pradeepvk2208 | 1:ad3b8a8032e2 | 158 | strcat (CDMS_HK_DATA,Sensor_Quantised.l_Temperature_thermistor); |
pradeepvk2208 | 1:ad3b8a8032e2 | 159 | strcat (CDMS_HK_DATA,Sensor_Quantised.l_Payload_voltage); |
pradeepvk2208 | 1:ad3b8a8032e2 | 160 | return(CDMS_HK_DATA); |
pradeepvk2208 | 1:ad3b8a8032e2 | 161 | } |
pradeepvk2208 | 1:ad3b8a8032e2 | 162 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 163 | |
pradeepvk2208 | 1:ad3b8a8032e2 | 164 |