Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of BAE_RTOS_test_1 by
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
Generated on Sat Jul 23 2022 00:50:53 by
1.7.2
