acs bea hk together

Dependencies:   mbed-rtos mbed

Fork of BAE_vr3honeycomb1_christmas by green rosh

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