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 pcb_test_v1_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 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
Generated on Tue Jul 12 2022 16:58:38 by
