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