i2c working version

Dependencies:   mbed-rtos mbed

Committer:
sakthipriya
Date:
Thu Apr 09 22:44:39 2015 +0000
Revision:
0:7882d03f59e2
i2c working version

Who changed what in which revision?

UserRevisionLine numberNew 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