BULME_AHEL20
/
LPC_HL_FUNC_GENERATOR_DAC
Function generator
Diff: FuncGenMain.cpp
- Revision:
- 3:c8c3b755ef54
- Parent:
- 2:100244cef3d6
diff -r 100244cef3d6 -r c8c3b755ef54 FuncGenMain.cpp --- 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(); } + }