Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of 2017_11_28_ELEC347_Coursework by
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
    }
}
            
    