/* * Interrupt and PWM utilities for 16 bit Timer1 on ATmega168/328 * Original code by Jesse Tane for http://labs.ideo.com August 2008 * Modified March 2009 by Jérôme Despatis and Jesse Tane for ATmega328 support * Modified June 2009 by Michael Polli and Jesse Tane to fix a bug in setPeriod() which caused the timer to stop * Modified June 2011 by Lex Talionis to add a function to read the timer * * This is free software. You can redistribute it and/or modify it under * the terms of Creative Commons Attribution 3.0 United States License. * To view a copy of this license, visit http://creativecommons.org/licenses/by/3.0/us/ * or send a letter to Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA. * * See Google Code project http://code.google.com/p/arduino-timerone/ for latest */ #ifndef TIMERONE_h #define TIMERONE_h #include #include #define RESOLUTION 65536 // Timer1 is 16 bit class TimerOne { public: // properties unsigned int pwmPeriod; unsigned char clockSelectBits; // methods void initialize(long microseconds=1000000); void start(); void stop(); void restart(); unsigned long read(); void pwm(char pin, int duty, long microseconds=-1); void disablePwm(char pin); void attachInterrupt(void (*isr)(), long microseconds=-1); void detachInterrupt(); void setPeriod(long microseconds); void setPwmDuty(char pin, int duty); void (*isrCallback)(); }; extern TimerOne Timer1; #endif