4-10-2015 BAE_RTOS_TEST ACS_DATA_ACQ and I2C sending 25 bytes to CDMS
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
