Function generator

Dependencies:   Serial_HL mbed

Committer:
Lenschinki
Date:
Tue May 14 12:16:55 2019 +0000
Revision:
3:c8c3b755ef54
Parent:
2:100244cef3d6
vomit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hollegha2 2:100244cef3d6 1
hollegha2 0:9ac39e20730c 2 #include "mbed.h"
hollegha2 0:9ac39e20730c 3 #include "Serial_HL.h"
hollegha2 2:100244cef3d6 4 #include "FuncGen.h"
hollegha2 0:9ac39e20730c 5
hollegha2 0:9ac39e20730c 6 SerialBLK pc(USBTX, USBRX);
hollegha2 0:9ac39e20730c 7 SvProtocol ua0(&pc);
Lenschinki 3:c8c3b755ef54 8 AnalogOut dacout(p18);
hollegha2 0:9ac39e20730c 9
hollegha2 1:e88b745f2ca2 10 // BusOut leds(LED1,LED2,LED3,LED4); Bertl14
hollegha2 1:e88b745f2ca2 11 // M0-Board
hollegha2 1:e88b745f2ca2 12 BusOut leds(P1_13,P1_12,P1_7,P1_6,P1_4,P1_3,P1_1,P1_0,LED4,LED3,LED2,LED1);
hollegha2 1:e88b745f2ca2 13
hollegha2 2:100244cef3d6 14 void CommandHandler();
hollegha2 2:100244cef3d6 15 void ExecSignalChain();
Lenschinki 3:c8c3b755ef54 16 void output();
hollegha2 0:9ac39e20730c 17
hollegha2 2:100244cef3d6 18 RectGen fg1;
Lenschinki 3:c8c3b755ef54 19 SignedRampGen rg1;
Lenschinki 3:c8c3b755ef54 20 TriangleGen tg1;
Lenschinki 3:c8c3b755ef54 21 SinusGen sg1;
hollegha2 2:100244cef3d6 22
Lenschinki 3:c8c3b755ef54 23 Ticker ticker;
Lenschinki 3:c8c3b755ef54 24
Lenschinki 3:c8c3b755ef54 25 float ampl1 = 0.5;
hollegha2 2:100244cef3d6 26 float v1; // Wert nach dem Koeffizientenglied
Lenschinki 3:c8c3b755ef54 27 float v2;
Lenschinki 3:c8c3b755ef54 28 float v3;
Lenschinki 3:c8c3b755ef54 29 float v4;
Lenschinki 3:c8c3b755ef54 30
Lenschinki 3:c8c3b755ef54 31 int mode = 1;
hollegha2 0:9ac39e20730c 32
hollegha2 0:9ac39e20730c 33 int main(void)
hollegha2 0:9ac39e20730c 34 {
hollegha2 0:9ac39e20730c 35 pc.format(8,SerialBLK::None,1);
Lenschinki 3:c8c3b755ef54 36 pc.baud(115200); // 115200
hollegha2 0:9ac39e20730c 37 leds = 9;
Lenschinki 3:c8c3b755ef54 38 ua0.SvMessage("FuncGenMain"); // Meldung zum PC senden
Lenschinki 3:c8c3b755ef54 39 ticker.attach_us(&output,45);
hollegha2 0:9ac39e20730c 40 while(1) {
hollegha2 0:9ac39e20730c 41 CommandHandler();
hollegha2 0:9ac39e20730c 42 }
hollegha2 0:9ac39e20730c 43 return 1;
hollegha2 0:9ac39e20730c 44 }
hollegha2 0:9ac39e20730c 45
hollegha2 2:100244cef3d6 46 // Einen Abtastschritt der Signalverarbeitungskette durchrechnen
hollegha2 2:100244cef3d6 47 // 100Hz zum Testen und alles Visualisieren
hollegha2 2:100244cef3d6 48 // 40kHz zum Anhören
hollegha2 2:100244cef3d6 49 void ExecSignalChain()
hollegha2 2:100244cef3d6 50 {
hollegha2 2:100244cef3d6 51 fg1.CalcOneStep();
Lenschinki 3:c8c3b755ef54 52 v1 = 0.5 + ampl1 * fg1.val; // Koeffizientenglied rechnen
Lenschinki 3:c8c3b755ef54 53
Lenschinki 3:c8c3b755ef54 54 rg1.CalcOneStep();
Lenschinki 3:c8c3b755ef54 55 v2 = 0.5 + ampl1 * rg1.val;
Lenschinki 3:c8c3b755ef54 56
Lenschinki 3:c8c3b755ef54 57 tg1.CalcOneStep();
Lenschinki 3:c8c3b755ef54 58 v3 = 0.5 + ampl1 * tg1.val;
Lenschinki 3:c8c3b755ef54 59
Lenschinki 3:c8c3b755ef54 60 sg1.CalcOneStep();
Lenschinki 3:c8c3b755ef54 61 v4 = 0.5 + ampl1 * sg1.val;
Lenschinki 3:c8c3b755ef54 62 }
Lenschinki 3:c8c3b755ef54 63 void output()
Lenschinki 3:c8c3b755ef54 64 {
Lenschinki 3:c8c3b755ef54 65 ExecSignalChain();
Lenschinki 3:c8c3b755ef54 66 if(mode==1)
Lenschinki 3:c8c3b755ef54 67 dacout = v1;
Lenschinki 3:c8c3b755ef54 68 else if(mode==2)
Lenschinki 3:c8c3b755ef54 69 dacout = v2;
Lenschinki 3:c8c3b755ef54 70 else if(mode==3)
Lenschinki 3:c8c3b755ef54 71 dacout = v3;
Lenschinki 3:c8c3b755ef54 72 else
Lenschinki 3:c8c3b755ef54 73 dacout = v4;
hollegha2 2:100244cef3d6 74 }
hollegha2 2:100244cef3d6 75
hollegha2 0:9ac39e20730c 76 void CommandHandler()
hollegha2 0:9ac39e20730c 77 {
hollegha2 0:9ac39e20730c 78 uint8_t cmd;
hollegha2 0:9ac39e20730c 79 // Fragen ob überhaupt etwas im RX-Reg steht
hollegha2 0:9ac39e20730c 80 if( !pc.IsDataAvail() )
hollegha2 0:9ac39e20730c 81 return;
hollegha2 0:9ac39e20730c 82
hollegha2 0:9ac39e20730c 83 // wenn etwas im RX-Reg steht
hollegha2 0:9ac39e20730c 84 // Kommando lesen
hollegha2 0:9ac39e20730c 85 cmd = ua0.GetCommand();
hollegha2 0:9ac39e20730c 86
hollegha2 2:100244cef3d6 87 // mit dem Command=2 die Frequenz verstellen
hollegha2 0:9ac39e20730c 88 if( cmd==2 ) {
hollegha2 2:100244cef3d6 89 float frequ = ua0.ReadF();
hollegha2 2:100244cef3d6 90 fg1.SetFrequ(frequ);
Lenschinki 3:c8c3b755ef54 91 rg1.SetFrequ(frequ);
Lenschinki 3:c8c3b755ef54 92 tg1.SetFrequ(frequ);
Lenschinki 3:c8c3b755ef54 93 sg1.SetFrequ(frequ);
hollegha2 2:100244cef3d6 94 ua0.SvMessage("Set Frequ");
hollegha2 2:100244cef3d6 95 }
hollegha2 2:100244cef3d6 96 if( cmd==3 ) {
Lenschinki 3:c8c3b755ef54 97 int points = ua0.ReadI16();
Lenschinki 3:c8c3b755ef54 98 fg1.SetPointsPerPeriod(points);
Lenschinki 3:c8c3b755ef54 99 rg1.SetPointsPerPeriod(points);
Lenschinki 3:c8c3b755ef54 100 tg1.SetPointsPerPeriod(points);
Lenschinki 3:c8c3b755ef54 101 ua0.SvMessage("Set Points");
Lenschinki 3:c8c3b755ef54 102 }
Lenschinki 3:c8c3b755ef54 103 if( cmd ==4)
Lenschinki 3:c8c3b755ef54 104 {
Lenschinki 3:c8c3b755ef54 105 mode = ua0.ReadI16();
hollegha2 0:9ac39e20730c 106 }
Lenschinki 3:c8c3b755ef54 107
hollegha2 0:9ac39e20730c 108 }
hollegha2 0:9ac39e20730c 109
hollegha2 0:9ac39e20730c 110