Configuración Avanzada de Temporizadores y Contadores en Microcontroladores ATMega328
Clasificado en Electrónica
Escrito el en
español con un tamaño de 4,5 KB
Uso y Configuración de Temporizadores/Contadores
- Es fundamental definir el modo de operación del temporizador, la fuente del reloj, el preescalador, las interrupciones y la generación de formas de onda.
- Agregue el código necesario para la rutina de servicio de interrupción en su programa.
- Aunque se utiliza el Temporizador 1 (16 bits) como ejemplo, el procedimiento es el mismo para otros temporizadores.
- Solo se presentarán los registros relacionados con la funcionalidad básica del temporizador.
Funcionamiento del Preescalador en Temporizadores
- El reloj de Arduino es de 16 MHz, lo que equivale a un período de 62.5 ns.
- Un recuento completo (65535 ciclos) tomará 65535 * 62.5 ns = 4.0959375 ms.
- El valor de preescalador más grande es 1024, lo que permite al temporizador contar a 16 MHz / 1024 = 15625 Hz, o un período de 64 µs.
- Con este preescalador, un recuento completo tomará 4.19424 segundos.
- Para contar hasta 1 segundo, el contador debe alcanzar 1 s / 64 µs = 15625.
Introducción a los Temporizadores/Contadores del ATMega328
El temporizador es un periférico muy común que se encuentra en los microcontroladores.
- El ATMega328 tiene 3 temporizadores/contadores.
- El Temporizador/Contador 0 (TC0) es un módulo de 8 bits de uso general que se utiliza típicamente para: conteo, comparación y PWM.
- El TC0 se puede sincronizar internamente, a través del preescalador o mediante una fuente de reloj externa en el pin T0 (registro TCCR0B).
- El comparador de 8 bits compara continuamente TCNT0 con los registros de comparación de salida (OCR0A y OCR0B).
- Siempre que TCNT0 sea igual a OCR0A u OCR0B, el comparador señala una coincidencia.
- Una coincidencia establecerá el indicador de comparación de salida (OCF0A u OCF0B) en el siguiente ciclo de reloj del temporizador.
- Si la interrupción correspondiente está habilitada, el indicador de comparación de salida genera una interrupción de comparación de salida.
Modos de Operación del Temporizador/Contador
Modo Normal
La dirección de conteo siempre es ascendente y no se realiza la eliminación del contador.
- El contador simplemente se desborda cuando excede su valor máximo de 8 bits y luego se reinicia desde 0x00.
- El indicador de desbordamiento del temporizador/contador (TOV1) se establecerá en el mismo ciclo de reloj en el que TCNT se convierte en cero.
- Se puede escribir un nuevo valor de contador en cualquier momento.
- La unidad de comparación de salida se puede usar para generar interrupciones en un momento dado.
Modo CTC (Clear Timer on Compare Match)
- El registro OCR0A define el valor superior para el contador.
- El contador se borra a CERO cuando el valor de TCNT coincide con OCR0A.
- Se puede generar una interrupción cada vez que el valor del contador alcanza el valor de OCR0A, configurando el indicador OCF0A.
- Para generar una salida de forma de onda en modo CTC, la salida OC0A se puede configurar para alternar su nivel lógico en cada coincidencia de comparación, escribiendo el Registro de Control del Temporizador/Contador A en el modo de alternancia.
Otros Modos
- Fast PWM
- Phase Correct PWM
Lista de Registros Clave del Temporizador/Contador
- TC0 Control Register A (TCCR0A): configura el modo de operación para los canales A y B.
- TC0 Control Register B (TCCR0B): opciones de configuración adicionales.
- Selección de reloj (Clock select).
- TC0 Interrupt Mask Register (Registro de Máscara de Interrupción del TC0).
- TC0 Counter Value Register (TCNT0) (Registro de Valor del Contador del TC0).
- TC0 Output Compare Register A (OCR0A) (Registro de Comparación de Salida A del TC0).
- TC0 Output Compare Register B (OCR0B) (Registro de Comparación de Salida B del TC0).
- TC0 Interrupt Flag Register (TIFR0) (Registro de Banderas de Interrupción del TC0).