Function Generator for TINF 2021

Committer:
stkiegerl
Date:
Thu Mar 18 21:23:40 2021 +0100
Revision:
1:dbd814e65f1d
Parent:
0:464b401734fd
2nd version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
stkiegerl 0:464b401734fd 1 #include "mbed.h"
stkiegerl 0:464b401734fd 2 #include "Serial_HL.h"
stkiegerl 0:464b401734fd 3 #include "FuncGenFSST.h"
stkiegerl 0:464b401734fd 4
stkiegerl 0:464b401734fd 5 SerialBLK pc(USBTX, USBRX);
stkiegerl 0:464b401734fd 6 SvProtocol ua0(&pc);
stkiegerl 0:464b401734fd 7
stkiegerl 1:dbd814e65f1d 8 SignedRampGen fg1;
stkiegerl 1:dbd814e65f1d 9 float ampl1 = 1.0;
stkiegerl 1:dbd814e65f1d 10 float v1 = 0; // ausgang nach der Amplitude
stkiegerl 1:dbd814e65f1d 11
stkiegerl 0:464b401734fd 12 void CommandHandler();
stkiegerl 0:464b401734fd 13
stkiegerl 1:dbd814e65f1d 14 void ExecSignalChain();
stkiegerl 1:dbd814e65f1d 15
stkiegerl 1:dbd814e65f1d 16 Ticker tc;
stkiegerl 1:dbd814e65f1d 17
stkiegerl 1:dbd814e65f1d 18 AnalogOut dac1(PA_5);
stkiegerl 1:dbd814e65f1d 19
stkiegerl 0:464b401734fd 20 int main(void)
stkiegerl 0:464b401734fd 21 {
stkiegerl 0:464b401734fd 22 pc.format(8,SerialBLK::None,1);
stkiegerl 0:464b401734fd 23 pc.baud(115200); // 115200
stkiegerl 0:464b401734fd 24 ua0.SvMessage("FuncGen"); // Meldung zum PC senden
stkiegerl 0:464b401734fd 25
stkiegerl 1:dbd814e65f1d 26 // tc.attach_us(&ExecSignalChain, 100); // Mit timer-Interrupt für 10khz audio
stkiegerl 1:dbd814e65f1d 27
stkiegerl 0:464b401734fd 28 Timer stw; stw.start();
stkiegerl 0:464b401734fd 29 while(1) {
stkiegerl 1:dbd814e65f1d 30
stkiegerl 1:dbd814e65f1d 31 ua0.SvMessage("Communicating"); // send test message
stkiegerl 1:dbd814e65f1d 32 ThisThread::sleep_for(1000);
stkiegerl 1:dbd814e65f1d 33
stkiegerl 0:464b401734fd 34 CommandHandler();
stkiegerl 1:dbd814e65f1d 35 if( stw.read_us()>10000 ) { // 100Hz
stkiegerl 0:464b401734fd 36 stw.reset();
stkiegerl 1:dbd814e65f1d 37 ExecSignalChain(); // zur simulation mit 100Hz aufrufen
stkiegerl 0:464b401734fd 38 if( ua0.acqON ) {
stkiegerl 1:dbd814e65f1d 39 ua0.WriteSV(1, v1);
stkiegerl 0:464b401734fd 40 }
stkiegerl 0:464b401734fd 41 }
stkiegerl 0:464b401734fd 42 }
stkiegerl 0:464b401734fd 43 return 1;
stkiegerl 0:464b401734fd 44 }
stkiegerl 0:464b401734fd 45
stkiegerl 1:dbd814e65f1d 46 void ExecSignalChain()
stkiegerl 1:dbd814e65f1d 47 {
stkiegerl 1:dbd814e65f1d 48 fg1.CalcOneStep();
stkiegerl 1:dbd814e65f1d 49 v1 = ampl1*fg1.val;
stkiegerl 1:dbd814e65f1d 50 // Achtung skalierung und Übersteuerung bedenken
stkiegerl 1:dbd814e65f1d 51 // dac1.write( 0.5 + 0.5*v1);
stkiegerl 1:dbd814e65f1d 52 }
stkiegerl 1:dbd814e65f1d 53
stkiegerl 0:464b401734fd 54 void CommandHandler()
stkiegerl 0:464b401734fd 55 {
stkiegerl 0:464b401734fd 56 uint8_t cmd;
stkiegerl 0:464b401734fd 57 if( !pc.IsDataAvail() )
stkiegerl 0:464b401734fd 58 return;
stkiegerl 1:dbd814e65f1d 59
stkiegerl 1:dbd814e65f1d 60 cmd = ua0.GetCommand();
stkiegerl 1:dbd814e65f1d 61
stkiegerl 1:dbd814e65f1d 62 if( cmd==2 )
stkiegerl 1:dbd814e65f1d 63 {
stkiegerl 1:dbd814e65f1d 64 fg1.SetFrequ(ua0.ReadF());
stkiegerl 1:dbd814e65f1d 65 ua0.SvMessage("Set Frequ");
stkiegerl 1:dbd814e65f1d 66 }
stkiegerl 1:dbd814e65f1d 67
stkiegerl 1:dbd814e65f1d 68 if( cmd==3 )
stkiegerl 1:dbd814e65f1d 69 {
stkiegerl 1:dbd814e65f1d 70 ampl1=ua0.ReadF();
stkiegerl 1:dbd814e65f1d 71 ua0.SvMessage("Set Ampl.");
stkiegerl 1:dbd814e65f1d 72 }
stkiegerl 1:dbd814e65f1d 73 }