skip navigational linksPJRC
Shopping Cart Checkout Shipping Cost Download Website
Home MP3 Player 8051 Tools All Projects PJRC Store Site Map
You are here: Teensy Teensyduino Libraries FrequencyTimer2

PJRC Store
Teensy 3.1, $19.80
Teensy 2.0, $16.00
Teensy++ 2.0, $24.00
USB Cable, $4.00
Teensy
Main Page
Teensy 3.1
Getting Started
How-To Tips
Code Library
Projects
Teensyduino
Reference

FrequencyTimer2 Library

FrequencyTimer2, written by Jim Studt, lets you create a zero jitter frequency output, and run your own function on each period.

Download: FrequencyTimer2.zip (version 2.1)

FrequencyTimer2 is compatible with Teensy 3.1, Teensy 3.0, Teensy++ 2.0, & Teensy++ 1.0. It is NOT compatible with Teensy 1.0 or Teensy 2.0.

Hardware Requirements

BoardFrequency
Output Pin
PWM Pins
Affected
Teensy 3.15-
Teensy 3.05-
Teensy++ 2.0241, 24
Teensy++ 1.0241, 24
Sanguino1514, 15
Arduino Mega109, 10
Arduino Uno113, 11

Teensy 3.0 & 3.1 also support adjustable frequency output with analogWriteFrequency() for the PWM pins. When running on Teensy 3.0 & 3.1, FrequencyTimer2 uses the CMT timer, to allow a zero-jitter frequency output separate from the PWM pins.

Example Use

This example can be opened from the menu: File > Examples > FrequencyTimer2 > Test

// FrequencyTimer2 Test
// http://www.arduino.cc/playground/Code/FrequencyTimer2

#include <FrequencyTimer2.h>

void setup() {
  pinMode(FREQUENCYTIMER2_PIN, OUTPUT);

  Serial.begin(9600);
  delay(2);
  Serial.println("You can issue commands like:");
  Serial.println("  12345p - set period to 12345 microseconds");
  Serial.println("  o - turn on a simple counter as the overflow function");
  Serial.println("  n - turn off the overflow function");
  Serial.println("  b - print the counter from the oveflow function");
  Serial.println();
  FrequencyTimer2::setPeriod(200);
  FrequencyTimer2::enable();
}

// variables shared between interrupt context and main program
// context must be declared "volatile".
volatile unsigned long burpCount = 0;

void Burp(void) {
  burpCount++;
}

void loop() {
  static unsigned long v = 0;
  if ( Serial.available()) {
    char ch = Serial.read();
    switch(ch) {
      case '0'...'9':
        v = v * 10 + ch - '0';
        break;
      case 'p':
        FrequencyTimer2::setPeriod(v);
        Serial.print("set ");
        Serial.print((long)v, DEC);
        Serial.print(" = ");
        Serial.print((long)FrequencyTimer2::getPeriod(), DEC);
        Serial.println();
        v = 0;
        break;
      case 'e':
        FrequencyTimer2::enable();
        break;
      case 'd':
        FrequencyTimer2::disable();
        break;
      case 'o':
        FrequencyTimer2::setOnOverflow(Burp);
        break;
      case 'n':
        FrequencyTimer2::setOnOverflow(0);
        break;
      case 'b':
        unsigned long count;
        noInterrupts();     // disable interrupts while reading the count
        count = burpCount;  // so we don't accidentally read it while the
        interrupts();       // Burp() function is changing the value!
        Serial.println(count, DEC);
        break;
    }
  }
}

Links

Arduino Playground Page has the original version of FrequencyTimer2, and more info about the library.

This github repository is the source for new development on FrequencyTimer2. Please submit bug reports or pull requests for FrequencyTimer2 on github!