BULME_AHEL20
/
LPC_HL_FUNC_GENERATOR_DAC
Function generator
Diff: FuncGenMain.cpp
- 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"); + } +} + +