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)

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

Teensy 3.0 supports adjustable frequency output with analogWriteFrequency().

Hardware Requirements

BoardFrequency
Output Pin
PWM Pins
Affected
Teensy++ 1.0 & 2.0241, 24
Sanguino1514, 15
Arduino Mega109, 10
Arduino Uno113, 11

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.