hk

Dependencies:   mbed-rtos mbed

Fork of vr1_0CDMS_1_0 by Team Fox

Committer:
pradeepvk2208
Date:
Tue Jun 16 16:37:37 2015 +0000
Revision:
6:1f8dbe33c66a
cdmshk

Who changed what in which revision?

UserRevisionLine numberNew 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 }