Func-Gen - basic setup

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
stkiegerl
Date:
Tue Mar 23 17:13:12 2021 +0000
Parent:
2:3abf5ddd9fc0
Commit message:
-

Changed in this revision

FuncGenFSST.h Show annotated file Show diff for this revision Revisions of this file
FuncGenFSST_21.cpp Show annotated file Show diff for this revision Revisions of this file
FuncGenMain_21.cpp Show annotated file Show diff for this revision Revisions of this file
Tp1Ord.h Show annotated file Show diff for this revision Revisions of this file
--- a/FuncGenFSST.h	Tue Mar 23 17:06:24 2021 +0000
+++ b/FuncGenFSST.h	Tue Mar 23 17:13:12 2021 +0000
@@ -60,7 +60,7 @@
     // Dauer des ON-Pulses in Prozent ( 0..1 )
 		void SetPulsWidth(float aPercent)
 		{  
-			_thrs=aPercent; // möglicherweise andere Formel
+			_thrs=aPercent; // möglicherweise andere Formel
 		}
 
     // Einen Abtastwert berechnen
@@ -87,4 +87,3 @@
 
 
 
-
--- a/FuncGenFSST_21.cpp	Tue Mar 23 17:06:24 2021 +0000
+++ b/FuncGenFSST_21.cpp	Tue Mar 23 17:13:12 2021 +0000
@@ -1,14 +1,25 @@
 
 #include "FuncGenFSST.h"
 
-
-
+SignedRampGen::SignedRampGen()
+{
+    val=0;
+    SetPointsPerPeriod(20);
+}
 
-
-
+void SignedRampGen::SetPointsPerPeriod(float aPoints)
+{
+  _inc = 2.0/aPoints;
+}
 
-
-
+void SignedRampGen::SetFrequ(float aFrequ)
+{
+  SetPointsPerPeriod(1.0/aFrequ);
+}
 
-
-
+void SignedRampGen::CalcOneStep()
+{
+  val = val + _inc;
+  if( val>1.0 )
+    val = -1 + (val - 1.0); 
+}
\ No newline at end of file
--- a/FuncGenMain_21.cpp	Tue Mar 23 17:06:24 2021 +0000
+++ b/FuncGenMain_21.cpp	Tue Mar 23 17:13:12 2021 +0000
@@ -1,49 +1,77 @@
 #include "mbed.h"
 #include "Serial_HL.h"
 #include "FuncGenFSST.h"
+#include "Tp1Ord.h"
 
 SerialBLK pc(USBTX, USBRX);
 SvProtocol ua0(&pc);
 
+SignedRampGen fg1;
+float ampl1 = 1.0;
+float v1 = 0; // ausgang nach der Amplitude
+Tp1Ord tp1;
+
 void CommandHandler();
 
+void ExecSignalChain();
+
+Ticker tc;
+
+AnalogOut dac1(PA_5);
+
 int main(void)
 {
 	pc.format(8,SerialBLK::None,1);
 	pc.baud(500000); // 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) {
 		CommandHandler();
-		if( stw.read_ms()>10 ) { // 100Hz
+		if( stw.read_us()>10000 ) { // 100Hz
 			stw.reset();
+			ExecSignalChain(); // zur simulation mit 100Hz aufrufen
 			if( ua0.acqON ) {
+				ua0.WriteSV(1, v1);
+				ua0.WriteSV(2, tp1.y);
 			}
 		}
 	}
 	return 1;
 }
 
+void ExecSignalChain()
+{
+	fg1.CalcOneStep();
+	v1 = ampl1*fg1.val;
+	tp1.CalcOneStep(v1);
+	// 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.");
+	}
+	if( cmd==4 )
+	{
+		tp1.SetAlpha(ua0.ReadF());
+		ua0.SvMessage("Set Alpha");
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Tp1Ord.h	Tue Mar 23 17:13:12 2021 +0000
@@ -0,0 +1,60 @@
+
+#ifndef Tp1Ord_h
+#define Tp1Ord_h
+
+class Tp1Ord {
+	private:
+		float _alpha;
+		float _beta;
+		float yn_1; // um eine Abtastung verzögertes y
+	public:
+		float y; // momentaner ausgangswert des Filtes
+	public:
+		Tp1Ord();
+
+		// Grenzfrequenz verstellen
+		void SetAlpha(float aAlpha);
+
+		void CalcOneStep(float aX);
+};
+
+Tp1Ord::Tp1Ord()
+{
+	y=yn_1=0;
+	SetAlpha(0.1); // Vernünftiges Alpha setzen
+}
+
+void Tp1Ord::SetAlpha(float aAlpha)
+{
+	_alpha=aAlpha;
+	_beta=1.0f-aAlpha;
+}
+
+void Tp1Ord::CalcOneStep(float aX)
+{
+	y = _alpha*aX + _beta*yn_1;
+	// Verzögerung berechnen
+	yn_1 = y;
+}
+
+#endif
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+