#include #include #include "mystd.h" #include "utils.h" #define PRESCALER 256 #define TIMER_FREQ (F_CPU / PRESCALER) // at a high level: // Set the OC1B (PB2) pin as output // set the TIMER1 mode to COMPARE (CTC) // say to compare against OC1A // set the value to be compated at X count // say the presacler for the timer is 512 // // all these information are on page ~140 void timer1_init(void) { // Set PB1 (OC1A) as output DDRB |= _BV(PB1); // CTC mode (WGM12 = 1) TCCR1B |= _BV(WGM12); // Toggle OC1B on compare match (COM1B0 = 1) // TCCR1A |= _BV(COM1A0); // Set compare values OCR1A = TIMER_FREQ / 2; // Start timer with prescaler 256 (CS12) TCCR1B |= _BV(CS12); // set OCR1A interrupt TIMSK1 = _BV(1); sei(); }