Ayuda con timers ATmega8 (AVR)

#1
Hola amigos estoy iniciado con los Microcontroladores AVR para esto estoy trabajando con el chip ATmega8, el moldulo ke estoy configurando es el Timer1 de 16Bits a modo uotput compare, la duda ke tengo es como calcular el valor del registro para generar una interrupcion a 1 seg. la Frecuencia del Bus clock la tengo a 1MHZ.

En la hoja de datos encontre esta formula fOCnA= (fclk_I/O)/2 ⋅ N ⋅ (1 + OCRnA), pero no se si esta formula es la ke se utiliza para calcular el valor del registro del timer... si alguien antes ya a trabajado con este modulo le agradeceria su ayuda
 
#2
No puedo leer correctamente la fórmula, pero he hecho las cuentas 'a mano'.

Con un CPUClk de 1MHz, necesitas dividir la señal para que el contador pueda darte una interrupción o señal o lo que quieras cada segundo, ya que como mucho te dará 65535 cuentas. Yo pondría el prescaler de 1/64. Con eso, la señal que entra al contador es de 15625Hz. Entonces pones OCR1A a 15624.

Entonces activas la interrupción de OCR1A, y ésta se activará cada 15624+1 cuentas, que es cada segundo si tienes el prescaler correctamente configurado. Es importante que el modo de funcionamiento sea el CTC, de manera que el contador se resetea automáticamente cuando alcanza la cuenta.
 
#4
Sólo un detalle: el oscilador interno RC es bastante malo, con variaciones de más del 2%. Si al principio pones el valor de Osccal que viene en la sección de fuses en el registro OSCCAL, este queda ajustado a menos del 1%, pero aunque baste para comunicaciones serie, sigue siendo totalmente insuficiente para un reloj.
 
Arriba