jnlj

Dependencies:   mbed-rtos mbed

Fork of TFOX_CDMS_VR_1_0_WORKING by Team Fox

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers HK_CDMS.cpp Source File

HK_CDMS.cpp

00001 #include "HK_CDMS.h"
00002 #include "pin_config.h"
00003  
00004  
00005 Serial hk_cdms(USBTX, USBRX);
00006 //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])
00007 DigitalOut Select_Lines_C[]={D7,D6,D5,D4};
00008 AnalogIn Temperature_voltage_Input(PIN53);  //output from IF mux
00009 //AnalogIn Sensor_Input(PIN53);    //output from temperature sensor on CDMS
00010 char CDMS_HK_DATA[8];
00011  
00012 void FCTN_CDMS_HK_INIT()
00013 {
00014     Select_Lines_C[0] = Select_Lines_C[1] = Select_Lines_C[2] = Select_Lines_C[3] = 0;  //initialisation of variables
00015 }
00016  
00017 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)
00018 {
00019     int l_y = (l_x - l_start)/l_step;
00020         
00021     if(l_y <= 0)
00022             l_y = 0;
00023             
00024     if(l_y >= 15)
00025             l_y = 15;
00026             
00027     return l_y;
00028 } 
00029  
00030 Sensor_Data Sensor; 
00031 Sensor_Data_Quantised Sensor_Quantised;
00032  
00033 char* FCTN_CDMS_HK_MAIN()
00034 {
00035     float l_resistance_thermistor;  //declaration of variables
00036     float l_voltage_thermistor;
00037     float l_Payload_voltage;
00038     int l_Loop_Iterator = 0;
00039     int l_Select_Line_Iterator = 3;
00040  
00041     for(l_Loop_Iterator = 0; l_Loop_Iterator < 16; l_Loop_Iterator++)
00042     {
00043  
00044         l_voltage_thermistor = Temperature_voltage_Input.read()*3.3;       //voltage across thermistor
00045         l_resistance_thermistor = 24000*l_voltage_thermistor/(3.3 - l_voltage_thermistor);           //resistance of thermistor
00046         l_Payload_voltage = Temperature_voltage_Input.read()*3.3;
00047                
00048         Sensor.l_Temperature_thermistor[(l_Loop_Iterator)] = 0.00000004*l_resistance_thermistor*l_resistance_thermistor - 0.0039*l_resistance_thermistor + 347.97;
00049         Sensor.l_Temperature_sensor[l_Loop_Iterator] = (-90.7*3.3*Temperature_voltage_Input.read() + 190.1543);  
00050               
00051         if(l_Loop_Iterator % 2 == 0) 
00052         {
00053              if(l_Loop_Iterator < 4)
00054              Sensor_Quantised.l_Temperature_thermistor[(l_Loop_Iterator)/2] = quantiz(tstart_thermistor,tstep_thermistor,Sensor.l_Temperature_thermistor[(l_Loop_Iterator)]);
00055                
00056              else  
00057              {
00058                 if(4 < l_Loop_Iterator < 14)
00059                 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]); 
00060                 
00061                 else
00062                 Sensor_Quantised.l_Temperature_sensor[(l_Loop_Iterator)/2] = quantiz(tstart,tstep,Sensor.l_Temperature_sensor[l_Loop_Iterator]); 
00063              }
00064         }
00065                                               
00066         else
00067         {
00068             
00069             if(l_Loop_Iterator < 4)
00070             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]);
00071             
00072             else
00073             {
00074                 if(4 < l_Loop_Iterator < 14)
00075                 Sensor_Quantised.l_Payload_voltage[(l_Loop_Iterator)/2] = quantiz(tstart,tstep,Sensor.l_Payload_voltage[l_Loop_Iterator]);
00076                 
00077                 else
00078                 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]); 
00079         
00080             }
00081         }
00082     
00083        
00084           
00085        // The following lines are used to iterate the select lines from 0 to 15
00086        for(l_Select_Line_Iterator = 3;l_Select_Line_Iterator >= 0;l_Select_Line_Iterator--)
00087        {
00088             if(Select_Lines_C[l_Select_Line_Iterator] == 0)
00089             {
00090                 Select_Lines_C[l_Select_Line_Iterator] = 1;
00091                 break;
00092             }
00093             else Select_Lines_C[l_Select_Line_Iterator] = 0;
00094             printf("%d\n",l_Select_Line_Iterator);
00095        }
00096       
00097         wait_us(10.0); //  A delay of 10 microseconds between each sensor output. Can be changed.
00098     }
00099      printf("vol %f temp %f",Temperature_voltage_Input.read()*3.3,-90.7*3.3*Temperature_voltage_Input.read() + 190.1543 );
00100      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);
00101      strcpy (CDMS_HK_DATA,Sensor_Quantised.l_Temperature_sensor);
00102      strcat (CDMS_HK_DATA,Sensor_Quantised.l_Temperature_thermistor);
00103      strcat (CDMS_HK_DATA,Sensor_Quantised.l_Payload_voltage);
00104      return(CDMS_HK_DATA);
00105 }