Freq calculations using counters and interrupt
Dependencies: FastPWM PwmIn USBDevice mbed
main.cpp
- Committer:
- Ellor1
- Date:
- 2014-11-13
- Revision:
- 0:6d4f91decc4f
File content as of revision 0:6d4f91decc4f:
#include "FastPWM.h" #include "mbed.h" #include "PwmIn.h" #include "USBSerial.h" // using fastpwm signal as a clock signal to be used to trigger the counter whilst the signal I want to measure is high. // to get this to work properly I believe I will need to use nested interrupts along with setting interupt priorities. This is so that // when the signal I want to read (led) causes an interrupt on a rising edge whilst this value is high I want the clock trigger to interrupt a seperate pin // which will continuoulsy count until the (led) signal causes another interrupt by going low. // clkin is currently set as a DigitalIn but this likely needs to become an interrupt. USBSerial serial; FastPWM clkoutput(p20); DigitalIn clkin(p8); InterruptIn led(p7); Ticker display; int count; int count_2; int t_rise; int t_fall; int t_period = 0; void clock_pulse() { clkoutput.period(8e-7); //around 1.2 MHz signal clkoutput.write(0.5f); // 50% duty cycle } void rise() { // rising edge interrupt routine while (led && clkin) { // whilst the signal I want to measure is high (led) and the clk signal (clkin) is high increment the counter // if (clkin) { count++; } // if (led && clkoutput) { // count++; // while (led) { // if (clkin) { // count++; // } t_fall = count_2; // count_2 = 0; } // } void fall() { // falling edge interrupt routine while (!led && clkin) { // whilst the signal I want to measure is low and the clk signal is high increment counter 2 count_2++; } t_rise = count; // count = 0; } // } /*void period() { t_period = count; count = 0; } */ void disp() { serial.printf("count is %d \n\r" , t_rise); serial.printf("count_2 is %d \n\r" , t_fall); } int main() { clock_pulse(); led.rise(&rise); // set rising edge interrupt and call rise function led.fall(&fall); // set falling edge interrupt and call fall function //count = 0; // } display.attach(&disp, 2); // ticker function to display results every 2 seconds while (1) { // while (led) { // if (clkin) { // count++; // } // count = 0; //} // if (led == 1) && (clkoutput == 1) { // count++; /* while (led) { if (clkin) { count++; } */ } //serial.printf("Pulsewidth is %.2f \n\r" , pa.pulsewidth()); }