Timer1 en ATtiny85 no funciona como se esperaba

1

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;
}
    
pregunta Suba Thomas

1 respuesta

1

El fusible CKDIV8 está programado en dispositivos nuevos de fábrica. Si olvida desprogramar este fusible, el dispositivo funcionará a 1/8 de la velocidad de reloj esperada.

    
respondido por el Ignacio Vazquez-Abrams

Lea otras preguntas en las etiquetas