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.");
	}
}