test AnalogIn_Diff.lib for board K64F

Dependencies:   AnalogIn_Diff_ok mbed

Files at this revision

API Documentation at this revision

Comitter:
fblanc
Date:
Wed Jul 30 13:09:49 2014 +0000
Parent:
4:bcd2a4b5feaf
Child:
6:4bdadb8765ba
Commit message:
dectect 20ms

Changed in this revision

AnalogIn_Diff.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show diff for this revision Revisions of this file
mbed.lib Show annotated file Show diff for this revision Revisions of this file
--- a/AnalogIn_Diff.lib	Tue Jul 22 15:02:09 2014 +0000
+++ b/AnalogIn_Diff.lib	Wed Jul 30 13:09:49 2014 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/JimCarver/code/AnalogIn_Diff/#7b36e4381d83
+http://mbed.org/users/JimCarver/code/AnalogIn_Diff/#c8afb196b366
--- 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
--- a/mbed.bld	Tue Jul 22 15:02:09 2014 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-http://mbed.org/users/mbed_official/code/mbed/builds/04dd9b1680ae
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.lib	Wed Jul 30 13:09:49 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/#04dd9b1680ae