I must be overwrought or something... I just can't get the calculation of the timer frequency right. I have a 16 MHz crystal on the Atmega328. I want 1 kHz timer interrupt rate. So I chose prescaler = 64 and counter top = 249, that is
fTimer = fCPU/prescaler/(top+1) = 16 MHz/64/250 = 1 kHz
But my oscilloscope shows 2 kHz... !? Why?
Code:
const int signalLED = 1; //14;
void setup()
{
pinMode(signalLED, OUTPUT);
digitalWrite(signalLED, LOW);
TCCR2A = 0; // set TCCR2A register to 0
TCCR2B = 0; // set TCCR2B register to 0
TCNT2 = 0; // reset counter
OCR2A = 249; // top value in CTC mode
TCCR2A |= (1 << WGM21); // enable timer2 CTC mode
TCCR2B |= (1 << CS21) | (1 << CS20); // 1:64 prescaling for timer 2
TIMSK2 |= (1 << OCIE2A); // enable timer2 compare interrupt
sei(); // allow interrupts
}
ISR(TIMER2_COMPA_vect)
{
// generate peak
digitalWrite(signalLED, HIGH);
digitalWrite(signalLED, LOW);
}
void loop()
{
}