Estoy intentando usar el temporizador 1 en el ATtiny85 (Adafruit Trinket) para parpadear un LED cada segundo. El valor del preescalador es 1024, y el valor del registro de comparación es 28. Recorro esto 279 veces para obtener un retraso de 1 segundo.
$$ \ frac {1024 \. 28 \. 279} {8 \ .10 ^ 6} \ simeq1 $$
Con el código de abajo obtengo algo así como 8.5 segundos. Establecí -mmcu = attiny85 y -DF_CPU = 8000000UL al compilar. ¿Qué podría faltar?
#include <stdint.h>
#include <avr/interrupt.h>
#define TIMER_OVERFLOW_COUNT 279
volatile uint16_t timerCount = TIMER_OVERFLOW_COUNT;
ISR(TIMER1_OVF_vect)
{
timerCount++;
}
int main(void)
{
DDRB = 1 << DDB1;
OCR1C = 28;
TIMSK = 1 << TOIE1;
sei();
TCCR1 = (1 << CS13) | (1 << CS11) | (1 << CS10);
while( 1)
{
if( timerCount >= TIMER_OVERFLOW_COUNT)
{
timerCount = 0;
PORTB ^= 1 << PORTB1;
}
}
return 0;
}