¿Cómo puedo configurar un temporizador de microcontrolador AVR para generar eventos de interrupción periódica a una velocidad de 60 Hz, usando el reloj del sistema de 14.745 MHz?
¿Cómo puedo configurar un temporizador de microcontrolador AVR para generar eventos de interrupción periódica a una velocidad de 60 Hz, usando el reloj del sistema de 14.745 MHz?
Hay 14,745,000 / 60 = 245,750 conteos del reloj del sistema de 14.745MHz por ciclo de 60Hz. Entonces, lo que debe hacer es dividir de alguna manera el reloj del sistema.
Como @AndyAka sugirió en los comentarios, podría usar un contador de hardware de 18 bits para dividir el reloj del sistema de 14.745 MHz por 245.750 (0x3bff6 hexadecimal o binario 0011_1011_1111_1111_0110) para obtener una salida de hardware de 60Hz, luego use eso para impulsar pin de entrada de interrupcion. Este enfoque interrumpe el microcontrolador a una velocidad de 60Hz, dejando al microcontrolador libre para realizar otras tareas.
Alternativamente, si no puede agregar hardware externo, pero puede tolerar un rendimiento de software reducido, se podría usar el contador / temporizador de hardware interno. Desafortunadamente, el divisor requerido 245,750 excede el límite de un contador temporizador de hardware de 16 bits, por lo que no se puede lograr una tasa de interrupción periódica de 60Hz directamente. Sin embargo, puede configurar el temporizador para su interrupción periódica más lenta posible que sea un múltiplo de 60Hz. Luego, use un contador de software para dividir aún más hasta alcanzar la tasa de manejo de eventos de 60Hz.
AVR ATmega328 hoja de datos: enlace
Consulte la sección 12. Interrupciones
Consulte las secciones 15-18 sobre los distintos módulos de temporizador / contador integrados en el ATmega328.
Lea otras preguntas en las etiquetas microcontroller avr frequency timer counter