ADC_acs712

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
margadon
Date:
Mon Feb 16 07:55:22 2015 +0000
Parent:
0:99e1e788eb9a
Commit message:
ACS712

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
subroute.h Show diff for this revision Revisions of this file
diff -r 99e1e788eb9a -r 73c1e8f734a4 main.cpp
--- a/main.cpp	Mon Feb 09 09:38:16 2015 +0000
+++ b/main.cpp	Mon Feb 16 07:55:22 2015 +0000
@@ -1,5 +1,4 @@
 #include "mbed.h"
-//#include "subroute.h"
 
 //Serial pc(D8, D2);/* Serial1 tx rx */
 Serial pc(USBTX, USBRX);  // tx, rx
@@ -12,21 +11,13 @@
 // значения измеренные АЦП value0- среднее, value - выпрямленное Raw - неусредненное
 long value, value0, valueRaw0, valueRaw, value2; 
 int zeroLevelAdc=0;
-int max=0,
-    min=0,
-    amp=0;  
+int max,min,amp;  
 int aver;    
- 
-//uint16_t meas = analog_value.read_u16(); // Converts and read the analog input value
-
-//Serial pc(PA_11, PA_12);/* Serial6 tx rx */
-// перспектива для случая с прерываниями
-//const int FS_ = 12000;  // Sampling frequency: 12 kHz
-//ADC_Intr adc_(A0, FS_); // for AD using interrupt
 
 //обработчик который формирует массив значений ADC по которому усредняется
 long massHandler(long incom/*входная вел*/, int n/*длина массива*/){
     int average=0;
+    p1=massAdc; 
     for (int i=n-1;i>0;i--){
         massAdc[i]=massAdc[i-1];
         average=average+massAdc[i];
@@ -35,61 +26,57 @@
     average=(average+massAdc[0])/n;
     return average;
     };
-
+    
+//long massHandler2(long incom/*входная вел*/, int n/*длина массива*/){
+/*
+    int average=0;
+    p1=massAdc;
+    for (int i=n-1;i>0;i--){
+        massAdc[i]=massAdc[i-1];
+        average=average+massAdc[i];
+        }
+    massAdc[0]=incom; 
+    average=(average+massAdc[0])/n;
+    return average;
+    };    
+*/
 // обработчик усреднения для цикла main
-long massHandlerMain(long incom/*входная вел*/, int n/*длина массива*/)
+long maxMinCount(long incom/*входная вел*/, int n/*длина массива*/)
 {
     int average=0;
+    max=0,min=10000;
     for (int i=n-1;i>0;i--)
     {
-        if (massAdcMain[i]>massAdcMain[i-1])max=massAdcMain[i]; else max=massAdcMain[i-1];
-        if (massAdcMain[i]<massAdcMain[i-1])min=massAdcMain[i]; else min=massAdcMain[i-1];
+        if (massAdcMain[i]>max){max=massAdcMain[i];}
+        if (massAdcMain[i]<min){min=massAdcMain[i];}// else min=massAdcMain[i-1];
         massAdcMain[i]=massAdcMain[i-1];
         average=average+massAdcMain[i];
     }
-    amp=max-min;    
+    if (min==0)amp=40; else amp=max-min;    
     massAdcMain[0]=incom; 
     average=(average+massAdcMain[0])/n;
-    return average;
+    return amp;
 };
-
-void measure()
-{
-    value2=(((analog_value.read_u16()>>4)));// в миллиамперах - надо умножить на 4.4
-    value=massHandler(abs(value2),50);
-    myled = 1;
-}
-
+//*
 void measure0()
 {
-    //valueRaw0=(((analog_value.read_u16()>>4)-zeroLevelAdc));// в миллиамперах - надо умножить на 4.4
     valueRaw=(((analog_value.read_u16()>>4)));// в миллиамперах - надо умножить на 4.4
-    zeroLevelAdc=massHandler(valueRaw,1);
-    //zeroLevelAdc=valueRaw;
-    myled = 0;
+    zeroLevelAdc=massHandler(valueRaw,3);
+    aver = maxMinCount(zeroLevelAdc,20);
 }
-
-void printt(){pc.printf("%d\r\n",aver);}
+//*/
+void printt(){pc.printf("%d\r\n",aver);} // по тикеру печатает на графике
 
 int main()
 {
-    t1.attach(&measure0, 0.2); // раз в 10 мсек запускает измерение тока для выч. нуля (2 выборки на период сетевого напр-я)
-    //tprint.attach(&printt,0.2);
+    t1.attach(&measure0, 0.1); // раз в 100 мсек запускает измерение тока для выч. нуля (2 выборки на период сетевого напр-я)
+    tprint.attach(&printt,0.2);
     //t2.attach(&measure,1.5);// раз в 4 мсек запускает измерение тока 
-    p1=massAdc; // в p1 зап-ся адрес первого элемента массива зн-ий ADC
+    //p1=massAdc; // в p1 зап-ся адрес первого элемента массива зн-ий ADC
     while(1)
     {
-        //myled = 1; /*// LED is ON*/wait(0.001); /*// 200 ms*/myled = 0; /*// LED is OFF */ wait(0.2); /*// 1 sec*/
-        wait(0.1); 
-        //aver = massHandlerMain(zeroLevelAdc,40);
-      //  if (1) {
-           // wait(0.03);
-        //};
-            //for (int i=20;i>0;i--)pc.printf("> %d",*p1++,p1);
-            //pc.printf("%d mes=%d raw0= %d\r\n",value0,value2,valueRaw0);
-            pc.printf("%d\r\n",zeroLevelAdc);
-            //pc.printf("%d\r\n",aver);
-            //pc.printf("min=%d max=%d amp=%d\r\n",min,max,amp);
-            p1=massAdc;
+        
+        if (amp>45) myled=1; else myled=0;
     }
-}
\ No newline at end of file
+}
+
diff -r 99e1e788eb9a -r 73c1e8f734a4 subroute.h
--- a/subroute.h	Mon Feb 09 09:38:16 2015 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-//Serial pc(PA_11, PA_12);/* Serial6 tx rx */
-
-void subr(int  *incom, int out){
-    //pc.printf("Surb tarted \r\n");
-    out =out +*incom; 
-    }
-    
\ No newline at end of file