V001. 2017_11_30 10:21 Working code from Tuesday's lab session.

Dependencies:   mbed-rtos mbed

Fork of 2017_11_28_ELEC347_Coursework by Chris Hills

DSP Coursework ELEC347 2017-2018 Group members: Matthew Thewsey, Thomas Morris, Samuel Waggett, Christopher Hills .

main.cpp

Committer:
mwthewsey
Date:
2017-12-05
Revision:
16:c91b29c9e9f6
Parent:
13:db76473a3d76

File content as of revision 16:c91b29c9e9f6:

#include "mbed.h"
#include "rtos.h"
#include "Filter.hpp"

unsigned short ADC_DATA;

//TESTED AND WORKING MWT
//Init  values for difference equation
//MBED Class Instances follows
DigitalOut SampLED(LED1);              //Digital Output  (GREEN LED is PB_3, D13 You can use an Oscilloscope on This pin to confirm sample rate)

//Analog Inputs
AnalogIn  Ain(PA_1);                    //Analog Input (Signal Input 0 to +3 Volts)
AnalogOut Aout(PA_4);                   //Analog Output (Signal Input 0 to +3 Volts)

//Declare Threads
Thread t1;
Thread t2;

AnalogIn QDEF(PA_7);                    // Q Factor
AnalogIn BDEF(PA_6);                    // Boost Level
AnalogIn FDEF(PA_5);                    //Centre Frequency
    
//Declare Ticker Rates
float sample_rate = (1.0/35000);        //Rate of sampling
float coeff_rate = (1.0 / 20);          //Rate of updating coefficients

//Initial Input Value
float input = 0.0;

float Fo_Current;
float Boost_Current;
float Q_Current;

//Declare Filter
FILTER BP_filter(48000,10000,-16,2);  //Create object of type Filter(Fs,Fo,Boost,Q)


//Forward Declarations
void sampler(void);
void update(void);


int main()
{
    t2.start(sampler);//Start the Sampler timed interrupt
    t1.start(update);//Update the coeffiecients of the filter
}

void update(void)
{
    while(1){
    Fo_Current = FDEF * 22000 + 10;
    Boost_Current = BDEF * 100 - 50;
    Q_Current = QDEF * 49 + 1;
    
    BP_filter.coeff_update(Fo_Current,Boost_Current,Q_Current);//Coefficient update
    printf("Q = %d \t Boost = %f \t Fo = %d\n\r", BP_filter.Get_Q(), BP_filter.Get_Boost(), BP_filter.Get_Fo());
    Thread::wait(1000);//Sleep the thread for 1 second then re runs the coefficient calculation    
    }
}

void sampler(void)
{
    while(1)
    {
        SampLED = 1;//LED Indicates start of sampling
        input = Ain;//Takes ADC input  as a Varaible type float
        BP_filter.setvalue(input);//Input ADC. N.B. ADC in MBED is 0.0 to 1.0 float!!!!!!
        Aout = BP_filter.getvalue();//Sets the input value to the Class
        SampLED = 0;//LED Indicates end of sampling
        Thread::wait(sample_rate*1000);//Look at this
    }
}