Function generator

Dependencies:   Serial_HL mbed

Revision:
2:100244cef3d6
Parent:
1:e88b745f2ca2
Child:
3:c8c3b755ef54
diff -r e88b745f2ca2 -r 100244cef3d6 FuncGenMain.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/FuncGenMain.cpp	Thu Mar 17 13:45:13 2016 +0000
@@ -0,0 +1,79 @@
+
+#include "mbed.h"
+#include "Serial_HL.h"
+#include "FuncGen.h"
+
+SerialBLK pc(USBTX, USBRX);
+SvProtocol ua0(&pc);
+
+// BusOut leds(LED1,LED2,LED3,LED4); Bertl14
+// M0-Board
+BusOut leds(P1_13,P1_12,P1_7,P1_6,P1_4,P1_3,P1_1,P1_0,LED4,LED3,LED2,LED1);
+
+void CommandHandler();
+void ExecSignalChain();
+
+RectGen fg1;
+
+float ampl1 = 1.0; //
+float v1; // Wert nach dem Koeffizientenglied
+
+int main(void)
+{
+    pc.format(8,SerialBLK::None,1);
+    pc.baud(500000); // 115200
+    leds = 9;
+    ua0.SvMessage("FuncGenMain"); // Meldung zum PC senden
+
+    Timer stw;
+    stw.start();
+    while(1) {
+        CommandHandler();
+        if( (stw.read_ms()>10) ) { // 100Hz
+            // dieser Teil wird mit 10Hz aufgerufen
+            stw.reset();
+            ExecSignalChain();
+            if( ua0.acqON ) {
+                // nur wenn vom PC aus das Senden eingeschaltet wurde
+                // wird auch etwas gesendet
+                ua0.WriteSV(1, v1);
+            }
+        }
+    }
+    return 1;
+}
+
+// Einen Abtastschritt der Signalverarbeitungskette durchrechnen
+// 100Hz zum Testen und alles Visualisieren
+// 40kHz zum Anhören
+void ExecSignalChain()
+{
+    fg1.CalcOneStep();
+    v1 = ampl1 * fg1.val; // Koeffizientenglied rechnen
+}
+
+void CommandHandler()
+{
+    uint8_t cmd;
+    // Fragen ob überhaupt etwas im RX-Reg steht
+    if( !pc.IsDataAvail() )
+        return;
+
+    // wenn etwas im RX-Reg steht
+    // Kommando lesen
+    cmd = ua0.GetCommand();
+
+    // mit dem Command=2 die Frequenz verstellen
+    if( cmd==2 ) {
+        float frequ = ua0.ReadF();
+        fg1.SetFrequ(frequ);
+        ua0.SvMessage("Set Frequ");
+    }
+    // mit dem Command=3 die Amplitude verstellen
+    if( cmd==3 ) {
+        ampl1 = ua0.ReadF();
+        ua0.SvMessage("Set Ampl");
+    }
+}
+
+