Funcgen
Embed:
(wiki syntax)
Show/hide line numbers
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 }
Generated on Thu Jul 14 2022 03:18:04 by
1.7.2