Frequency counter counting pulses at the input.

Dependencies:   mbed

Committer:
hudakz
Date:
Fri Jun 30 17:39:00 2017 +0000
Revision:
0:a18601268a31
Initial issue.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hudakz 0:a18601268a31 1 #include "mbed.h"
hudakz 0:a18601268a31 2
hudakz 0:a18601268a31 3 #define GATE_TIME 0.5 // Gate time (period of time to count pulses within) in seconds
hudakz 0:a18601268a31 4
hudakz 0:a18601268a31 5 Serial pc(USBTX, USBRX);
hudakz 0:a18601268a31 6 InterruptIn input(p9); // input line
hudakz 0:a18601268a31 7 Timeout timeout;
hudakz 0:a18601268a31 8 volatile bool measuringEnabled = false;
hudakz 0:a18601268a31 9 volatile uint32_t counter;
hudakz 0:a18601268a31 10
hudakz 0:a18601268a31 11 //ISR to count pulses
hudakz 0:a18601268a31 12 void onPulse(void) {
hudakz 0:a18601268a31 13 if (measuringEnabled)
hudakz 0:a18601268a31 14 counter++;
hudakz 0:a18601268a31 15 }
hudakz 0:a18601268a31 16
hudakz 0:a18601268a31 17 // ISR to stop counting
hudakz 0:a18601268a31 18 void stopMeasuring(void) {
hudakz 0:a18601268a31 19 measuringEnabled = false;
hudakz 0:a18601268a31 20 }
hudakz 0:a18601268a31 21
hudakz 0:a18601268a31 22 // Initializes counting
hudakz 0:a18601268a31 23 void startMeasuring(void) {
hudakz 0:a18601268a31 24 counter = 0;
hudakz 0:a18601268a31 25 timeout.attach(callback(&stopMeasuring), GATE_TIME);
hudakz 0:a18601268a31 26 measuringEnabled = true;
hudakz 0:a18601268a31 27 }
hudakz 0:a18601268a31 28
hudakz 0:a18601268a31 29 int main(void) {
hudakz 0:a18601268a31 30 input.rise(callback(&onPulse)); // assign an ISR to count pulses
hudakz 0:a18601268a31 31 while (1) {
hudakz 0:a18601268a31 32 startMeasuring();
hudakz 0:a18601268a31 33 while (measuringEnabled); // wait until the measurement has completed
hudakz 0:a18601268a31 34 if(GATE_TIME < 1)
hudakz 0:a18601268a31 35 wait(1 - GATE_TIME); // wait at least one second before printing
hudakz 0:a18601268a31 36 pc.printf("counter = %d\r\n", counter);
hudakz 0:a18601268a31 37 pc.printf("frequency = %f\r\n", (double)counter / GATE_TIME);
hudakz 0:a18601268a31 38 }
hudakz 0:a18601268a31 39 }