test AnalogIn_Diff.lib for board K64F

Dependencies:   AnalogIn_Diff_ok mbed

Revision:
5:f994e394a7ec
Parent:
4:bcd2a4b5feaf
Child:
6:4bdadb8765ba
--- a/main.cpp	Tue Jul 22 15:02:09 2014 +0000
+++ b/main.cpp	Wed Jul 30 13:09:49 2014 +0000
@@ -3,20 +3,29 @@
 #include "math.h"
 #include "MovingAverage.h"
 
-#define VERSION "21_07_2014"
+#define VERSION "30_07_2014"
 #define CIBLE "K64F"
 
 #define max(a,b) (a>=b?a:b)
 #define min(a,b) (a<=b?a:b)
+
+#define R1 1.0E6
+#define R2 510.0
+#define ADCVREF 3.3
+#define GAIN ((double)((R1+R2)*2.0*ADCVREF/R2)/65535.0)
 #define UAC_NON 230.0
-#define UAC_MAX UAC_NON*1.1
-#define UAC_MIN UAC_NON*0.9
-#define UAC_NON2 UAC_NON*UAC_NON
-#define UAC_MAX2 UAC_MAX*UAC_MAX
-#define UAC_MIN2 UAC_MIN*UAC_MIN
-#define R1 1E6
-#define R2 
-AnalogIn_Diff a2d(0);
+#define UAC_MAX ((int32_t)((double)UAC_NON*1.1/(double)GAIN))
+#define UAC_MIN ((int32_t)((double)UAC_NON*0.9/(double)GAIN))
+#define UAC_NON2 ((int32_t)((double)UAC_NON/(double)GAIN*(double)UAC_NON/(double)GAIN))
+#define UAC_MAX2 ((int32_t)((double)UAC_MAX*(double)UAC_MAX))
+#define UAC_MIN2 ((int32_t)((double)UAC_MIN*(double)UAC_MIN))
+
+#define FREQ 50//en HZ
+#define TSAMPLE 500 //en µS
+#define NSAMPLE ((int32_t)(1/(double)FREQ *1.0E6/(double)TSAMPLE))
+#define NADC 0
+#define NCHANNEL 1
+AnalogIn_Diff a2d(NADC);
 struct {
     float   gain;
     float   offset;
@@ -34,76 +43,106 @@
 DigitalOut led1(LED_RED);
 DigitalOut led2(LED_GREEN);
 DigitalOut led3(LED_BLUE);
-MovingAverage<float> Trms(20,UAC_NON);
-MovingAverage<float> moy(20,0);
-float min=250000;
-float max=0;
+MovingAverage<int32_t> Trms(NSAMPLE,0);
+MovingAverage<float> moy(NSAMPLE,0.0);
+int32_t min=UAC_NON2;
+int32_t max=UAC_NON2;
+int32_t time_min=0;
+int32_t time_max=0;
 bool min_OK=false;
 void flipADC()
 {
-    
+
     float val;
     led1=1;
 
-    int  val_i32=a2d.read_16(1);
+    int32_t  val_i32=a2d.read_16(NCHANNEL);
     val=(float)val_i32*adc_volt.gain-adc_volt.offset;
 
     moy.Insert(val);
-    Trms.Insert(val*val);
-    val=Trms.GetAverage();
-    max=max(val,max);
-    if(min_OK==true)
-        min=min(val,min);
-    if(val<UAC_MIN2 && F_timer_min ==false) {
+    Trms.Insert(val_i32*val_i32);
+
+    val_i32=Trms.GetAverage();
+
+    //START
+    if(val_i32<UAC_MIN2 && F_timer_min ==false) {
         timer_min.reset();
         timer_min.start();
         F_timer_min = true;
     }
-    if(val>UAC_MIN2 && F_timer_min ==true) {
-        timer_min.stop();
-        F_timer_min = false;
-    }
-    if(val>UAC_MAX2 && F_timer_max ==false) {
+    if(val_i32>UAC_MAX2 && F_timer_max ==false) {
         timer_max.reset();
         timer_max.start();
         F_timer_max = true;
     }
-    if(val<UAC_MAX2 && F_timer_max ==true) {
+    //STOP
+    if(val_i32>UAC_MIN2 && F_timer_min ==true) {
+        timer_min.stop();
+        F_timer_min = false;
+    }
+
+    if(val_i32<UAC_MAX2 && F_timer_max ==true) {
         timer_max.stop();
-
         F_timer_max = false;
     }
-  
+    if(timer_min.read_ms()>20)  {
+        time_min=timer_min.read_ms();
+        min=min(val_i32,min);
+    }
+    if(timer_max.read_ms()>20) {
+        time_max=timer_max.read_ms();
+        max=max(val_i32,max);
+    }
     led1=0;
 }
 
+int k64f_vref(int v)
+{
+// v min 0x0 //-16mV
+
+// V mon 0x20 //0mV
+// V max 0x3F //+16mV
+
+    BW_VREF_SC_VREFEN(1); //The module is enabled
+    BW_VREF_SC_REGEN(1); //Internal 1.75 V regulator is enabled
+    BW_VREF_SC_MODE_LV(0); //Bandgap on only, for stabilization and startup
+    BW_VREF_TRM_TRIM(v);
+    while(BR_VREF_SC_VREFST);// Internal Voltage Reference stable
+    BW_VREF_SC_MODE_LV(1); //High power buffer mode enabled
+    return 0;
+}
 int main()
 {
-    
-  
+
+
     led1=1;
     led2=0;
     led3=1;
     pc.baud(115200);
-    pc.printf("LAAS-CNRS ,TRMS ,%s ,%s\r",CIBLE,VERSION);
-    adc_volt.gain=(3920.0*3.3)/65535.0;
-    adc_volt.offset=-17.0;
+    pc.printf("LAAS-CNRS ,TRMS ,%s ,%s\r\n",CIBLE,VERSION);
+    pc.printf("Tsample:%d ,Nsample:%d\r\n",TSAMPLE,NSAMPLE);
+    pc.printf("Umin:%d ,Umax:%d\r\n",UAC_MIN,UAC_MAX);
+    pc.printf("Umin2:%d ,Umax2:%d\r\n",min,max);
+    pc.printf("gain:%f ,Umon:%0.0f\r\n",GAIN,UAC_NON);
+    //k64f_vref(0x20);
 
-    flipperADC.attach_us(&flipADC, 1000); //200µs
+    adc_volt.gain=GAIN;
+    adc_volt.offset=0.0;
+
+    flipperADC.attach_us(&flipADC, TSAMPLE);
     wait (5);
-    min_OK=true;
- 
+
     while (true) {
 
 
         led3=1;
 
-        pc.printf("RMS=%f \r\n",sqrt(Trms.GetAverage()));
-        pc.printf("min=%0.0f t=%f max=%0.0f t=%f\r\n",sqrt(min),timer_min.read(),sqrt(max),timer_max.read());
-        pc.printf("moy=%f \r\n",moy.GetAverage());
-        
+        pc.printf("RMS= %f ",sqrt((float)Trms.GetAverage())*adc_volt.gain);
+        pc.printf("min=%0.0f t=%d max=%0.0f t=%d ",sqrt((float)min)*adc_volt.gain,time_min,sqrt((float)max)*adc_volt.gain,time_max);
+        pc.printf("moy= %f \r\n",moy.GetAverage());
+
         led3=0;
-        
+
         wait (1);
     }
 }
\ No newline at end of file