i2c working with old hk

Dependencies:   mbed-rtos mbed

Fork of BAE_vr2_1_1 by green rosh

Revision:
14:ef6be8ac6569
Parent:
13:1b37d98840d3
--- a/HK.cpp	Wed Dec 17 05:25:04 2014 +0000
+++ b/HK.cpp	Wed Dec 17 06:06:59 2014 +0000
@@ -1,273 +1,79 @@
 #include "HK.h"
  
- MAX17048 master(A4,A5,100000);//object for battery gauge class--CHECK SDA,SCL LINES,FREQUENCY
- void FUNC_BATTERYGAUGE_INIT();
+DigitalOut SelectLine3 (D4); // MSB of Select Lines
+DigitalOut SelectLine2 (D3);
+DigitalOut SelectLine1 (D2);
+DigitalOut SelectLine0 (D1); // LSB of Select Lines
  
-//GPIO pins used=> D2-D12, A0-A1
-
-DigitalOut SelectLinesA[]={D2,D3,D4,D5};//to mux1=>voltage mux
-DigitalOut SelectLinesB[]={PTB18,D7,PTB19};//to mux2=>current mux(differential mux)   Is this 3 or 4?
-DigitalOut SelectLinesC[]={PTC0,PTC4,PTC6,PTC7};//to mux3=>temp mux
+AnalogIn CurrentInput(A1); // Input from Current Multiplexer
+AnalogIn VoltageInput(A2); // Input from Voltage Multiplexer
+AnalogIn TemperatureInput(A3); // input from Temperature Multiplexer
 
-//--------------------------------------------MSB is SelectLines[0],LSB is SelectLines[3]-------------------------------- 
-
-AnalogIn CurrentInput(A0); // Input from Current Mux
-AnalogIn VoltageInput(A1); // Input from Voltage Multiplexer
-AnalogIn TemperatureInput(A2); /*Input from Temperature Multiplexer,thermistor Multiplexer- same multiplexer for both(lines 1-4 for thermistor,line 0 for temperature sensor)*/
- 
-
-
- 
-int quantiz(float start,float step,float x)     // accepts min and measured values and step->quantises on a scale 0-15..(4 bit quantisation)
+SensorData Sensor; 
+int quantiz(float start,float step,float x)
 {
     int y=(x-start)/step;
     if(y<=0)y=0;
     if(y>=15)y=15;
     return y;
 }
