Está en la página 1de 5

Timer 

Guia
lunes, 20 de junio de 2022 01:45

CONTADOR
Circuito secuencial capaz de llevar una cuenta de una serie de pulsos que percibe por una entrada. Tiene 
una salida que se activa cuando ha llegado al final de la cuenta y nos da la posibilidad de leer el valor de 
la cuenta que lleva.

(puede ser un CLK)

TEMPORIZADOR
Uso del contador para generar pulsos a intervalos de tiempo definidos por alguna de sus salidas. En los 
temporizadores, la senhal de entrada es una senhal periodica de frecuencia conocida, de modo que es 
capaz de generar pulsos a intervalos de tiempo multiplos del periodo de senhal de reloj.
Nota: No se tiene acceso al valor de la cuenta y solo se puede saber cuando ha finalizado esta.

Senhal de final de cuenta

Contador que cuenta
10000 pulsos

Goal ‐> Monitorizacion del tiempo en multiplos de 5 ms.

TEMPORIZADORES EN ATMEGA328P Para que usar Timer?
• 3 temporizadores Trabajar con periodos de tiempo
• Timer/Counter0 (8 bits) Generar eventos a periodos de 
• Timer/Counter1(16 bits) tiempo deseados (generar PWM, 
• Timer/Counter2(8 bits) calcular periodos de tiempo de 
• Cada temporizador cuenta con distintos modos de operacion: eventos externos al 
○ Normal microcontrolador)
○ CTC (Clear Timer on Compare Match)
○ Fast PWM
○ Phase Correct PWM
○ Phase and Frequency Correct (solo lo tiene el 
Timer/Counter1)

TEMPORIZADOR/CONTADOR 0 (TCNT0)

• Tiene 2 unidades de comparacion de salida y soporta PWM. Reemplazar los n por 0

Que pin digital es el T0?

Modo de operacion

• Puede contar desde 0x00 hasta maximo 0xFF. Se puede configurar un valor TOP en el registro OCR0A para que 
el contador llegue hasta ese valor (dependiendo del modo de operacion que se utilice).
• El TCNT0 se incrementa segun la senhal clkT0 (puede ser el reloj del sistema, una senhal que venga de un pre‐
escalador (multiplo del clkI/O), o una senhal externa (en el pin T0)). Configuracion de senhal de entrada ‐> bits  Valido para los 3 temporizadores
del Clock Select (CS02:0) en el registro TCCR0B.
• MODO NORMAL
○ Configuracion: WGM02=0 (registro TCCR0A y TCCR0B). MODO DE OPERACION
○ El contador solo puede aumentar. Cuando se desborde, se reinicia desde 0x00 y el bit TOV0 toma el 
valor de '1' (registro TIFR0). Para regresar ese bit a '0' hay que escribir manualmente '1' en TOV0 o 
tambien si se trabaja con interrupciones (regresa a 0 automaticamente).
○ Los bits OCF0A y OCF0B cambian a 1 cuando existe una comparacion exitosa entr TCNT0 y los registros 
OCR0A y OCR0B respectivamente. Para regresarlos a 0, hacerlo manualmente o con una subrutina de 
interrupcion.
○ Para una mayor resolucion en la temporizacion, podemos escribir, inmediatamente despues de 
producirse el desborde, un valor de 0xXX en el registro TCNT0 (para que la cuenta ya no vaya de 0x00 a 
0xFF, sino de 0xXX a 0xFF).

MODO DE OPERACION

Timer Page 1
TCCR0A: Los bits 7 y 6 controla el comportamiento del pin de comparacion de salida (OC0A). Los bits 5 y 
4 controlan el comportamiento del pin de comparacion de salida (OC0B).

WGM02:0 esta 
configurado en  la salida OC0A anula la 
modo normal o  funcionalidad normal del puerto del 
CTC (no PWM) pin de E/S al que está conectado

Cuando OC0A esta conectado al pin, la funcion de los bits COMA1:0 depende de la configuracion del bit 
WGM02:0
Nota: Pasa lo mismo con OC0B.

la salida OC0B anula la 
WGM02:0 esta  funcionalidad normal del puerto del 
configurado en  pin de E/S al que está conectado
modo normal o 
CTC (no PWM)

