Stefan Kiegerl
/
FuncGen
Function Generator for TINF 2021
src/FuncGenMain_21.cpp
- Committer:
- stkiegerl
- Date:
- 2021-03-18
- Revision:
- 2:d2e5b6c37b4b
- Parent:
- 1:dbd814e65f1d
File content as of revision 2:d2e5b6c37b4b:
#include "mbed.h" #include "Serial_HL.h" #include "FuncGenFSST.h" SerialBLK pc(USBTX, USBRX); SvProtocol ua0(&pc); SignedRampGen fg1; float ampl1 = 1.0; float v1 = 0; // ausgang nach der Amplitude void CommandHandler(); void ExecSignalChain(); Ticker tc; AnalogOut dac1(PA_5); int main(void) { pc.format(8,SerialBLK::None,1); pc.baud(115200); // 115200 ua0.SvMessage("FuncGen"); // Meldung zum PC senden // tc.attach_us(&ExecSignalChain, 100); // Mit timer-Interrupt für 10khz audio Timer stw; stw.start(); while(1) { ua0.SvMessage("Communicating"); // send test message ThisThread::sleep_for(1000); CommandHandler(); if( stw.read_us()>10000 ) { // 100Hz stw.reset(); ExecSignalChain(); // zur simulation mit 100Hz aufrufen if( ua0.acqON ) { ua0.WriteSV(1, v1); } } } return 1; } void ExecSignalChain() { fg1.CalcOneStep(); v1 = ampl1*fg1.val; // Achtung skalierung und Übersteuerung bedenken // dac1.write( 0.5 + 0.5*v1); } void CommandHandler() { uint8_t cmd; if( !pc.IsDataAvail() ) return; cmd = ua0.GetCommand(); if( cmd==2 ) { fg1.SetFrequ(ua0.ReadF()); ua0.SvMessage("Set Frequ"); } if( cmd==3 ) { ampl1=ua0.ReadF(); ua0.SvMessage("Set Ampl."); } }