bunt _ / PulseCounter
Embed: (wiki syntax)

« Back to documentation index

PulseCounter Class Reference

PulseCounter Class Reference

Counts pulses on pin29 coming in with a frequency up to 48 MHz. More...

#include <PulseCounter.h>

Public Member Functions

void init ()
 Initializer for PulseCounter instance.
void start ()
 Start counter.
void stop ()
 Stop counter.
void counterArray (uint32_t *counterArray, int counterArrayLength)
 Read pulse count results into external array.

Detailed Description

Counts pulses on pin29 coming in with a frequency up to 48 MHz.

The counter is read (and reset to 0) by rising edge (trigger event) on pin30. These events can be triggered at a rate up to 9kHz. The counter results are stored in a "circular array" of 20 elements. ("circular array" = array pointer increments each time a new value is stored into the array; if pointer reaches last element, it is redirected to first element)

Definition at line 30 of file PulseCounter.h.


Member Function Documentation

void counterArray ( uint32_t *  counterArray,
int  counterArrayLength 
)

Read pulse count results into external array.

Do not call this method before you called method stop() - otherwise it will return zeros.

Parameters:
counterArray= Pointer to array in which the pulse count results should be read into.
counterArrayLength= Size of counterArray. Should be 20 or less. If more than 20, remaining elements will be filled with zeros.

 #include "mbed.h"
                #include "PwmOscillator.h"
                #include "PulseCounter.h"

                Serial usbPC(USBTX, USBRX);                 // sends log messages via USB to PC terminal
                PwmOscillator pulseGenerator;               // generates pulses to be count (48 MHz) on pin p22. Connect this pin to p29 (counter input).
                PulseCounter pulseCounter;                  // counts the pulses on pin p29 between trigger events (= rising edges) on pin p30.

                int main() 
                {
                    usbPC.printf("---> start <---\n");
                    pulseGenerator.initWithFrequency(48000000);
                    pulseCounter.init();
                    pulseGenerator.start();
    
                    pulseCounter.start();   
                    wait(1);                                // waiting 1 second for trigger events (pin30: rising edge). Count pulses between trigger events.
                    pulseCounter.stop();
                    
                    pulseGenerator.stop();
    
                    // read & print pulseCounter results
                    int pulseCounterResults[20];
                    pulseCounter.counterArray(&pulseCounterResults[0],sizeof pulseCounterResults / sizeof (int));
    
                    for(int i = 0; i < (sizeof pulseCounterResults / sizeof (int)); i++) {
                        usbPC.printf("counter of trigger event %i = %i\n",i,pulseCounterResults[i]);
                    }
                    //
    
                    usbPC.printf("   finished.\n");
                }

Definition at line 86 of file PulseCounter.cpp.

void init (  )

Initializer for PulseCounter instance.

Definition at line 26 of file PulseCounter.cpp.

void start (  )

Start counter.

Definition at line 61 of file PulseCounter.cpp.

void stop (  )

Stop counter.

Definition at line 78 of file PulseCounter.cpp.