Combinado con el bit WGM02 que se encuentra 
en el registro TCCR0B , estos bits controlan la 
secuencia del contador, el TOP del contador y el 
tipo de generacion de onda.

TCCR0B: 

Cuando se escribe un uno lógico en el bit FOC0A, se fuerza una comparación inmediata en la unidad de 
generación de forma de onda.

Cuando se escribe un uno lógico en el bit FOC0B, se fuerza una comparación inmediata en la unidad de 
generación de forma de onda.

TIFR0: Interrupt Flag Register
Controla el comportamiento del pin de comparacion de salida (OC0A)

• El bit TOV0E es seteado se produce un desbordamiento en el temporizador/contador 0. TOV0 es reset por 
el hardware cuando se ejecuta el vector de manejo de interrupciones correspondiente.
• Alternativamente, TOV0 es reset escribiendo un 1 logico en la bandera.
Cuando el SREG I, TOIE0 (habilitación de la interrupción por desbordamiento del temporizador/contador 0) 
y TOV0 están activados, se ejecuta la interrupción por desbordamiento del temporizador/contador 

TCNT0: Timer/Counter Register
El registro Timer/Counter da acceso directo, tanto para operaciones de lectura como de escritua, al 
contador de 8 bits de la unidad Timer/Counter. La escritua en el registro TCNT0 bloquea la coincidencia 
de comparacion en el siguiente reloj del temporizador. Modificacion del contador (TCMT0) mientras el 
contador esta en marcha, introduce el riesgo de perder una coincidencia de comparacion entre TCNT0 y 
los registros OCR0x.

OCR0A: Output Compare Register A OCR0B: Output Compare Register B
El registro de comparacion de salida contiene un valor de 8 bits que compara continuamente con el 
valor del contador (TCNT0). A match puede utilizarse para generar una interrupcion de comparacion de 
salida, o para generar una salida de forma de onda en el pin OC0A.

TEMPORIZADOR/CONTADOR 1 (TCNT1)

• Es un temporizador de 16 bits (TCNT1), el cual cuenta de 0x0000 hasta 0xFFFF; o segun la configuracion 
realizada puede llegar hasta un valor TOP guardado en el registro OCR1A o ICR1.

Timer Page 2
• La frecuencia de incremento de la cuenta, clkT1, es configurable mediante los pindes CS12, CS11 y CS10 
ubicados en el registro TCCR1B.
• MODO NORMAL
○ Configuracion: WGM02=0 (registro TCCR1A y TCCR1B). MODO DE OPERACION
○ Los bits TOV1, OCF1B, OCF1B pasaran a ser '1' cuando existe un desborde (TCNT1 supera el valor 0xFFFF y regresa 
0x0000) o cuando hay una comparacion exitosa entre OCR1A u OCR1B.
○ Conociendo la frecuencia de incremento de TCNT1 (configurable) se puede calcular el valor que debemos dar a 
OCR1X para que la comparacion exitosa se produzca a la frecuencia deseada.

MODO DE OPERACION
TCCR1A: Timer/Counter1 Control Register A
Canal A Canal B

WGM13:0 esta 
configurado en  la salida OC0A anula la 
modo normal o  funcionalidad normal del puerto del 
CTC (no PWM) pin de E/S al que está conectado

Los pines COM1A1:0 y COM1B1:0 controlan el comportamiento de los pines de comparacion de salida 
(OC1A y OC1B respectivamente).
Cuando OC1A u OC1B esta conectado al pin, la funcion de los bits COM1x1:0 depende de la 
configuracion de los bits WGM 13:0.

Combinado con los bits WGM 13:2 
que se encuentran en el registro 
TCCR1B, estos bits controlan la 
secuencia de conteo del contador, el 
TOP del contador y el tipo de 
generacion de la forma de onda a 
utilizar.

TCCR1B: Timer/Counter1 Control Register B

TIFR1: Interrupt Flag Register

