Konstantinos Fane
/
frequency_measurement_ticks
rfsesf
Diff: main.cpp
- Revision:
- 1:d37c71b35a5a
- Parent:
- 0:b94498823546
- Child:
- 2:250c8d4f4201
--- a/main.cpp Tue Apr 20 15:47:54 2021 +0000 +++ b/main.cpp Thu Apr 22 15:34:40 2021 +0000 @@ -11,37 +11,29 @@ // LCD display C12832 lcd(p5, p7, p6, p8, p11); -//dummy measurement values +//variables used for frequency, period and time interval measruements float m_freq_hz; // = 120730.546423; //*10^6 Hz float m_t_interval_ms; //= 988.056475; +float period = 0.0; +float count1 = 0.0; //result to be displayed float m_result; -//variables used for frequency, period and time interval measruements -float count1 = 0.0; -float ton = 0.0; -float toff = 0.0; -float period = 0.0; - const char* range_scale [3][3] = { {"MHz","KHz","Hz"}, {"ms","ms","s"}, {"ms","ms","s"} }; -/* flag to hold which measurement mode to display - * 0 = Frequency Measurement - * 1 = Period Measurement - * 2 = Time interval Measurement +/* flag to hold which measurement mode to display, 0 = Frequency Measurement, + * 1 = Period Measurement, 2 = Time interval Measurement * to match the index of message display arrays */ int dsp_mode = 0; const char* mode_msg [] = {"Frequency", "Period", "Time Interval"}; /* flag to hold which measurement range to display - * 0 = High Range - * 1 = Medium Range - * 2 = Low Range */ + * 0 = High Range, 1 = Medium Range, 2 = Low Range */ int dsp_range = 0; const char* range_msg [] = {"High Resolution", "Medium Resolution", "Low Resolution"}; @@ -51,8 +43,6 @@ const char* res[] = {""}; //Interrupt to be used in actual implementation to read the input square wave signal -//InterruptIn squareIN(p#) //# = the pin number where the actual signal would be conected to - InterruptIn squareIN(p17); //User interface measurement mode and range selection buttons @@ -60,28 +50,21 @@ InterruptIn range(p15); InterruptIn time_interval(p13); -/*For simulation purposes only, multiplier for the count1, to achieve higher simulated frequencies -InterruptIn incr_freq(p15); -InterruptIn decr_freq(p16); -float multi = 1.0; -void incr(); -void decr();*/ - -//user defined functions to implement the user interface -void user_interface_disp(); +//interrupt service routines +void counter1_isr(); +void freq_calc_isr(); void mode_select(); void range_select(); void time_interval_type_select(); -void result_calculator(); - -//interrupt service routines -void counter1_isr(); -void freq_calc_isr(); //Timeout task2; Ticker freq_meas; //generate a tick Ticker ui_disp; //generate the 1s interrupt, to measure frequency (direct frequency measurement) -Ticker result_calc; + +//user defined functions to implement the user interface and result calculation +void user_interface_disp(); +void result_calculator(); + int main() { @@ -90,29 +73,16 @@ squareIN.rise(&counter1_isr); //maximum frequency related to interrupt operating frequency freq_meas.attach(&freq_calc_isr,1); //obtain number of sums per second - //To be used with timer() only if it is done - //squareIN.rise(&start_t1_isr); - //squareIN.fall(&start_t2_isr); - //For simulation purposes only - //tick1.attach_us(&counter1_isr, 1); //generate a tick every 100 us = 0.0001s 1us = 100000 s (period) - - //ui_disp.attach(&user_interface_disp, 1); //update the screen every 1 second - //result_calc.attach_us(&result_calculator,50); //calculate a new measurement result every 100us + ui_disp.attach(&user_interface_disp, 1); //update the screen every 1 second //interrupt routine for mode and range selection user input mode.rise(&mode_select); range.rise(&range_select); time_interval.rise(&time_interval_type_select); - /*interrupt routine for multiplier increase/decrease user input - incr_freq.rise(&incr); - decr_freq.rise(&decr);*/ - while(1) { - lcd.locate(1,1); - lcd.printf("Frequency: %4.4f", m_freq_hz); - wait_ms(10); + wait_ms(0.1); } @@ -128,30 +98,15 @@ //ISR to calculate the period of incoming signal, every 1 second void freq_calc_isr() { - //m_freq_hz = multi * count1; m_freq_hz = count1; count1 = 0; -} - -/*simulation only -void incr() -{ - multi = multi + 1500.5; + //call the result calculator function, to calculate the required period and time interval results + result_calculator(); } -void decr() -{ - multi = multi - 100.5; - if (multi<10.5) - { - multi = 0.5; - } -}*/ - void user_interface_disp() { - //At startup just print a few things on the lcd and then enter a loop until the user does something lcd.cls(); //clear screen lcd.locate(1,1); lcd.printf("Mode: %s", mode_msg[dsp_mode]); @@ -178,13 +133,6 @@ } } - /*else - { - //simulation only - to display the current multiplier - lcd.locate(78,1); - lcd.printf("(x%1.1f)",multi); - }*/ - lcd.locate(1,10); lcd.printf("Range: %s", range_msg[dsp_range]); lcd.locate(1,20); @@ -236,9 +184,6 @@ //calculate period from frequency float m_period_ms = (1/m_freq_hz)*1000; //times by 1000 to convert to ms - //float m_period_ms = period/1000; - //float m_freq_hz = 1/(m_period_ms/1000); - //m_t_interval_ms = ton/1000; if(dsp_mode == 0) //frequency measurement { @@ -342,11 +287,6 @@ m_result = m_period_ms/2; //based on the assumption that the square wave has 50% DUTY CYCLE } - /*else if(dsp_time_interval == 3) //falling->rising (t1) - { - m_result = m_period_ms - (ton/1000); - }*/ - if(dsp_range == 0) //High resolution (2.0000 +- 0.0001 ms) { if(m_result <= 2.0001)