GOPA KUMAR K C / Mbed 2 deprecated BAE_RTOS_test_2

Dependencies:   mbed-rtos mbed

Fork of BAE_RTOS_test_1 by GOPA KUMAR K C

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 //DigitalOut SelectLinesC[]={PIN67,PIN66,PIN65,PIN64};
00011 //--------------------------------------------MSB is SelectLines[0],LSB is SelectLines[3]-------------------------------- 
00012 
00013 AnalogIn CurrentInput(PIN54);                                // output from Current Mux PTB0
00014 AnalogIn VoltageInput(PIN53);                                // 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 FCTN_HK_MAIN()             
00043 {
00044     printf("\n\r vol here %f \n",VoltageInput.read()*3.3);
00045     //define structure variables    
00046  
00047     //initialise all selectlines to zeroes->1st line of muxes selected
00048     SelectLinesA[0]=SelectLinesA[1]=SelectLinesA[2]=SelectLinesA[3]=0;
00049     SelectLinesB[0]=SelectLinesB[1]=SelectLinesB[2]=SelectLinesB[3]=0;
00050     //SelectLinesC[0]=SelectLinesC[1]=SelectLinesC[2]=SelectLinesC[3]=0;
00051     
00052     int LoopIterator;
00053     int SelectLineIterator;
00054     
00055     float resistance_thermistor,voltage_thermistor;//for thermistor
00056  
00057     //measurement from voltage sensor=> 16 sensors in place
00058     for(LoopIterator=0; LoopIterator<16; LoopIterator++) 
00059     {       
00060         //read the sensor values and stores them in 'SensorData' structure's variable 'Sensor'
00061         Sensor.Voltage[LoopIterator]=(VoltageInput.read()*3.3*5.545454);//resistors in voltage divider=>15Mohm,3.3Mohm
00062                
00063         if(LoopIterator%2==0)
00064             SensorQuantised.Voltage[LoopIterator/2]=quantiz(vstart,vstep,Sensor.Voltage[LoopIterator]);
00065                            
00066         else
00067             SensorQuantised.Voltage[(LoopIterator)/2]=SensorQuantised.Voltage[(LoopIterator)/2]<<4+quantiz(vstart,vstep,Sensor.Voltage[LoopIterator]);
00068             
00069         //iterate the select lines from 0 to 15
00070         for(SelectLineIterator=3;SelectLineIterator>=0;SelectLineIterator--)
00071         {
00072             if(SelectLinesA[SelectLineIterator]==0)
00073             {
00074                 SelectLinesA[SelectLineIterator]=1;
00075                 break;
00076             }
00077             else SelectLinesA[SelectLineIterator]=0;
00078         }
00079     
00080         wait_us(10.0); //  A delay of 10 microseconds between each sensor output. Can be changed.
00081     }
00082  
00083  
00084     //measurement from current sensor=>  8 sensors in place 
00085     for(LoopIterator=0; LoopIterator<8; LoopIterator++) 
00086     {       
00087         //read the sensor values and stores them in 'SensorData' structure variable 'Sensor'
00088         Sensor.Current[LoopIterator]=(CurrentInput.read()*3.3/(50*rsens));
00089         if(LoopIterator%2==0)
00090             SensorQuantised.Current[LoopIterator/2]=quantiz(cstart,cstep,Sensor.Current[LoopIterator]);
00091         else
00092             SensorQuantised.Current[(LoopIterator)/2]=SensorQuantised.Current[(LoopIterator)/2]<<4+quantiz(cstart,cstep,Sensor.Current[LoopIterator]);
00093 
00094         //iterate the select lines from 0 to 7
00095         for(SelectLineIterator=2;SelectLineIterator>=0;SelectLineIterator--)
00096         {
00097             if(SelectLinesB[SelectLineIterator]==0)
00098             {
00099                 SelectLinesB[SelectLineIterator]=1;
00100                 break;
00101             }
00102             else SelectLinesB[SelectLineIterator]=0;
00103     
00104         }
00105     
00106         wait_us(10.0); //  A delay of 10 microseconds between each sensor output. Can be changed.
00107     }
00108     
00109     
00110     //measurement of temperature
00111     //temperature measurement=> 4 thermistors, 1 temperature sensor
00112     //mux line 1=>temp sensor, mux lines 2 to 5 =>thermistors
00113 
00114     for(LoopIterator=0; LoopIterator<5; LoopIterator++) 
00115     {        
00116         //read the sensor values and stores them in 'SensorData' structure variable 'Sensor'
00117         Sensor.Temperature[LoopIterator]=(-90.7*3.3*TemperatureInput.read()+190.1543);
00118         voltage_thermistor=TemperatureInput.read()*3.3;//voltage across thermistor
00119         resistance_thermistor=24000*voltage_thermistor/(3.3-voltage_thermistor);//resistance of thermistor
00120         if (LoopIterator==0)
00121         {
00122            // printf(" \n\rTemp =%f",-90.7*3.3*TemperatureInput.read()+190.1543);
00123         }
00124         
00125         if(LoopIterator%2==0)
00126         {                
00127             if(LoopIterator<1)                      //->corresponding to temperature sensor
00128                 SensorQuantised.Temperature[(LoopIterator)/2]=quantiz(tstart,tstep,Sensor.Temperature[LoopIterator]);
00129          
00130             else                                    //->corresponding to thermistor
00131             {    
00132                 if(voltage_thermistor<1.378) //Temperature>12 degC
00133                     Sensor.PanelTemperature[(LoopIterator-1)]=(3694/log(24.032242*resistance_thermistor));
00134                     
00135                 else   
00136                     Sensor.PanelTemperature[(LoopIterator-1)]=(3365.4792/log(7.60404*resistance_thermistor));
00137                     
00138                     
00139                 SensorQuantised.PanelTemperature[(LoopIterator-1)/2]=quantiz(tstart_thermistor,tstep_thermistor,Sensor.PanelTemperature[(LoopIterator-1)]);
00140                     
00141             }
00142         } 
00143         else
00144         {           
00145             if(LoopIterator<1)
00146                 SensorQuantised.Temperature[(LoopIterator)/2]=SensorQuantised.Temperature[(LoopIterator)/2]<<4+quantiz(tstart,tstep,Sensor.Temperature[LoopIterator]); 
00147             
00148             else
00149             {  
00150                 if(voltage_thermistor<1.378) //Temperature>12 degC 
00151                     Sensor.PanelTemperature[LoopIterator-1]=(3694/log(24.032242*resistance_thermistor));
00152                 else
00153                     Sensor.PanelTemperature[LoopIterator-1]=(3365.4792/log(7.60404*resistance_thermistor));
00154                     
00155                 SensorQuantised.PanelTemperature[(LoopIterator-1)/2]=SensorQuantised.PanelTemperature[(LoopIterator-1)/2]<<4+quantiz(tstart_thermistor,tstep_thermistor,Sensor.PanelTemperature[LoopIterator-1]);
00156             }
00157         }
00158        // The following lines are used to iterate the select lines from 0 to 4
00159        //for(SelectLineIterator=3;SelectLineIterator>=0;SelectLineIterator--)
00160 //       {
00161 //            if(SelectLinesC[SelectLineIterator]==0)
00162 //            {
00163 //                SelectLinesC[SelectLineIterator]=1;
00164 //                break;
00165 //            }
00166 //            else SelectLinesC[SelectLineIterator]=0;
00167 //        }
00168 
00169        
00170         
00171         wait_us(10.0); //  A delay of 10 microseconds between each sensor output. Can be changed.
00172     
00173 }
00174     printf(" \n\rvol %f Temp =%f",3.3*TemperatureInput.read(),-90.7*3.3*TemperatureInput.read()+190.1543);
00175     //update magnetometer data->
00176     //populate values in structure variable 'Sensor' from data to be given by Green
00177      SensorQuantised.AngularSpeed[0]=quantiz(AngularSpeed_start,AngularSpeed_step,Sensor.AngularSpeed[1]);
00178      SensorQuantised.AngularSpeed[0]=SensorQuantised.AngularSpeed[0]<<4+quantiz(AngularSpeed_start,AngularSpeed_step,Sensor.AngularSpeed[0]);
00179      SensorQuantised.AngularSpeed[1]=quantiz(AngularSpeed_start,AngularSpeed_step,Sensor.AngularSpeed[2]);
00180      
00181     //update gyro data->
00182     //populate values in structure variable 'Sensor' from data to be given by Green
00183      SensorQuantised.Bnewvalue[0]=quantiz(Bnewvalue_start,Bnewvalue_step,Sensor.Bnewvalue[1]);
00184      SensorQuantised.Bnewvalue[0]=SensorQuantised.Bnewvalue[0]<<4+quantiz(Bnewvalue_start,Bnewvalue_step,Sensor.Bnewvalue[0]);
00185      SensorQuantised.Bnewvalue[1]=quantiz(Bnewvalue_start,Bnewvalue_step,Sensor.Bnewvalue[2]);
00186 
00187      //update beacon structure
00188      init_beacon(&Shortbeacon,SensorQuantised);//Shortbeacon is passed 
00189      printf("\n here temperature :%d",SensorQuantised.Temperature);    
00190 }
00191 
00192 
00193