Funcgen

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers FuncGenMain_21.cpp Source File

FuncGenMain_21.cpp

00001 #include "mbed.h"
00002 #include "Serial_HL.h"
00003 #include "FuncGenFSST.h"
00004 #include "Tp1Ord.h"
00005 
00006 
00007 SerialBLK pc(USBTX, USBRX);
00008 SvProtocol ua0(&pc);
00009 
00010 SignedRampGen fg1;
00011 //Complex fg1;
00012 RectGen fg2;
00013 TriangleGen fg3;
00014 //Complex fg4;
00015 
00016 float ampl1 = 1.0;
00017 float v1 = 0; // ausgang nach der Amplitude
00018 Tp1Ord tp1;
00019 float SwitchFuncgen = 1.0;
00020 
00021 
00022 void CommandHandler();
00023 
00024 void ExecSignalChain();
00025 
00026 Ticker tc;
00027 
00028 AnalogOut dac1(PA_5);
00029 
00030 int main(void)
00031 {
00032     pc.format(8,SerialBLK::None,1);
00033     pc.baud(500000); // 115200
00034     ua0.SvMessage("FuncGen"); // Meldung zum PC senden
00035     
00036     // tc.attach_us(&ExecSignalChain, 100); // Mit timer-Interrupt für 10khz audio
00037     
00038     Timer stw; stw.start();
00039     while(1) {
00040         CommandHandler();
00041         if( stw.read_us()>10000 ) { // 100Hz
00042             stw.reset();
00043             ExecSignalChain(); // zur simulation mit 100Hz aufrufen
00044             if( ua0.acqON ) {
00045                 ua0.WriteSV(1, v1);
00046                 ua0.WriteSV(2, tp1.y);
00047             }
00048         }
00049     }
00050     return 1;
00051 }
00052 
00053 void ExecSignalChain()
00054 {
00055     //fg1.CalcOneStep();
00056     //v1 = ampl1*fg1.val;
00057     //tp1.CalcOneStep(v1);
00058     // Achtung skalierung und Übersteuerung bedenken
00059     // dac1.write( 0.5 + 0.5*v1);
00060     if(SwitchFuncgen == 1.0f)
00061     {
00062         fg1.CalcOneStep();
00063         v1 = ampl1*fg1.val;
00064         tp1.CalcOneStep(v1);
00065     }   
00066     
00067     if(SwitchFuncgen == 2.0f)
00068     {
00069         fg2.CalcOneStep();
00070         v1 = ampl1*fg2.val;
00071         tp1.CalcOneStep(v1);
00072     }   
00073     
00074     if(SwitchFuncgen == 3.0f)
00075     {
00076         fg3.CalcOneStep();
00077         v1 = ampl1*fg3.val;
00078         tp1.CalcOneStep(v1);
00079     }   
00080     
00081 }
00082 
00083 void CommandHandler()
00084 {
00085     uint8_t cmd;
00086     if( !pc.IsDataAvail() )
00087         return;
00088     
00089     cmd = ua0.GetCommand();
00090     
00091     if( cmd==2 )
00092     {
00093         if (SwitchFuncgen == 1.0f)
00094         fg1.SetFrequ(ua0.ReadF());
00095         
00096             else if (SwitchFuncgen == 2.0f)
00097             fg2.SetFrequ(ua0.ReadF());
00098         
00099                 else if (SwitchFuncgen == 3.0f)
00100                 fg3.SetFrequ(ua0.ReadF());
00101         
00102         ua0.SvMessage("Set Frequ");
00103     }
00104     
00105     if( cmd==3 )
00106     {
00107         ampl1=ua0.ReadF();
00108         ua0.SvMessage("Set Ampl.");
00109     }
00110     if( cmd==4 )
00111     {
00112         tp1.SetAlpha(ua0.ReadF());
00113         ua0.SvMessage("Set Alpha");
00114     }
00115     
00116     if( cmd==5 )
00117     {
00118         SwitchFuncgen = ua0.ReadF();
00119         ua0.SvMessage("Set Funcgen");
00120     }
00121     if( cmd==6 && SwitchFuncgen == 2.0f)
00122     {
00123         fg2.SetPulsWidth(ua0.ReadF());
00124         ua0.SvMessage("Set PWM");
00125     }
00126     
00127     
00128 }