- 
-void init_beacon(ShortBeacy* x,SensorDataQuantised y)  
-{
-    (*x).Voltage[0]=y.Vcell_soc>>4;//quantised value
-    (*x).Temp[0]=y.PanelTemperature[0];//quantised value
-    (*x).Temp[1]=y.PanelTemperature[1];//quantised value
-    (*x).AngularSpeed[0]=y.AngularSpeed[0];
-    (*x).AngularSpeed[1]=y.AngularSpeed[1];
-    
-    (*x).SubsystemStatus[0]=145;//dummy values----------to be changed-------------------
-    (*x).ErrorFlag[0]=3;//dummy values----------to be changed-------------------
+ShortBeacy Shortbeacon; 
+void init_beacon(ShortBeacy x){
+   ;
 }
-   SensorData SensorUQ; 
-    SensorDataQuantised SensorQuantised;
-    ShortBeacy Shortbeacon;
+ 
 
-void FUNC_HK_MAIN()             
+void FUNC_HK_MAIN()
 {
-    //define structure variables    
- 
-    
-    
+    printf("\nEntered function  HK MAIN\n");
     
-    //initialise all selectlines to zeroes->1st line of muxes selected
-    SelectLinesA[0]=SelectLinesA[1]=SelectLinesA[2]=SelectLinesA[3]=0;
-    SelectLinesB[0]=SelectLinesB[1]=SelectLinesB[2]=0;
-    SelectLinesC[0]=SelectLinesC[1]=SelectLinesC[2]=SelectLinesC[3]=0;
+     Shortbeacon.Voltage[0]=1;
+   Shortbeacon.AngularSpeed[0]=2;
+    Shortbeacon.AngularSpeed[1]=3;
+    Shortbeacon.SubsystemStatus[0]=145;
+    Shortbeacon.Temp[0]=1;
+    Shortbeacon.Temp[1]=2;
+    Shortbeacon.Temp[2]=3;
+    Shortbeacon.ErrorFlag[0]=3;
     
     int LoopIterator;
-    int SelectLineIterator;
-    
-    float resistance_thermistor,voltage_thermistor;//for thermistor
+ 
+    SelectLine0=0;
+    SelectLine1=0;
+    SelectLine2=0;
+    SelectLine3=0;
  
-  //measurement from voltage sensor=> 16 sensors in place
- for(LoopIterator=0; LoopIterator<16; LoopIterator++) 
-{       
-        //following lines read the sensor values and stores them in 'SensorData' structure's variable 'Sensor'
-        SensorUQ.Voltage[LoopIterator]=(VoltageInput.read()*3.3*5.545454);//resistors in voltage divider=>15Mohm,3.3Mohm
-               
-        if(LoopIterator%2==0)
-            SensorQuantised.Voltage[LoopIterator/2]=quantiz(vstart,vstep,SensorUQ.Voltage[LoopIterator]);
-                           
-        else
-            SensorQuantised.Voltage[(LoopIterator)/2]=SensorQuantised.Voltage[(LoopIterator)/2]<<4+quantiz(vstart,vstep,SensorUQ.Voltage[LoopIterator]);
-            
-    
-    
-    // The following lines are used to iterate the select lines from 0 to 15
-    //following is an algorithm similar to counting binary numbers of 4 bit
-       for(SelectLineIterator=3;SelectLineIterator>=0;SelectLineIterator--)
-        {
-            if(SelectLinesA[SelectLineIterator]==0)
-            {
-                SelectLinesA[SelectLineIterator]=1;
-                break;
-            }
-            else SelectLinesA[SelectLineIterator]=0;
-    
+    for(LoopIterator=0; LoopIterator<16; LoopIterator++) {
+        
+        if(LoopIterator%2==0) {
+            Sensor.Current[LoopIterator/2]=quantiz(cstart,cstep,((CurrentInput.read()*3.18)/(50*rsens)));
+            Sensor.Voltage[LoopIterator/2]=quantiz(vstart,vstep,(VoltageInput.read()*3.18*5.37));
+            Sensor.Temperature[LoopIterator/2]=quantiz(tstart,tstep,(-90.7*3.18*TemperatureInput.read()+190.1543));
+        } else {
+            Sensor.Current[(LoopIterator-1)/2]=(Sensor.Current[(LoopIterator-1)/2]<<4)+quantiz(cstart,cstep,((CurrentInput.read()*3.18)/(50*rsens)));
+            Sensor.Voltage[(LoopIterator-1)/2]=(Sensor.Voltage[(LoopIterator-1)/2]<<4)+quantiz(vstart,vstep,(VoltageInput.read()*3.18*5.37));
+            Sensor.Temperature[(LoopIterator-1)/2]=(Sensor.Temperature[(LoopIterator-1)/2]<<4)+quantiz(tstart,tstep,(-90.7*3.18*TemperatureInput.read()+190.1543));
         }
-    
-    
-        wait_us(10.0); //  A delay of 10 microseconds between each sensor output. Can be changed.
+// The following lines are used to iterate the select lines from 0 to 15
+        SelectLine0=!(SelectLine0);
  
- }
- 
- 
- 
- 
+        if(LoopIterator%2==1)
+            SelectLine1=!(SelectLine1);
  
- //measurement from current sensor=>  8 sensors in place 
-
-    for(LoopIterator=0; LoopIterator<8; LoopIterator++) 
-{       
-        //following lines read the sensor values and stores them in 'SensorData' structure variable 'Sensor'
-        SensorUQ.Current[LoopIterator]=(CurrentInput.read()*3.3/(50*rsens));
-        if(LoopIterator%2==0)
-            SensorQuantised.Current[LoopIterator/2]=quantiz(cstart,cstep,SensorUQ.Current[LoopIterator]);
-        else
-            SensorQuantised.Current[(LoopIterator)/2]=SensorQuantised.Current[(LoopIterator)/2]<<4+quantiz(cstart,cstep,SensorUQ.Current[LoopIterator]);
-
+        if(LoopIterator%4==3)
+            SelectLine2=!(SelectLine2);
+ 
+        if(LoopIterator%8==7)
+            SelectLine3=!(SelectLine3);
         
-        // The following lines are used to iterate the select lines from 0 to 7
-        //following is an algorithm similar to counting binary numbers of 3 bits
-        for(SelectLineIterator=2;SelectLineIterator>=0;SelectLineIterator--)
-        {
-            if(SelectLinesB[SelectLineIterator]==0)
-            {
-                SelectLinesB[SelectLineIterator]=1;
-                break;
-            }
-            else SelectLinesB[SelectLineIterator]=0;
-    
-        }
-    
-    
         wait_us(10.0); //  A delay of 10 microseconds between each sensor output. Can be changed.
  
-}
-    
-    
-//measurement of temperature
-//temperature measurement=> 4 thermistors, 1 temperature sensor
-//mux line 1=>temp sensor, mux lines 2 to 5 =>thermistors
-
-    for(LoopIterator=0; LoopIterator<5; LoopIterator++) 
-{       
-        //following lines read the sensor values and stores them in 'SensorData' structure variable 'Sensor'
-        SensorUQ.Temperature[LoopIterator]=(-90.7*3.3*TemperatureInput.read()+190.1543);
-        voltage_thermistor=TemperatureInput.read()*3.3;//voltage across thermistor
-        resistance_thermistor=24000*voltage_thermistor/(3.3-voltage_thermistor);//resistance of thermistor
-        //PanelTemperature will be updated depending on voltage_thermistor value later in the lines to follow
-        
-        if(LoopIterator%2==0)
-     {                
-            if(LoopIterator<1)                      //->corresponding to temperature sensor
-                SensorQuantised.Temperature[(LoopIterator)/2]=quantiz(tstart,tstep,SensorUQ.Temperature[LoopIterator]);
-         
-            else                                    //->corresponding to thermistor
-            {    
-                if(voltage_thermistor<1.378) //Temperature>12 degC
-                    SensorUQ.PanelTemperature[(LoopIterator-1)]=(3694/log(24.032242*resistance_thermistor));
-                    
-                else   
-                    SensorUQ.PanelTemperature[(LoopIterator-1)]=(3365.4792/log(7.60404*resistance_thermistor));
-                    
-                    
-                SensorQuantised.PanelTemperature[(LoopIterator-1)/2]=quantiz(tstart_thermistor,tstep_thermistor,SensorUQ.PanelTemperature[(LoopIterator-1)]);
-                    
-            }
-            
-     } 
+    }
+   
+       printf("\nVoltage  is %u\n",Shortbeacon.Voltage[0]);
+       printf("\nCurrent  is %u\n",Shortbeacon.Temp[0]);
+       
     
-    else
-     {           
-            if(LoopIterator<1)
-                SensorQuantised.Temperature[(LoopIterator)/2]=SensorQuantised.Temperature[(LoopIterator)/2]<<4+quantiz(tstart,tstep,SensorUQ.Temperature[LoopIterator]); 
-            
-            else
-             {  
-                if(voltage_thermistor<1.378) //Temperature>12 degC 
-                     SensorUQ.PanelTemperature[LoopIterator-1]=(3694/log(24.032242*resistance_thermistor));
-                                    
-                  
-                else
-                     SensorUQ.PanelTemperature[LoopIterator-1]=(3365.4792/log(7.60404*resistance_thermistor));
-                    
-                SensorQuantised.PanelTemperature[(LoopIterator-1)/2]=SensorQuantised.PanelTemperature[(LoopIterator-1)/2]<<4+quantiz(tstart_thermistor,tstep_thermistor,SensorUQ.PanelTemperature[LoopIterator-1]);
-                  
-            }
-            
-      }
-      
-
-    
-    
-// The following lines are used to iterate the select lines from 0 to 4
-    
-       //following is an algorithm similar to counting binary numbers of 4 bit
-       for(SelectLineIterator=3;SelectLineIterator>=0;SelectLineIterator--)
-        {
-            if(SelectLinesC[SelectLineIterator]==0)
-            {
-                SelectLinesC[SelectLineIterator]=1;
-                break;
-            }
-            else SelectLinesC[SelectLineIterator]=0;
-    
-        }
-    
-    
-        wait_us(10.0); //  A delay of 10 microseconds between each sensor output. Can be changed.
         
+ printf("\nExited function HK MAIN\n");
 }
-
-
-
-    //update battery gauge parameters->
-    float batteryparameters[4];//to populate battery parameters of struct variable Sensor
-    FUNC_BATTERYGAUGE_MAIN(batteryparameters);//passing array to function 
-    
-    SensorUQ.Vcell=batteryparameters[0];
-    SensorUQ.soc=batteryparameters[1];
-    SensorUQ.crate=batteryparameters[2];
-    SensorUQ.alerts=batteryparameters[3];
-    
-    SensorQuantised.Vcell_soc=quantiz(Vcell_start,Vcell_step,SensorUQ.Vcell);
-    SensorQuantised.Vcell_soc=SensorQuantised.Vcell_soc<<4+quantiz(soc_start,soc_step,SensorUQ.soc);
-    SensorQuantised.alerts=SensorUQ.alerts;
-    SensorQuantised.crate=quantiz(crate_start,crate_step,SensorUQ.crate);   
-
-    
-    //update magnetometer data->
-    //populate values in structure variable 'Sensor' from data to be given by Green
-     SensorQuantised.AngularSpeed[0]=quantiz(AngularSpeed_start,AngularSpeed_step,SensorUQ.AngularSpeed[1]);
-     SensorQuantised.AngularSpeed[0]=SensorQuantised.AngularSpeed[0]<<4+quantiz(AngularSpeed_start,AngularSpeed_step,SensorUQ.AngularSpeed[0]);
-     SensorQuantised.AngularSpeed[1]=quantiz(AngularSpeed_start,AngularSpeed_step,SensorUQ.AngularSpeed[2]);
-     
-     //update gyro data->
-    //populate values in structure variable 'Sensor' from data to be given by Green
-     SensorQuantised.Bnewvalue[0]=quantiz(Bnewvalue_start,Bnewvalue_step,SensorUQ.Bnewvalue[1]);
-     SensorQuantised.Bnewvalue[0]=SensorQuantised.Bnewvalue[0]<<4+quantiz(Bnewvalue_start,Bnewvalue_step,SensorUQ.Bnewvalue[0]);
-     SensorQuantised.Bnewvalue[1]=quantiz(Bnewvalue_start,Bnewvalue_step,SensorUQ.Bnewvalue[2]);
-
-     
-     
-     
-      //update beacon structure
-    init_beacon(&Shortbeacon,SensorQuantised);//Shortbeacon is passed 
-    
-    
-}
-
-
-void FUNC_BATTERYGAUGE_MAIN(float array[])
-{
-    float vcell=master.vcell();
-    float soc=master.soc();
-    float crate=master.crate();
-    
-    printf("\nVcell=%f",vcell);
-    printf("\nSOC=%f",soc);
-    printf("\nC_rate=%f",crate);
-    
-    array[0]=vcell;
-    array[1]=soc;
-    array[2]=crate;
-    if (master.alerting()== true)       //alert is on
-    {   
-        array[3]=master.alertFlags();
-        master.clearAlert();//clear alert
-        master.clearAlertFlags();//clear all alert flags
-    }
-    
-    
-}
-
-void FUNC_BATTERYGAUGE_INIT()
-{
-    master.disable_sleep();
-    master.disable_hibernate();
-    master.socChangeAlertEnabled(true);//enabling alert on soc changing by 1%
-    master.emptyAlertThreshold(1);//giving minimum value to disable it to disabling it----------------------
-    master.vAlertMinMaxThreshold();//set min, max value of Valrt register
-    master.vResetThresholdSet();//set threshold voltage for reset
-    master.vResetAlertEnabled(true);//enable alert on reset for V < Vreset
-}
\ No newline at end of file