Está en la página 1de 23

ESCUELA POLITÉCNICA

NACIONAL
Club de Robótica
QUE ES EL TIMER EN EL AVR?

• Los microcontrolador
AVR tiene temporizadores
(timers) multifuncionales,
pueden medir tiempo,
generar frecuencias, contar
eventos externos, hacer
comparaciones, sincronizar
tareas, generar una onda
PWM, etc.
TIMERS EN EL ATMEGA164P
• El uc atmega164p posee 3 timers:
• TIMER 0: timer de 8 bits: cuenta de 0 a 255
• TIMER 1: timer de 16 bits: cuenta de 0 a 65535
• TIMER 2: timer de 8 bits: cuenta de 0 a 255
Conceptos Previos
• Preescalador: Divisor de la frecuencia del microcontrolador

• Desbordamiento: Cuando el TIMER cuenta hasta su número máximo y luego pasa a


CERO, es decir, se reinicia la cuenta.
Conceptos Previos

• PWM (Pulse Width Modulation): Es una señal tipo cuadrada de frecuencia


fija y ancho de pulso (ciclo de trabajo) variable.
MODO NORMAL
• El timer cuenta desde 0 a 255 y se desborda reiniciando la cuenta.
MODO CTC (Clear Timer on compare match)
• En este modo el timer es reiniciado a 0 cuando una comparación entre el timer
y un valor determinado coincide. Opcionalmente puede configurarse para que
al haber una coincidencia, genera una interrupción o cambie el estado de un
pin.
MODO FASE CORRECTA (Phase Correct PWM)
• El timer cuenta hacia adelante y hacia atrás antes de hacer el cambio de
estado del pin PWM, es decir cuenta de 0 a 255 al llegar a 255 cuenta de 255
a 0, obteniendo una salida PWM más limpia pero de menor frecuencia.
MODO FAST PWM
• Este modo permite generar una onda PWM de alta frecuencia. El timer
cuenta desde 0 a 255 y reinicia la cuenta.
PINES DE E/S DE LOS TIMERS

• Pines más importantes:


• OCxA: Salida PWM del Canal
A del timer x
• OCxB: Salida PWM del Canal
B del timer x
• T0: Reloj externo del timer 0
• T1: Reloj externo del timer 1
REGISTROS DE LOS TIMERS
Registros de Datos
• TCNTn: Registro que lleva la cuenta

• OCRnA, OCRnB: Registro de Comparación del Canal A y del Canal B

• n=1,2,3 (# de Timer)
REGISTROS DE LOS TIMERS
Registros de Configuración
• TCCRnA: Registro de control A del Timer n

• COMnA1,COMnA0; COMnB1,COMnB0: Bits de configuración de la


salida PWM del timer del micro, ejemplo: Para el Timer 0 los pines PB3 y/o
PB4 funcionarían como PWM.
REGISTROS DE LOS TIMERS
Registros de Configuración
• TCCRnB: Registro de control B del Timer n

• WGMn3..0: Bits de configuración del modo con el que se trabajará en el timer del micro,
ejemplo: Para el modo CTC se debe poner un 1 en WGMn2 y los demás quedan en cero
• CSn2...0: Bits de configuración del preescalador para el timer, ejemplo: Si se coloca un 1 en
CSn2 y los demás quedan en cero, la fuente de reloj del timer será la frecuencia del micro
dividida para 256.
¿Cómo saber a que frecuencia sale mi PWM?

• Para que la PWM tenga una frecuencia deseada por nosotros, se debe utilizar
un modo donde el TOP pueda ser escrito por nosotros, es decir un TOP
diferente a 255.

• El TOP es el máximo valor


hasta que cuenta el TIMER
para luego desbordarse
Obtener PWM de frecuencia deseada
• Para obtener la frecuencia deseada se debe realizar la siguiente operación (Válido para el
modo CTC y FAST PWM):
𝑓𝑢𝑐 𝑓𝑢𝑐
𝑓𝑃𝑊𝑀 = → 𝑇𝑂𝑃 = −1
𝑁(𝑇𝑂𝑃 + 1) 𝑁 ∗ 𝑓𝑃𝑊𝑀
Donde:
𝑓𝑢𝑐 : frecuencia del micro (No necesariamente es 8MHz)
𝑁: Es el preescalador que vaya a usar (1,8,64,256,1024)
𝑓𝑃𝑊𝑀 : frecuencia de la PWM que yo deseo
𝑇𝑂𝑃: Es el valor máximo que el Timer va a contar, este valor se debe cargar al registro de
comparación OCRnA ó ICR1 solo para el caso del TIMER1
Ejemplo
• Se desea obtener una señal PWM de 1KHz, utilizando el TIMER 0, y la
frecuencia del micro es de 8MHz
Ejercicio 1
• Utilizar el TIMER 0 en modo normal para obtener una PWM en el canal A
con relación de trabajo del 50% y también una PWM en el canal B con una
relación de trabajo del 25%, la frecuencia del micro es de 16MHz
Ejercicio 2
• Utilizar el TIMER 0 para obtener una PWM de 1KHz el ciclo de trabajo se
variará con un potenciómetro conectado en el ADC0, la frecuencia del micro
es de 16MHz
Ejercicio 3
Control de velocidad con el L293D
• Utilizando el TIMER 1, obtener una PWM de 1 KHz
en el canal A y en el canal B, el ciclo de trabajo de cada
PWM se variará con un potenciómetro distinto, las
señales PWM se utilizarán para manejar la velocidad de
2 motores DC conectados al dirver L293D.
• Adicionalmente, con la interrupción INT0 se girarán
los 2 motores a la derecha, y con la interrupción INT1
se girarán a la izquierda.
• la frecuencia del micro es de 8MHz
Ejercicio 4
Control de un servomotor
• Con el canal B del Timer 1, generar una señal PWM de 50Hz, y el tiempo en alto de la señal
PWM varíe de 1ms a 2ms con un potenciómetro. Con esta señal se puede manejar un servo
de 0° a 180°. la frecuencia del micro es de 8MHz
Interrupciones de Timers
• Los Timers pueden generar las siguientes interrupciones:
• Interrupcción por desbordamiento: cada que ocurre un desbordamiento se
genera una interrupción (TIMERn_OVF)
• Interrupción por comparación en A: cada ver que la cuenta del TCNTn sea
igual al registro OCRnA se produce una interrupción (TIMERn_COMPA).
• Interrupción por comparación en B: cada ver que la cuenta del TCNTn sea
igual al registro OCRnB se produce una interrupción (TIMERn_COMPB).
Registro de configuración para interrupciones
de timers
• TIMSKn: Timer Interrupt Mask Register

• Para utilizar una interrupción, se debe poner en 1 el bit correspondiente


• IMPORTANTE: SIEMPRE USAR EL sei(); PARA HABILITAR TODAS
LAS INTERRUPCIONES
Ejercicio 5
• Obtener una señal PWM de 100Hz por el PIN C4, el ancho de pulso se
variará con un potenciómetro de 0 a 100%, la frecuencia del micro es de
16MHz.

También podría gustarte