Pradeep Kotipalli
/
cdms_16thjune
hk
Fork of vr1_0CDMS_1_0 by
HK_CDMS.cpp@6:1f8dbe33c66a, 2015-06-16 (annotated)
- Committer:
- pradeepvk2208
- Date:
- Tue Jun 16 16:37:37 2015 +0000
- Revision:
- 6:1f8dbe33c66a
cdmshk
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
pradeepvk2208 | 6:1f8dbe33c66a | 1 | #include "HK_CDMS.h" |
pradeepvk2208 | 6:1f8dbe33c66a | 2 | #include "pin_config.h" |
pradeepvk2208 | 6:1f8dbe33c66a | 3 | |
pradeepvk2208 | 6:1f8dbe33c66a | 4 | |
pradeepvk2208 | 6:1f8dbe33c66a | 5 | Serial hk_cdms(USBTX, USBRX); |
pradeepvk2208 | 6:1f8dbe33c66a | 6 | 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 | 6:1f8dbe33c66a | 7 | |
pradeepvk2208 | 6:1f8dbe33c66a | 8 | AnalogIn Temperature_voltage_Input(PIN53); //output from IF mux |
pradeepvk2208 | 6:1f8dbe33c66a | 9 | AnalogIn Sensor_Input(PIN53); //output from temperature sensor on CDMS |
pradeepvk2208 | 6:1f8dbe33c66a | 10 | |
pradeepvk2208 | 6:1f8dbe33c66a | 11 | |
pradeepvk2208 | 6:1f8dbe33c66a | 12 | void FCTN_CDMS_HK_INIT() |
pradeepvk2208 | 6:1f8dbe33c66a | 13 | { |
pradeepvk2208 | 6:1f8dbe33c66a | 14 | Select_Lines_C[0] = Select_Lines_C[1] = Select_Lines_C[2] = Select_Lines_C[3] = 0; //initialisation of variables |
pradeepvk2208 | 6:1f8dbe33c66a | 15 | |
pradeepvk2208 | 6:1f8dbe33c66a | 16 | } |
pradeepvk2208 | 6:1f8dbe33c66a | 17 | |
pradeepvk2208 | 6:1f8dbe33c66a | 18 | 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 | 6:1f8dbe33c66a | 19 | { |
pradeepvk2208 | 6:1f8dbe33c66a | 20 | int l_y = (l_x - l_start)/l_step; |
pradeepvk2208 | 6:1f8dbe33c66a | 21 | |
pradeepvk2208 | 6:1f8dbe33c66a | 22 | if(l_y <= 0) |
pradeepvk2208 | 6:1f8dbe33c66a | 23 | l_y = 0; |
pradeepvk2208 | 6:1f8dbe33c66a | 24 | |
pradeepvk2208 | 6:1f8dbe33c66a | 25 | if(l_y >= 15) |
pradeepvk2208 | 6:1f8dbe33c66a | 26 | l_y = 15; |
pradeepvk2208 | 6:1f8dbe33c66a | 27 | |
pradeepvk2208 | 6:1f8dbe33c66a | 28 | return l_y; |
pradeepvk2208 | 6:1f8dbe33c66a | 29 | } |
pradeepvk2208 | 6:1f8dbe33c66a | 30 | |
pradeepvk2208 | 6:1f8dbe33c66a | 31 | Sensor_Data Sensor; |
pradeepvk2208 | 6:1f8dbe33c66a | 32 | Sensor_Data_Quantised Sensor_Quantised; |
pradeepvk2208 | 6:1f8dbe33c66a | 33 | |
pradeepvk2208 | 6:1f8dbe33c66a | 34 | char* FCTN_CDMS_HK_MAIN() |
pradeepvk2208 | 6:1f8dbe33c66a | 35 | { |
pradeepvk2208 | 6:1f8dbe33c66a | 36 | float l_resistance_thermistor; //declaration of variables |
pradeepvk2208 | 6:1f8dbe33c66a | 37 | float l_voltage_thermistor; |
pradeepvk2208 | 6:1f8dbe33c66a | 38 | float l_Payload_voltage; |
pradeepvk2208 | 6:1f8dbe33c66a | 39 | int l_Loop_Iterator = 0; |
pradeepvk2208 | 6:1f8dbe33c66a | 40 | int l_Select_Line_Iterator = 3; |
pradeepvk2208 | 6:1f8dbe33c66a | 41 | |
pradeepvk2208 | 6:1f8dbe33c66a | 42 | for(l_Loop_Iterator = 0; l_Loop_Iterator < 16; l_Loop_Iterator++) |
pradeepvk2208 | 6:1f8dbe33c66a | 43 | { |
pradeepvk2208 | 6:1f8dbe33c66a | 44 | |
pradeepvk2208 | 6:1f8dbe33c66a | 45 | l_voltage_thermistor = Temperature_voltage_Input.read()*3.3; //voltage across thermistor |
pradeepvk2208 | 6:1f8dbe33c66a | 46 | l_resistance_thermistor = 24000*l_voltage_thermistor/(3.3 - l_voltage_thermistor); //resistance of thermistor |
pradeepvk2208 | 6:1f8dbe33c66a | 47 | l_Payload_voltage = Temperature_voltage_Input.read()*3.3; |
pradeepvk2208 | 6:1f8dbe33c66a | 48 | |
pradeepvk2208 | 6:1f8dbe33c66a | 49 | Sensor.l_Temperature_thermistor[(l_Loop_Iterator)] = 0.00000004*l_resistance_thermistor*l_resistance_thermistor - 0.0039*l_resistance_thermistor + 347.97; |
pradeepvk2208 | 6:1f8dbe33c66a | 50 | Sensor.l_Temperature_sensor[l_Loop_Iterator] = (-90.7*3.3*Temperature_voltage_Input.read() + 190.1543); |
pradeepvk2208 | 6:1f8dbe33c66a | 51 | |
pradeepvk2208 | 6:1f8dbe33c66a | 52 | if(l_Loop_Iterator % 2 == 0) |
pradeepvk2208 | 6:1f8dbe33c66a | 53 | { |
pradeepvk2208 | 6:1f8dbe33c66a | 54 | if(l_Loop_Iterator < 4) |
pradeepvk2208 | 6:1f8dbe33c66a | 55 | Sensor_Quantised.l_Temperature_thermistor[(l_Loop_Iterator)/2] = quantiz(tstart_thermistor,tstep_thermistor,Sensor.l_Temperature_thermistor[(l_Loop_Iterator)]); |
pradeepvk2208 | 6:1f8dbe33c66a | 56 | |
pradeepvk2208 | 6:1f8dbe33c66a | 57 | else |
pradeepvk2208 | 6:1f8dbe33c66a | 58 | { |
pradeepvk2208 | 6:1f8dbe33c66a | 59 | if(4 < l_Loop_Iterator < 14) |
pradeepvk2208 | 6:1f8dbe33c66a | 60 | 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 | 6:1f8dbe33c66a | 61 | |
pradeepvk2208 | 6:1f8dbe33c66a | 62 | else |
pradeepvk2208 | 6:1f8dbe33c66a | 63 | Sensor_Quantised.l_Temperature_sensor[(l_Loop_Iterator)/2] = quantiz(tstart,tstep,Sensor.l_Temperature_sensor[l_Loop_Iterator]); |
pradeepvk2208 | 6:1f8dbe33c66a | 64 | } |
pradeepvk2208 | 6:1f8dbe33c66a | 65 | } |
pradeepvk2208 | 6:1f8dbe33c66a | 66 | |
pradeepvk2208 | 6:1f8dbe33c66a | 67 | else |
pradeepvk2208 | 6:1f8dbe33c66a | 68 | { |
pradeepvk2208 | 6:1f8dbe33c66a | 69 | |
pradeepvk2208 | 6:1f8dbe33c66a | 70 | if(l_Loop_Iterator < 4) |
pradeepvk2208 | 6:1f8dbe33c66a | 71 | 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 | 6:1f8dbe33c66a | 72 | |
pradeepvk2208 | 6:1f8dbe33c66a | 73 | else |
pradeepvk2208 | 6:1f8dbe33c66a | 74 | { |
pradeepvk2208 | 6:1f8dbe33c66a | 75 | if(4 < l_Loop_Iterator < 14) |
pradeepvk2208 | 6:1f8dbe33c66a | 76 | Sensor_Quantised.l_Payload_voltage[(l_Loop_Iterator)/2] = quantiz(tstart,tstep,Sensor.l_Payload_voltage[l_Loop_Iterator]); |
pradeepvk2208 | 6:1f8dbe33c66a | 77 | |
pradeepvk2208 | 6:1f8dbe33c66a | 78 | else |
pradeepvk2208 | 6:1f8dbe33c66a | 79 | 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 | 6:1f8dbe33c66a | 80 | |
pradeepvk2208 | 6:1f8dbe33c66a | 81 | } |
pradeepvk2208 | 6:1f8dbe33c66a | 82 | } |
pradeepvk2208 | 6:1f8dbe33c66a | 83 | |
pradeepvk2208 | 6:1f8dbe33c66a | 84 | |
pradeepvk2208 | 6:1f8dbe33c66a | 85 | |
pradeepvk2208 | 6:1f8dbe33c66a | 86 | // The following lines are used to iterate the select lines from 0 to 15 |
pradeepvk2208 | 6:1f8dbe33c66a | 87 | for(l_Select_Line_Iterator = 3;l_Select_Line_Iterator >= 0;l_Select_Line_Iterator--) |
pradeepvk2208 | 6:1f8dbe33c66a | 88 | { |
pradeepvk2208 | 6:1f8dbe33c66a | 89 | if(Select_Lines_C[l_Select_Line_Iterator] == 0) |
pradeepvk2208 | 6:1f8dbe33c66a | 90 | { |
pradeepvk2208 | 6:1f8dbe33c66a | 91 | Select_Lines_C[l_Select_Line_Iterator] = 1; |
pradeepvk2208 | 6:1f8dbe33c66a | 92 | break; |
pradeepvk2208 | 6:1f8dbe33c66a | 93 | } |
pradeepvk2208 | 6:1f8dbe33c66a | 94 | else Select_Lines_C[l_Select_Line_Iterator] = 0; |
pradeepvk2208 | 6:1f8dbe33c66a | 95 | printf("%d\n",l_Select_Line_Iterator); |
pradeepvk2208 | 6:1f8dbe33c66a | 96 | } |
pradeepvk2208 | 6:1f8dbe33c66a | 97 | |
pradeepvk2208 | 6:1f8dbe33c66a | 98 | wait_us(10.0); // A delay of 10 microseconds between each sensor output. Can be changed. |
pradeepvk2208 | 6:1f8dbe33c66a | 99 | } |
pradeepvk2208 | 6:1f8dbe33c66a | 100 | |
pradeepvk2208 | 6:1f8dbe33c66a | 101 | 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 | 6:1f8dbe33c66a | 102 | strcpy (CDMS_HK_DATA,Sensor_Quantised.l_Temperature_sensor); |
pradeepvk2208 | 6:1f8dbe33c66a | 103 | strcat (CDMS_HK_DATA,Sensor_Quantised.l_Temperature_thermistor); |
pradeepvk2208 | 6:1f8dbe33c66a | 104 | strcat (CDMS_HK_DATA,Sensor_Quantised.l_Payload_voltage); |
pradeepvk2208 | 6:1f8dbe33c66a | 105 | return(CDMS_HK_DATA); |
pradeepvk2208 | 6:1f8dbe33c66a | 106 | } |