Function generator

Dependencies:   Serial_HL mbed

Revision:
3:c8c3b755ef54
Parent:
2:100244cef3d6
--- a/FuncGenMain.cpp	Thu Mar 17 13:45:13 2016 +0000
+++ b/FuncGenMain.cpp	Tue May 14 12:16:55 2019 +0000
@@ -5,6 +5,7 @@
 
 SerialBLK pc(USBTX, USBRX);
 SvProtocol ua0(&pc);
+AnalogOut dacout(p18);
 
 // BusOut leds(LED1,LED2,LED3,LED4); Bertl14
 // M0-Board
@@ -12,33 +13,32 @@
 
 void CommandHandler();
 void ExecSignalChain();
+void output();
 
 RectGen fg1;
+SignedRampGen rg1;
+TriangleGen tg1;
+SinusGen sg1;
 
-float ampl1 = 1.0; //
+Ticker ticker;
+
+float ampl1 = 0.5; 
 float v1; // Wert nach dem Koeffizientenglied
+float v2;
+float v3;
+float v4;
+
+int mode = 1;
 
 int main(void)
 {
     pc.format(8,SerialBLK::None,1);
-    pc.baud(500000); // 115200
+    pc.baud(115200); // 115200
     leds = 9;
-    ua0.SvMessage("FuncGenMain"); // Meldung zum PC senden
-
-    Timer stw;
-    stw.start();
+    ua0.SvMessage("FuncGenMain"); // Meldung zum PC senden    
+    ticker.attach_us(&output,45);
     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;
 }
@@ -49,7 +49,28 @@
 void ExecSignalChain()
 {
     fg1.CalcOneStep();
-    v1 = ampl1 * fg1.val; // Koeffizientenglied rechnen
+    v1 = 0.5 + ampl1 * fg1.val; // Koeffizientenglied rechnen 
+    
+    rg1.CalcOneStep();
+    v2 = 0.5 + ampl1 * rg1.val;
+    
+    tg1.CalcOneStep();
+    v3 = 0.5 + ampl1 * tg1.val;
+    
+    sg1.CalcOneStep();
+    v4 = 0.5 + ampl1 * sg1.val;
+}
+void output()
+{
+    ExecSignalChain();
+    if(mode==1)
+        dacout = v1;
+    else if(mode==2)
+        dacout = v2;
+    else if(mode==3)
+        dacout = v3;
+    else
+        dacout = v4;
 }
 
 void CommandHandler()
@@ -67,13 +88,23 @@
     if( cmd==2 ) {
         float frequ = ua0.ReadF();
         fg1.SetFrequ(frequ);
+        rg1.SetFrequ(frequ);
+        tg1.SetFrequ(frequ);   
+        sg1.SetFrequ(frequ); 
         ua0.SvMessage("Set Frequ");
     }
-    // mit dem Command=3 die Amplitude verstellen
     if( cmd==3 ) {
-        ampl1 = ua0.ReadF();
-        ua0.SvMessage("Set Ampl");
+        int points = ua0.ReadI16();
+        fg1.SetPointsPerPeriod(points);
+        rg1.SetPointsPerPeriod(points);
+        tg1.SetPointsPerPeriod(points);   
+        ua0.SvMessage("Set Points");
+    }   
+    if( cmd ==4)
+    {
+        mode = ua0.ReadI16();
     }
+    
 }