protegemed, aquisição via A/D simples utilizando interrupção do timer

Dependencies:   EthernetInterface NTPClient mbed-rtos mbed

Fork of ptgm_semDMA by Marcelo Rebonatto

Revision:
0:fac116e94d44
Child:
1:8129536051df
diff -r 000000000000 -r fac116e94d44 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Jan 05 11:47:35 2016 +0000
@@ -0,0 +1,184 @@
+/* 
+    Projeto teste de Enviar dados coletados sem calcular a FFT.
+    Aquisição das amostras realizada sem DMA
+    
+*/
+
+#define MSGWINDOW "Version 4"
+
+#include <stdio.h>
+
+#include "mbed.h"
+#include "rtos.h"
+#include "cmsis_os.h"
+#include "EthernetInterface.h"
+#include "Settings.h"
+#include "Capture.h"
+#include "Http_post.h"
+#include "SignalProcessor.h"
+#include "EventDetector.h"
+#include "limites.h"
+
+#include "TelnetServer.h"
+
+#include "tftpsrv.h"
+#include "ntpc.h"
+
+#include "PmedLog.h"
+
+#include "NTPClient.h"
+
+#include "whatchdog.h"
+
+EthernetInterface eth;
+Watchdog wdt;
+
+Semaphore tranca(1);
+
+void InitializeEthernetLink()
+{
+    if(Settings::get_Dhcp())
+        //EthernetIf::Initialize(); //Use DHCP
+        eth.init(); //Use DHCP
+    else
+        //EthernetIf::Initialize(Settings::get_IpAddress(),Settings::get_Netmask(),Settings::get_Gateway());
+        eth.init(Settings::get_IpAddress(),Settings::get_Netmask(),Settings::get_Gateway());
+        
+    //EthernetIf::Connect();
+    eth.connect();
+    //printf("IP Address is %s\n", EthernetIf::get_IpAddress());
+    printf("IP Address is NEW %s\n", eth.getIPAddress());
+}
+
+int main() {
+    float inicio, fim, maior, menor, dif;
+    float inicioc, fimc, maiorc, menorc, difc;
+    Timer t,tc;
+        
+    if ((LPC_WDT->WDMOD >> 2) & 1){
+        //myled4 = 1; 
+        PmedLog::WriteEntry(PMEDLOG_INITIALIZINGWDT);
+    }
+    else{        
+        //myled3 = 1;
+        PmedLog::WriteEntry(PMEDLOG_INITIALIZING);
+    }
+
+    printf("\r\n %s \r\n", MSGWINDOW);
+    FILE *f;
+    
+    Settings::ReadFile();    
+    
+    InitializeEthernetLink();
+    printf("Inicializou link Ethernet\n");
+    
+    //Start HTTP POST service
+    Thread http_post(HttpPost::HttpPost_Thread);        
+           
+    //Start Telnet Service
+    //Thread telnetserver(TelnetServer::TelnetServer_Thread);
+    
+    //Start TFTP Service    
+    //Thread tftpsrv(tftpsrv::tftpsrv_Thread);
+    
+    //Start NTP Client for refresh time
+    //Thread ntpc(ntpc::ntpc_Thread);
+    time_t tempo = time(NULL);
+    if ((tempo+60) < 1420077600) set_time(1420077600);
+    
+   // ntpClient.setTime("192.168.103.101");
+    
+    DisplayRAMBanks();
+        
+    printf(PMEDLOG_INITIALIZINGWDT);
+    printf("\n\n");
+            
+    PmedLog::WriteEntry(PMEDLOG_STARTED);
+    
+    /* start test WahtchDog */
+    DigitalOut led1(LED1);
+    int i, n = 0;
+    //int tatual, tnovo;
+    float rms[NUMBER_OF_CHANNELS], mv2[NUMBER_OF_CHANNELS];
+    int under[NUMBER_OF_CHANNELS], over[NUMBER_OF_CHANNELS];
+    
+    wdt.kick(10.0);  
+    
+    //Capture::Initialize();
+       
+    while(1)    
+    {
+        tranca.wait();
+        t.start();
+        inicio = t.read();
+                
+        //get sample values from 6 channels
+        Capture::AcquireValues();
+        
+        fim = t.read();
+        dif = fim-inicio;
+        
+        if (n == 0)
+            maior = menor = dif;
+            
+        if (dif > maior)
+            maior = dif;
+        if (dif < menor)
+            menor = dif;         
+        t.reset();
+        t.stop();           
+        tranca.release();
+        
+        tranca.wait();
+        tc.start();
+        inicioc = tc.read();
+        // Calcula o RMS dos 6 canais
+        SignalProcessor::CalculateRMSBulk(rms, mv2, under, over);
+        fimc = tc.read();
+        difc = fimc-inicioc;
+        
+        if (n == 0)
+            maiorc = menorc = difc;
+            
+        if (difc > maiorc)
+            maiorc = difc;
+        if (difc < menorc)
+            menorc = difc;                    
+                
+        for(i=0;i<6;i++){
+            EventDetector::get_Detector(i).ProcessEvent(rms[i], mv2[i], under[i], over[i]);
+        }
+
+        n++;
+        if(n % 60 == 0)
+        {
+            printf("%.2f %.0f %.2f %.0f\t%.2f %.0f %.2f %.0f\t%.2f %.0f %.2f %.0f\n",rms[0], mv2[0],rms[1],mv2[1],rms[2],mv2[2],rms[3],mv2[3],rms[4],mv2[4],rms[5],mv2[5]);
+            led1 = !led1;            
+         //   n=0;    
+                                    
+            PmedLog::Mark();            
+        }
+        
+        if (n % 600 == 0){
+            printf("Captura: Maior %f Menor %f\tCalculo Maior %f Menor %f\n", maior, menor, maiorc, menorc);                               
+        }
+        
+        // End of main loop so "kick" to reset watchdog timer and avoid a reset
+        wdt.kick();        
+        tc.reset();
+        tc.stop();
+        tranca.release();
+    }    
+       
+    while(1){//never reaches here  
+        PmedLog::WriteEntry(PMEDLOG_WRONGCODE);
+        printf("Reset\n");
+        f = fopen(FILENAMERESET, "a");
+        if (f == NULL)            
+            f = fopen(FILENAMERESET, "w");
+        fprintf(f, "Laco Errado\n");
+        fclose(f);
+        Thread::yield();
+    }
+}
+