reset prob solved n cdms reforms the structure from hk data

Dependencies:   mbed-rtos mbed

Committer:
sakthipriya
Date:
Thu Dec 18 12:20:47 2014 +0000
Revision:
0:93514bd41116
reset prob solved n cdms reforms the structure from hk data

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sakthipriya 0:93514bd41116 1 #include "HK.h"
sakthipriya 0:93514bd41116 2
sakthipriya 0:93514bd41116 3
sakthipriya 0:93514bd41116 4 //GPIO pins used=> D2-D12, A0-A1
sakthipriya 0:93514bd41116 5
sakthipriya 0:93514bd41116 6 DigitalOut SelectLinesA[]={D2,D3,D4,D5};//to mux1=>voltage mux
sakthipriya 0:93514bd41116 7 DigitalOut SelectLinesB[]={PTB18,PTB19,PTC10};//to mux2=>current mux(differential mux)
sakthipriya 0:93514bd41116 8 DigitalOut SelectLinesC[]={PTC0,PTC13,PTC6,PTC16};//to mux3=>temp mux
sakthipriya 0:93514bd41116 9
sakthipriya 0:93514bd41116 10 //--------------------------------------------MSB is SelectLines[0],LSB is SelectLines[3]--------------------------------
sakthipriya 0:93514bd41116 11
sakthipriya 0:93514bd41116 12 AnalogIn CurrentInput(A0); // Input from Current Mux
sakthipriya 0:93514bd41116 13 AnalogIn VoltageInput(A1); // Input from Voltage Multiplexer
sakthipriya 0:93514bd41116 14 AnalogIn TemperatureInput(A2); /*Input from Temperature Multiplexer,thermistor Multiplexer- same multiplexer for both(lines 1-4 for thermistor,line 0 for temperature sensor)*/
sakthipriya 0:93514bd41116 15
sakthipriya 0:93514bd41116 16
sakthipriya 0:93514bd41116 17
sakthipriya 0:93514bd41116 18
sakthipriya 0:93514bd41116 19 int quantiz(float start,float step,float x) // accepts min and measured values and step->quantises on a scale 0-15..(4 bit quantisation)
sakthipriya 0:93514bd41116 20 {
sakthipriya 0:93514bd41116 21 int y=(x-start)/step;
sakthipriya 0:93514bd41116 22 if(y<=0)y=0;
sakthipriya 0:93514bd41116 23 if(y>=15)y=15;
sakthipriya 0:93514bd41116 24 return y;
sakthipriya 0:93514bd41116 25 }
sakthipriya 0:93514bd41116 26
sakthipriya 0:93514bd41116 27 void init_beacon(ShortBeacy* x,SensorDataQuantised y)
sakthipriya 0:93514bd41116 28 {
sakthipriya 0:93514bd41116 29 (*x).Voltage[0]=2;//quantised value
sakthipriya 0:93514bd41116 30 (*x).Temp[0]=y.PanelTemperature[0];//quantised value
sakthipriya 0:93514bd41116 31 (*x).Temp[1]=y.PanelTemperature[1];//quantised value
sakthipriya 0:93514bd41116 32 (*x).AngularSpeed[0]=y.AngularSpeed[0];
sakthipriya 0:93514bd41116 33 (*x).AngularSpeed[1]=y.AngularSpeed[1];
sakthipriya 0:93514bd41116 34
sakthipriya 0:93514bd41116 35 (*x).SubsystemStatus[0]=145;//dummy values----------to be changed-------------------
sakthipriya 0:93514bd41116 36 (*x).ErrorFlag[0]=3;//dummy values----------to be changed-------------------
sakthipriya 0:93514bd41116 37 }
sakthipriya 0:93514bd41116 38
sakthipriya 0:93514bd41116 39 SensorData Sensor;
sakthipriya 0:93514bd41116 40 SensorDataQuantised SensorQuantised;
sakthipriya 0:93514bd41116 41 ShortBeacy Shortbeacon;
sakthipriya 0:93514bd41116 42 void FUNC_HK_MAIN()
sakthipriya 0:93514bd41116 43 {
sakthipriya 0:93514bd41116 44 //define structure variables
sakthipriya 0:93514bd41116 45
sakthipriya 0:93514bd41116 46
sakthipriya 0:93514bd41116 47
sakthipriya 0:93514bd41116 48
sakthipriya 0:93514bd41116 49 //initialise all selectlines to zeroes->1st line of muxes selected
sakthipriya 0:93514bd41116 50 SelectLinesA[0]=SelectLinesA[1]=SelectLinesA[2]=SelectLinesA[3]=0;
sakthipriya 0:93514bd41116 51 SelectLinesB[0]=SelectLinesB[1]=SelectLinesB[2]=0;
sakthipriya 0:93514bd41116 52 SelectLinesC[0]=SelectLinesC[1]=SelectLinesC[2]=SelectLinesC[3]=0;
sakthipriya 0:93514bd41116 53
sakthipriya 0:93514bd41116 54 int LoopIterator;
sakthipriya 0:93514bd41116 55 int SelectLineIterator;
sakthipriya 0:93514bd41116 56
sakthipriya 0:93514bd41116 57 float resistance_thermistor,voltage_thermistor;//for thermistor
sakthipriya 0:93514bd41116 58
sakthipriya 0:93514bd41116 59 //measurement from voltage sensor=> 16 sensors in place
sakthipriya 0:93514bd41116 60 for(LoopIterator=0; LoopIterator<16; LoopIterator++)
sakthipriya 0:93514bd41116 61 {
sakthipriya 0:93514bd41116 62 //following lines read the sensor values and stores them in 'SensorData' structure's variable 'Sensor'
sakthipriya 0:93514bd41116 63 Sensor.Voltage[LoopIterator]=(VoltageInput.read()*3.3*5.545454);//resistors in voltage divider=>15Mohm,3.3Mohm
sakthipriya 0:93514bd41116 64
sakthipriya 0:93514bd41116 65 if(LoopIterator%2==0)
sakthipriya 0:93514bd41116 66 SensorQuantised.Voltage[LoopIterator/2]=quantiz(vstart,vstep,Sensor.Voltage[LoopIterator]);
sakthipriya 0:93514bd41116 67
sakthipriya 0:93514bd41116 68 else
sakthipriya 0:93514bd41116 69 SensorQuantised.Voltage[(LoopIterator)/2]=SensorQuantised.Voltage[(LoopIterator)/2]<<4+quantiz(vstart,vstep,Sensor.Voltage[LoopIterator]);
sakthipriya 0:93514bd41116 70
sakthipriya 0:93514bd41116 71
sakthipriya 0:93514bd41116 72
sakthipriya 0:93514bd41116 73 // The following lines are used to iterate the select lines from 0 to 15
sakthipriya 0:93514bd41116 74 //following is an algorithm similar to counting binary numbers of 4 bit
sakthipriya 0:93514bd41116 75 for(SelectLineIterator=3;SelectLineIterator>=0;SelectLineIterator--)
sakthipriya 0:93514bd41116 76 {
sakthipriya 0:93514bd41116 77 if(SelectLinesA[SelectLineIterator]==0)
sakthipriya 0:93514bd41116 78 {
sakthipriya 0:93514bd41116 79 SelectLinesA[SelectLineIterator]=1;
sakthipriya 0:93514bd41116 80 break;
sakthipriya 0:93514bd41116 81 }
sakthipriya 0:93514bd41116 82 else SelectLinesA[SelectLineIterator]=0;
sakthipriya 0:93514bd41116 83
sakthipriya 0:93514bd41116 84 }
sakthipriya 0:93514bd41116 85
sakthipriya 0:93514bd41116 86
sakthipriya 0:93514bd41116 87 wait_us(10.0); // A delay of 10 microseconds between each sensor output. Can be changed.
sakthipriya 0:93514bd41116 88
sakthipriya 0:93514bd41116 89 }
sakthipriya 0:93514bd41116 90
sakthipriya 0:93514bd41116 91
sakthipriya 0:93514bd41116 92
sakthipriya 0:93514bd41116 93
sakthipriya 0:93514bd41116 94
sakthipriya 0:93514bd41116 95 //measurement from current sensor=> 8 sensors in place
sakthipriya 0:93514bd41116 96
sakthipriya 0:93514bd41116 97 for(LoopIterator=0; LoopIterator<8; LoopIterator++)
sakthipriya 0:93514bd41116 98 {
sakthipriya 0:93514bd41116 99 //following lines read the sensor values and stores them in 'SensorData' structure variable 'Sensor'
sakthipriya 0:93514bd41116 100 Sensor.Current[LoopIterator]=(CurrentInput.read()*3.3/(50*rsens));
sakthipriya 0:93514bd41116 101 if(LoopIterator%2==0)
sakthipriya 0:93514bd41116 102 SensorQuantised.Current[LoopIterator/2]=quantiz(cstart,cstep,Sensor.Current[LoopIterator]);
sakthipriya 0:93514bd41116 103 else
sakthipriya 0:93514bd41116 104 SensorQuantised.Current[(LoopIterator)/2]=SensorQuantised.Current[(LoopIterator)/2]<<4+quantiz(cstart,cstep,Sensor.Current[LoopIterator]);
sakthipriya 0:93514bd41116 105
sakthipriya 0:93514bd41116 106
sakthipriya 0:93514bd41116 107 // The following lines are used to iterate the select lines from 0 to 7
sakthipriya 0:93514bd41116 108 //following is an algorithm similar to counting binary numbers of 3 bits
sakthipriya 0:93514bd41116 109 for(SelectLineIterator=2;SelectLineIterator>=0;SelectLineIterator--)
sakthipriya 0:93514bd41116 110 {
sakthipriya 0:93514bd41116 111 if(SelectLinesB[SelectLineIterator]==0)
sakthipriya 0:93514bd41116 112 {
sakthipriya 0:93514bd41116 113 SelectLinesB[SelectLineIterator]=1;
sakthipriya 0:93514bd41116 114 break;
sakthipriya 0:93514bd41116 115 }
sakthipriya 0:93514bd41116 116 else SelectLinesB[SelectLineIterator]=0;
sakthipriya 0:93514bd41116 117
sakthipriya 0:93514bd41116 118 }
sakthipriya 0:93514bd41116 119
sakthipriya 0:93514bd41116 120
sakthipriya 0:93514bd41116 121 wait_us(10.0); // A delay of 10 microseconds between each sensor output. Can be changed.
sakthipriya 0:93514bd41116 122
sakthipriya 0:93514bd41116 123 }
sakthipriya 0:93514bd41116 124
sakthipriya 0:93514bd41116 125
sakthipriya 0:93514bd41116 126 //measurement of temperature
sakthipriya 0:93514bd41116 127 //temperature measurement=> 4 thermistors, 1 temperature sensor
sakthipriya 0:93514bd41116 128 //mux line 1=>temp sensor, mux lines 2 to 5 =>thermistors
sakthipriya 0:93514bd41116 129
sakthipriya 0:93514bd41116 130 for(LoopIterator=0; LoopIterator<5; LoopIterator++)
sakthipriya 0:93514bd41116 131 {
sakthipriya 0:93514bd41116 132 //following lines read the sensor values and stores them in 'SensorData' structure variable 'Sensor'
sakthipriya 0:93514bd41116 133 Sensor.Temperature[LoopIterator]=(-90.7*3.3*TemperatureInput.read()+190.1543);
sakthipriya 0:93514bd41116 134 voltage_thermistor=TemperatureInput.read()*3.3;//voltage across thermistor
sakthipriya 0:93514bd41116 135 resistance_thermistor=24000*voltage_thermistor/(3.3-voltage_thermistor);//resistance of thermistor
sakthipriya 0:93514bd41116 136 //PanelTemperature will be updated depending on voltage_thermistor value later in the lines to follow
sakthipriya 0:93514bd41116 137
sakthipriya 0:93514bd41116 138 if(LoopIterator%2==0)
sakthipriya 0:93514bd41116 139 {
sakthipriya 0:93514bd41116 140 if(LoopIterator<1) //->corresponding to temperature sensor
sakthipriya 0:93514bd41116 141 SensorQuantised.Temperature[(LoopIterator)/2]=quantiz(tstart,tstep,Sensor.Temperature[LoopIterator]);
sakthipriya 0:93514bd41116 142
sakthipriya 0:93514bd41116 143 else //->corresponding to thermistor
sakthipriya 0:93514bd41116 144 {
sakthipriya 0:93514bd41116 145 if(voltage_thermistor<1.378) //Temperature>12 degC
sakthipriya 0:93514bd41116 146 Sensor.PanelTemperature[(LoopIterator-1)]=(3694/log(24.032242*resistance_thermistor));
sakthipriya 0:93514bd41116 147
sakthipriya 0:93514bd41116 148 else
sakthipriya 0:93514bd41116 149 Sensor.PanelTemperature[(LoopIterator-1)]=(3365.4792/log(7.60404*resistance_thermistor));
sakthipriya 0:93514bd41116 150
sakthipriya 0:93514bd41116 151
sakthipriya 0:93514bd41116 152 SensorQuantised.PanelTemperature[(LoopIterator-1)/2]=quantiz(tstart_thermistor,tstep_thermistor,Sensor.PanelTemperature[(LoopIterator-1)]);
sakthipriya 0:93514bd41116 153
sakthipriya 0:93514bd41116 154 }
sakthipriya 0:93514bd41116 155
sakthipriya 0:93514bd41116 156 }
sakthipriya 0:93514bd41116 157
sakthipriya 0:93514bd41116 158 else
sakthipriya 0:93514bd41116 159 {
sakthipriya 0:93514bd41116 160 if(LoopIterator<1)
sakthipriya 0:93514bd41116 161 SensorQuantised.Temperature[(LoopIterator)/2]=SensorQuantised.Temperature[(LoopIterator)/2]<<4+quantiz(tstart,tstep,Sensor.Temperature[LoopIterator]);
sakthipriya 0:93514bd41116 162
sakthipriya 0:93514bd41116 163 else
sakthipriya 0:93514bd41116 164 {
sakthipriya 0:93514bd41116 165 if(voltage_thermistor<1.378) //Temperature>12 degC
sakthipriya 0:93514bd41116 166 Sensor.PanelTemperature[LoopIterator-1]=(3694/log(24.032242*resistance_thermistor));
sakthipriya 0:93514bd41116 167
sakthipriya 0:93514bd41116 168
sakthipriya 0:93514bd41116 169 else
sakthipriya 0:93514bd41116 170 Sensor.PanelTemperature[LoopIterator-1]=(3365.4792/log(7.60404*resistance_thermistor));
sakthipriya 0:93514bd41116 171
sakthipriya 0:93514bd41116 172 SensorQuantised.PanelTemperature[(LoopIterator-1)/2]=SensorQuantised.PanelTemperature[(LoopIterator-1)/2]<<4+quantiz(tstart_thermistor,tstep_thermistor,Sensor.PanelTemperature[LoopIterator-1]);
sakthipriya 0:93514bd41116 173
sakthipriya 0:93514bd41116 174 }
sakthipriya 0:93514bd41116 175
sakthipriya 0:93514bd41116 176 }
sakthipriya 0:93514bd41116 177
sakthipriya 0:93514bd41116 178 strcpy(SensorQuantised.Voltage,"green");
sakthipriya 0:93514bd41116 179
sakthipriya 0:93514bd41116 180 // The following lines are used to iterate the select lines from 0 to 4
sakthipriya 0:93514bd41116 181
sakthipriya 0:93514bd41116 182 //following is an algorithm similar to counting binary numbers of 4 bit
sakthipriya 0:93514bd41116 183 for(SelectLineIterator=3;SelectLineIterator>=0;SelectLineIterator--)
sakthipriya 0:93514bd41116 184 {
sakthipriya 0:93514bd41116 185 if(SelectLinesC[SelectLineIterator]==0)
sakthipriya 0:93514bd41116 186 {
sakthipriya 0:93514bd41116 187 SelectLinesC[SelectLineIterator]=1;
sakthipriya 0:93514bd41116 188 break;
sakthipriya 0:93514bd41116 189 }
sakthipriya 0:93514bd41116 190 else SelectLinesC[SelectLineIterator]=0;
sakthipriya 0:93514bd41116 191
sakthipriya 0:93514bd41116 192 }
sakthipriya 0:93514bd41116 193
sakthipriya 0:93514bd41116 194
sakthipriya 0:93514bd41116 195 wait_us(10.0); // A delay of 10 microseconds between each sensor output. Can be changed.
sakthipriya 0:93514bd41116 196
sakthipriya 0:93514bd41116 197 }
sakthipriya 0:93514bd41116 198
sakthipriya 0:93514bd41116 199
sakthipriya 0:93514bd41116 200
sakthipriya 0:93514bd41116 201
sakthipriya 0:93514bd41116 202
sakthipriya 0:93514bd41116 203 //update magnetometer data->
sakthipriya 0:93514bd41116 204 //populate values in structure variable 'Sensor' from data to be given by Green
sakthipriya 0:93514bd41116 205 SensorQuantised.AngularSpeed[0]=quantiz(AngularSpeed_start,AngularSpeed_step,Sensor.AngularSpeed[1]);
sakthipriya 0:93514bd41116 206 SensorQuantised.AngularSpeed[0]=SensorQuantised.AngularSpeed[0]<<4+quantiz(AngularSpeed_start,AngularSpeed_step,Sensor.AngularSpeed[0]);
sakthipriya 0:93514bd41116 207 SensorQuantised.AngularSpeed[1]=quantiz(AngularSpeed_start,AngularSpeed_step,Sensor.AngularSpeed[2]);
sakthipriya 0:93514bd41116 208
sakthipriya 0:93514bd41116 209 //update gyro data->
sakthipriya 0:93514bd41116 210 //populate values in structure variable 'Sensor' from data to be given by Green
sakthipriya 0:93514bd41116 211 SensorQuantised.Bnewvalue[0]=quantiz(Bnewvalue_start,Bnewvalue_step,Sensor.Bnewvalue[1]);
sakthipriya 0:93514bd41116 212 SensorQuantised.Bnewvalue[0]=SensorQuantised.Bnewvalue[0]<<4+quantiz(Bnewvalue_start,Bnewvalue_step,Sensor.Bnewvalue[0]);
sakthipriya 0:93514bd41116 213 SensorQuantised.Bnewvalue[1]=quantiz(Bnewvalue_start,Bnewvalue_step,Sensor.Bnewvalue[2]);
sakthipriya 0:93514bd41116 214
sakthipriya 0:93514bd41116 215
sakthipriya 0:93514bd41116 216
sakthipriya 0:93514bd41116 217
sakthipriya 0:93514bd41116 218 //update beacon structure
sakthipriya 0:93514bd41116 219 init_beacon(&Shortbeacon,SensorQuantised);//Shortbeacon is passed
sakthipriya 0:93514bd41116 220
sakthipriya 0:93514bd41116 221
sakthipriya 0:93514bd41116 222 }
sakthipriya 0:93514bd41116 223
sakthipriya 0:93514bd41116 224
sakthipriya 0:93514bd41116 225