sakthi priya amirtharaj / Mbed 2 deprecated pcb_test_v1_1_1

Dependencies:   mbed-rtos mbed

Fork of pcb_test_v1_1 by sakthi priya amirtharaj

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers HK.cpp Source File

HK.cpp

00001 #include "HK.h"
00002 #include "pin_config.h"
00003  
00004  
00005 //GPIO pins used=> D2-D12, A0-A1
00006 
00007 DigitalOut SelectLinesA[]={PIN43,PIN44,PIN45,PIN46};         //to mux1=>voltage mux , PTA 13-16 , CHNGE TO PIN43 LATER
00008 DigitalOut SelectLinesB[]={PIN56,PIN57,PIN58,PIN59};         //to mux2=>current mux(differential mux) , PTB 3,7,8,9
00009 DigitalOut SelectLinesC[]={PIN64,PIN65,PIN66,PIN67};         //to mux3=>temp mux   PTB 18-21
00010 
00011 //--------------------------------------------MSB is SelectLines[0],LSB is SelectLines[3]-------------------------------- 
00012 
00013 AnalogIn CurrentInput(PIN53);                                // output from Current Mux PTB0
00014 AnalogIn VoltageInput(PIN54);                                // output from Voltage Multiplexer  PTB1
00015 AnalogIn TemperatureInput(PIN55);                            /*PTB2 output from Temperature Multiplexer,thermistor Multiplexer- same multiplexer for both(lines 1-4 for thermistor,line 0 for temperature sensor)*/ 
00016 
00017 
00018 
00019 int quantiz(float start,float step,float x)                  // accepts min and measured values and step->quantises on a scale 0-15..(4 bit quantisation)
00020 {
00021     int y=(x-start)/step;
00022     if(y<=0)y=0;
00023     if(y>=15)y=15;
00024     return y;
00025 }
00026  
00027 void init_beacon(ShortBeacy* x,SensorDataQuantised y)  
00028 {
00029     (*x).Voltage[0]=2;                                       //quantised value
00030     (*x).Temp[0]=y.PanelTemperature[0];                      //quantised value
00031     (*x).Temp[1]=y.PanelTemperature[1];                      //quantised value
00032     (*x).AngularSpeed[0]=y.AngularSpeed[0];
00033     (*x).AngularSpeed[1]=y.AngularSpeed[1];
00034     
00035     (*x).SubsystemStatus[0]=145;                             //dummy values----------to be changed-------------------
00036     (*x).ErrorFlag[0]=3;                                     //dummy values----------to be changed-------------------
00037 }
00038 
00039 SensorData Sensor; 
00040 SensorDataQuantised SensorQuantised;
00041 ShortBeacy Shortbeacon;
00042 void FUNC_HK_MAIN()             
00043 {
00044     //define structure variables    
00045  
00046     //initialise all selectlines to zeroes->1st line of muxes selected
00047     SelectLinesA[0]=SelectLinesA[1]=SelectLinesA[2]=SelectLinesA[3]=0;
00048     SelectLinesB[0]=SelectLinesB[1]=SelectLinesB[2]=0;
00049     SelectLinesC[0]=SelectLinesC[1]=SelectLinesC[2]=SelectLinesC[3]=0;
00050     
00051     int LoopIterator;
00052     int SelectLineIterator;
00053     
00054     float resistance_thermistor,voltage_thermistor;//for thermistor
00055  
00056     //measurement from voltage sensor=> 16 sensors in place
00057     for(LoopIterator=0; LoopIterator<16; LoopIterator++) 
00058     {       
00059         //read the sensor values and stores them in 'SensorData' structure's variable 'Sensor'
00060         Sensor.Voltage[LoopIterator]=(VoltageInput.read()*3.3*5.545454);//resistors in voltage divider=>15Mohm,3.3Mohm
00061                
00062         if(LoopIterator%2==0)
00063             SensorQuantised.Voltage[LoopIterator/2]=quantiz(vstart,vstep,Sensor.Voltage[LoopIterator]);
00064                            
00065         else
00066             SensorQuantised.Voltage[(LoopIterator)/2]=SensorQuantised.Voltage[(LoopIterator)/2]<<4+quantiz(vstart,vstep,Sensor.Voltage[LoopIterator]);
00067             
00068         //iterate the select lines from 0 to 15
00069         for(SelectLineIterator=3;SelectLineIterator>=0;SelectLineIterator--)
00070         {
00071             if(SelectLinesA[SelectLineIterator]==0)
00072             {
00073                 SelectLinesA[SelectLineIterator]=1;
00074                 break;
00075             }
00076             else SelectLinesA[SelectLineIterator]=0;
00077         }
00078     
00079         wait_us(10.0); //  A delay of 10 microseconds between each sensor output. Can be changed.
00080     }
00081  
00082  
00083     //measurement from current sensor=>  8 sensors in place 
00084     for(LoopIterator=0; LoopIterator<8; LoopIterator++) 
00085     {       
00086         //read the sensor values and stores them in 'SensorData' structure variable 'Sensor'
00087         Sensor.Current[LoopIterator]=(CurrentInput.read()*3.3/(50*rsens));
00088         if(LoopIterator%2==0)
00089             SensorQuantised.Current[LoopIterator/2]=quantiz(cstart,cstep,Sensor.Current[LoopIterator]);
00090         else
00091             SensorQuantised.Current[(LoopIterator)/2]=SensorQuantised.Current[(LoopIterator)/2]<<4+quantiz(cstart,cstep,Sensor.Current[LoopIterator]);
00092 
00093         //iterate the select lines from 0 to 7
00094         for(SelectLineIterator=2;SelectLineIterator>=0;SelectLineIterator--)
00095         {
00096             if(SelectLinesB[SelectLineIterator]==0)
00097             {
00098                 SelectLinesB[SelectLineIterator]=1;
00099                 break;
00100             }
00101             else SelectLinesB[SelectLineIterator]=0;
00102     
00103         }
00104     
00105         wait_us(10.0); //  A delay of 10 microseconds between each sensor output. Can be changed.
00106     }
00107     
00108     
00109     //measurement of temperature
00110     //temperature measurement=> 4 thermistors, 1 temperature sensor
00111     //mux line 1=>temp sensor, mux lines 2 to 5 =>thermistors
00112 
00113     for(LoopIterator=0; LoopIterator<5; LoopIterator++) 
00114     {        
00115         //read the sensor values and stores them in 'SensorData' structure variable 'Sensor'
00116         Sensor.Temperature[LoopIterator]=(-90.7*3.3*TemperatureInput.read()+190.1543);
00117         voltage_thermistor=TemperatureInput.read()*3.3;//voltage across thermistor
00118         resistance_thermistor=24000*voltage_thermistor/(3.3-voltage_thermistor);//resistance of thermistor
00119         if (LoopIterator==0)
00120         {
00121             printf(" \n\rTemp =%f",-90.7*3.3*TemperatureInput.read()+190.1543);
00122         }
00123         
00124         if(LoopIterator%2==0)
00125         {                
00126             if(LoopIterator<1)                      //->corresponding to temperature sensor
00127                 SensorQuantised.Temperature[(LoopIterator)/2]=quantiz(tstart,tstep,Sensor.Temperature[LoopIterator]);
00128          
00129             else                                    //->corresponding to thermistor
00130             {    
00131                 if(voltage_thermistor<1.378) //Temperature>12 degC
00132                     Sensor.PanelTemperature[(LoopIterator-1)]=(3694/log(24.032242*resistance_thermistor));
00133                     
00134                 else   
00135                     Sensor.PanelTemperature[(LoopIterator-1)]=(3365.4792/log(7.60404*resistance_thermistor));
00136                     
00137                     
00138                 SensorQuantised.PanelTemperature[(LoopIterator-1)/2]=quantiz(tstart_thermistor,tstep_thermistor,Sensor.PanelTemperature[(LoopIterator-1)]);
00139                     
00140             }
00141         } 
00142         else
00143         {           
00144             if(LoopIterator<1)
00145                 SensorQuantised.Temperature[(LoopIterator)/2]=SensorQuantised.Temperature[(LoopIterator)/2]<<4+quantiz(tstart,tstep,Sensor.Temperature[LoopIterator]); 
00146             
00147             else
00148             {  
00149                 if(voltage_thermistor<1.378) //Temperature>12 degC 
00150                     Sensor.PanelTemperature[LoopIterator-1]=(3694/log(24.032242*resistance_thermistor));
00151                 else
00152                     Sensor.PanelTemperature[LoopIterator-1]=(3365.4792/log(7.60404*resistance_thermistor));
00153                     
00154                 SensorQuantised.PanelTemperature[(LoopIterator-1)/2]=SensorQuantised.PanelTemperature[(LoopIterator-1)/2]<<4+quantiz(tstart_thermistor,tstep_thermistor,Sensor.PanelTemperature[LoopIterator-1]);
00155             }
00156         }
00157        // The following lines are used to iterate the select lines from 0 to 4
00158        for(SelectLineIterator=3;SelectLineIterator>=0;SelectLineIterator--)
00159        {
00160             if(SelectLinesC[SelectLineIterator]==0)
00161             {
00162                 SelectLinesC[SelectLineIterator]=1;
00163                 break;
00164             }
00165             else SelectLinesC[SelectLineIterator]=0;
00166         }
00167     
00168         wait_us(10.0); //  A delay of 10 microseconds between each sensor output. Can be changed.
00169     }
00170 
00171 
00172     //update magnetometer data->
00173     //populate values in structure variable 'Sensor' from data to be given by Green
00174      SensorQuantised.AngularSpeed[0]=quantiz(AngularSpeed_start,AngularSpeed_step,Sensor.AngularSpeed[1]);
00175      SensorQuantised.AngularSpeed[0]=SensorQuantised.AngularSpeed[0]<<4+quantiz(AngularSpeed_start,AngularSpeed_step,Sensor.AngularSpeed[0]);
00176      SensorQuantised.AngularSpeed[1]=quantiz(AngularSpeed_start,AngularSpeed_step,Sensor.AngularSpeed[2]);
00177      
00178     //update gyro data->
00179     //populate values in structure variable 'Sensor' from data to be given by Green
00180      SensorQuantised.Bnewvalue[0]=quantiz(Bnewvalue_start,Bnewvalue_step,Sensor.Bnewvalue[1]);
00181      SensorQuantised.Bnewvalue[0]=SensorQuantised.Bnewvalue[0]<<4+quantiz(Bnewvalue_start,Bnewvalue_step,Sensor.Bnewvalue[0]);
00182      SensorQuantised.Bnewvalue[1]=quantiz(Bnewvalue_start,Bnewvalue_step,Sensor.Bnewvalue[2]);
00183 
00184      //update beacon structure
00185      init_beacon(&Shortbeacon,SensorQuantised);//Shortbeacon is passed 
00186      printf("\n here temperature :%d",SensorQuantised.Temperature);    
00187 }
00188 
00189 
00190