• ICF1: Esta bandera se establece cuando se produce un evento de captura en el pin ICP1. Cuando el registro de 
captura de entrada (ICR1) es establecido por el WGM13:0 para ser utilizado como valor TOP, la bandera ICF1 se 
establece cuando el contador alcanza el valor TOP. ICF1 se borra automáticamente cuando se ejecuta el vector 
de interrupción de captura de entrada. Alternativamente, ICF1 puede ser borrado escribiendo un escribiendo un 
uno lógico en su posición de bit.

Timer Page 3
• OCF1B: Timer/Counter1, Output Compare B Match Flag. Esta bandera se activa en el ciclo de reloj del 
temporizador después de que el valor del contador (TCNT1) coincida con el registro de comparación de salida B 
(OCR1B). Se borra automaticamente cuando se ejcuta el vector de interrupcion de comparacion de salida B. 
Alternativamente, OCF1B puede ser clear escribiendo un uno logico en su posicion de bit.
• OCF1A: Pasa lo mismo con el B.
• TOV1: Timer/Counter1, Overflow Flag
La configuración de esta bandera depende de la configuración de los bits WGM13:0. En los modos normal y CTC, 
la bandera TOV1 se activa cuando el temporizador se desborda. TOV1 se borra automáticamente cuando se 
ejecuta el vector de interrupción de desbordamiento del temporizador/contador1. Alternativamente, TOV1 
puede borrarse escribiendo un uno lógico en su posición de bit.

TCNT1H and TCNT1L: Timer/Counter1

Las dos ubicaciones de E/S del temporizador/contador (TCNT1H y TCNT1L, combinado TCNT1) dan 
acceso directo, tanto para operaciones de lectura como de operaciones de escritura, al contador de 16 
bits de la unidad Timer/Counter

OCR1AH and OCR1AL: Output Compare Register 1 A

OCR1BH and OCR1BL: Output Compare Register 1 B

Los registros de comparación de salida contienen un valor de 16 bits que se compara continuamente 
con el valor del contador (TCNT1). Una coincidencia puede utilizarse para generar una interrupción de 
comparación de salida, o para generar una salida de forma de onda en el pin OC1x.

ICR1H and ICR1L: Output Compare Register 1 B

La captura de entrada puede utilizarse para definir el valor TOP del contador.

• El modo CTC funciona de tal manera que cada vez que existe una comparacion exitosa, el contador TCNT1 vuelve al valor 
0x0000; es decir, el contador TCNT1 contara desde el valor 0x0000 a 0xXXXX, donde 0xXXXX es el valor configurado en los 
registros OCR1A (configurando bits WGM13:0 = 4) o ICR1 (configurando bits WGM13:0 = 12) seg´un la
configuracion con la que se esta trabajando.

Variando el valor de 0xXXXX y la frecuencia con la que se incrementa TCNT1 (clkT1), se puede 
temporizar a una frecuencia deseada

Modo CTC

Se configura el pin OC1A/OC1B (pin9/pin10 en Arduino) de tal manera que cambien de estado cuando 
ocurre una comparacion exitosa. Para esto se configuran los bits COM1A1:0=1. ‐> De esta manera se 
obtiene una PWM con un duty cycle de 50%, pero podemos variar su frecuencia. 
Nota: No olvidar que la salida PWM no podra ser visible si es que el pin no esta configurado como salida 
(DDRD=1)

INTERRUPCIONES POR TEMPORIZADORES
Comparacion exitosa para cada uno de los 3 timers
• El Atmega328P cuenta con 9 tipos de interrupciones por Timer que se basan en
Si el contador se desbordo
• Los bits que habilitan cada interrupcion se encuentra en los registros TIMSKn de cada 
timer.
• Timer 1:
○ OCIE1A ‐> Comparacion exitosa A
○ OCIE1B ‐> Comparacion exitosa B
○ TOIE1 ‐> Desborde de Timer/Counter 1

• No olvidar la importancia de configutat el bit que habilita las interrupciones con la funcion 
sei() para poder ejecutar las subrutinas de interrupcion y deshabilitar con cli() cuando se 
requiera.
• No olvidar que las ISR deben durar el menor tiempo posible para que no exista problemas 
de ejecutar el programa principal.

Timer Page 4
Subrutina de interrupcion del Timer 1 por comparacion exitosa A

Timer Page 5

También podría gustarte