2. Timers/Contadores
2
Timers / Contadores
• Funciones
Los TIMERS son registros contadores usados como contadores de eventos y
para generar retardos de tiempo.
Los ATmega164p están formados por 3 timers/contadores:
o TIMER0
o TIMER1
o TIMER2
Cada TIMER necesita un pulso de reloj para marcar la cuenta, la fuente de
reloj puede ser interna o externa.
Pueden ser activados por Interrupciones o en forma dependiente del
programa.
3. Timers/Contadores
3
Timers / Contadores
• Funciones
Cada TIMER/CONTADOR emplea:
o Registro Timer/Contador TCNTn
o Registro de Control TCCRn
o Registro de Comparación de salida OCRn
Los registros de los TIMERS se localizan en los
Registros de E/S de la memoria.
4. Timers/Contadores
4
Timers / Contadores
• TIMER/CONTADOR 0
Es un TIMER de 8 bits.
La señal de reloj puede ser:
o Externa (Detectar Flanco)
o Interna Escalable
Registros de comparación con doble buffer de salida para realizar la
modulación PWM.
Tres Fuentes de Interrupción Externa:
o TOV0 Bandera de desbordamiento
o OCF0A Bandera de emparejamiento de salida de comparación A
o OCF0B Bandera de emparejamiento de salida de comparación B
5. Timers/Contadores
5
Timers / Contadores
• TIMER/CONTADOR 0
1. Registro TCNT0: En este registro se almacena el valor del contador de 8 bits.
*Valor máximo de contador 11111111 = 0xFF = 25510
2. Registros de Control:
o TCCR0A
COM0A1 COM0A0 COM0B1 COM0B0 ------------ ------------ WGM01 WGM00
BITS DESCRIPCIÓN
COM0A 1:0 Modo de operación de la salida A de comparación
COM0B 1:0 Modo de operación de la salida B de comparación
WGM0 1:0 Controla la secuencia del Registro Contador
D7 D6 D5 D4 D3 D2 D1 D0TCNT0
6. Timers/Contadores
6
Timers / Contadores
• TIMER/CONTADOR 0
2. Registros de Control:
o TCCR0B
FOC0A FOC0B ------------ ------------ WGM02 CS02 CS01 CS00
BITS DESCRIPCIÓN
FOC0 A:B Para obligar a una comparación.
WGM02 Controla la secuencia del Registro Contador.
CS0 2:0 Bits para escoger la fuente de reloj del contador.
7. Timers/Contadores
7
Timers / Contadores
• TIMER/CONTADOR 0
2. Registros de Control
o Modos de Operación
1. Normal
2. PWM de fase correcta
3. PWM rápido
4. CTC Modo de comparación de limpieza del TIMER
Modo WGM0
2/1/0
Función TOV0
Normal 000 Contador Ascendente
Rango [0-FF] TOP =0XFF
Se enciende en el valor
máximo TOP = 0xFF
PWM de fase correcta 001 Brinda una alta resolución de fase
correcta de forma de onda en la
generación de PWM
Se enciende en el valor
mínimo 0x00
COM0A1 COM0A0 COM0B1 COM0B0 ------------ ------------ WGM01 WGM00
FOC0A FOC0B ------------ ------------ WGM02 CS02 CS01 CS00
TCCR0A
TCCR0B
8. Timers/Contadores
8
Timers / Contadores
• TIMER/CONTADOR 0
2. Registros de Control (TCCR0A)
o Modos de Operación
Modo WGM0
2/1/0
Función TOV0
CTC
(Clear timer y
Punto de
Comparación)
010 -El valor del contador (TCNT0) se
incrementa hasta obtener una
igualdad en la comparación entre los
registros TCNT0 y OCR0.
-El contador se carga con cero
cuando el valor del contador (TCNT0)
iguala al registro OCR0.
Se enciende en el valor máximo
TOP = 0xFF
PWM Rápido 011 Brinda una alta generación en
frecuencia de forma de onda PWM.
Se enciende en el valor máximo
TOP = 0xFF
9. Timers/Contadores
9
Timers / Contadores
• TIMER/CONTADOR 0
2. Registros de Control (TCCR0A)
o Modos de Operación
Modo WGM0
2/1/0
Función TOV0
Reservado 100 Reservado
PWF de fase
correcta
101 -El valor final se establece en el
registro OCR0
Se enciende en el valor mínimo
0x00
Reservado 110 Reservado
PWM Rápido 111 -El valor final se establece en el
registro OCR0
Se enciende en el valor máximo
TOP = 0xFF
10. Timers/Contadores
10
Timers / Contadores
• TIMER/CONTADOR 0
2. Registros de Control:
o TCCR0A
COM0A1 COM0A0 COM0B1 COM0B0 ------------ ------------ WGM01 WGM00
Salidas en los modos Contador normal y CTC
COM0A1
COM0B1
COM0A0
COM0B0
DESCRIPCIÓN
0 0 Pórtico en operación normal, OC0A / OC0B desconectado.
0 1 Invierte OC0A / OC0B en Modo Comparación
1 0 Nivel bajo en OC0A/OC0B en Modo Comparación
1 1 Nivel alto en OC0A/OC0B en Modo Comparación
OC0x pin de comparación-salida
11. Timers/Contadores
11
Timers / Contadores
• TIMER/CONTADOR 0
2. Registros de Control:
o TCCR0A
COM0A1 COM0A0 COM0B1 COM0B0 ------------ ------------ WGM01 WGM00
OC0x pin de comparación-salida
Salida A en el modo PWM Rápido
COM0A1 COM0A0 DESCRIPCIÓN
0 0 Pórtico en operación normal, OC0A desconectado.
0 1 WGM02=0: Modo en operación Normal, OCA
desconectado
WGM02=1: Invierte OC0A en Modo Comparación
1 0 Nivel bajo en OC0A en Modo Comparación, Nivel alto al
inicio( Señal no Invertida)
1 1 Nivel alto en OC0A en Modo Comparación, Nivel bajo al
inicio (Señal Invertida)
12. Timers/Contadores
12
Timers / Contadores
• TIMER/CONTADOR 0
2. Registros de Control:
o TCCR0A
COM0A1 COM0A0 COM0B1 COM0B0 ------------ ------------ WGM01 WGM00
Salida A en el modo PWM Fase correcta
COM0A1 COM0A0 DESCRIPCIÓN
0 0 Modo en operación normal, OC0A desconectado.
0 1 WGM02=0:Modo en operación Normal, OCA desconectado
WGM02=1: Invierte OC0A en Modo Comparación
1 0 Nivel bajo en OC0A en Modo Comparación cuando cuenta
de subida. Nivel alto OC0A en Modo Comparación cuando
cuenta de bajada.
1 1 Nivel alto en OC0A en Modo Comparación cuando cuenta
de subida. Nivel bajo en OC0A en Modo Comparación
cuando cuenta de bajada
13. Timers/Contadores
13
Timers / Contadores
• TIMER/CONTADOR 0
2. Registros de Control:
o TCCR0A
COM0A1 COM0A0 COM0B1 COM0B0 ------------ ------------ WGM01 WGM00
Salida B en el modo PWM Fase correcta
COM0B1 COM0B0 DESCRIPCIÓN
0 0 Pórtico en operación normal, OC0B desconectado.
0 1 Reservado
1 0 Nivel bajo en OC0B en Modo Comparación con el contador
ascendente, Nivel alto al emparejarse en la comparación
con el contador descendente.
1 1 Nivel alto en OC0B en Modo Comparación con el contador
ascendente, Nivel bajo al emparejarse en la comparación
con el contador descendente.
14. Timers/Contadores
14
Timers / Contadores
• TIMER/CONTADOR 0
2. Registros de Control:
o TCCR0B
FOC0A FOC0B ------------ ------------ WGM02 CS02 CS01 CS00
Selección del reloj
CS02 CS01 CS00 DESCRIPCIÓN
0 0 0 Sin señal en el reloj Contador detenido
0 0 1 Clk/1 Sin pre escalamiento
0 1 0 Clk/8 Desde el pre-escalador
0 1 1 Clk/64 Desde el pre-escalador
1 0 0 Clk/256 Desde el pre-escalador
1 0 1 Clk/1024 Desde el pre-escalador
1 1 0 Flanco de bajada de la señal en el pin T0
1 1 1 Flanco de subida de la señal en el pin T0
15. Timers/Contadores
15
Timers / Contadores
• TIMER/CONTADOR 0
3. Registros de Comparación de salida:
o OCR0n
OCR0ARegistro de Comparación A
OCR0B Registro de Comparación B
D7 D6 D5 D4 D3 D2 D1 D0
Son registros de 8 bits, el valor que contienen estos registros es
comparado con el valor del Registro Contador TCNT0.
17. Timers/Contadores
17
Timers / Contadores
• TIMER/CONTADOR 0
4. Registros de Interrupción de Banderas:
o TIFR0
RESERVADOS OCF0B OCF0A TOV0
o TIMSK0
RESERVADOS OCIE0B OCIE0A TOIE0
BITS DESCRIPCIÓN
OCF0B Modo de comparación B de la bandera a la salida.
OCF0A Modo de comparación A de la bandera a la salida.
TOV0 Desbordamiento de Bandera
BITS DESCRIPCIÓN
OCIE0B Habilitación de Interrupciones a la salida de la comparación B.
OCIE0A Habilitación de Interrupciones a la salida de la comparación A
TOIE0 Habilitación de Interrupciones por desbordamiento
18. Timers/Contadores
18
Timers / Contadores
• TIMER/CONTADOR 0
Ejemplo:
Pasos a seguir para programar contador ascendente en Modo de Operación
Normal
1. Cargar el registro TCNT0 con el valor inicial del contador.
2. Definir el modo de operación del TIMER/CONTADOR. Cargar este valor en los
registros TCCR0A y TCCR0B.
3. Escoger la fuente de reloj del contador configurando los bits en el registro TCCR0B.
4. Monitorear la bandera de desbordamiento TOV0. Cuando TOV0 llega a un nivel alto
salir del lazo.
5. Limpiar la bandera TOV0 para iniciar el siguiente ciclo.
6. Retornar al paso 1
Notas del editor
Con un timer podemos realizar muchas aplicaciones como por ejemplo el control de velocidad de un motor, el manejo de un teclado, un barrido de 7 segmentos, obtención de muestras mediante el ADC, etc.
El funcionamiento general de un timer consiste en guardar en un registro especial de almacenamiento un valor máximo al que llegará un contador, cuando el valor en el contador sea igual al registro almacenado un comparador puede realizar las siguientes acciones:
- Se activa el flag de salida del timer iniciando así una interrupción.
- Programamos un evento en el cual en el pin de salida se conmute el nivel anterior, se ponga a nivel bajo o se ponga a nivel alto y así generar una señal a determinada frecuencia.
Para muchas aplicaciones se requiere emplear contadores y tiempos de retardo, para este propósito existen registros contadores en el micro. Para contar un evento bastaría conectar la fuente de evento al pin del reloj del registro contador. Cuando el evento externo ocurre, el contenido del contador se incrementa. Para el caso de retardos se conecta el oscilador al pin del reloj del contador. Cuando el oscilador marca el contador se incrementa. Existe una bandera para cada uno de los contadores. La bandera es configurada cuando el contador se desborda y se limpia/borra mediante software.
Un camino para generar retardo es limpiar el contador en un tiempo de inicio y esperar hasta q este llegue a un determinado numero. Otra forma es cargar el registro contador y esperar hasta que el contador se desborde y la bandera es configurada.
Si se emplea la fuente de reloj interna, entonces la frecuencia de el oscilador de cristal se introduce en el timer. para time-delay TIMER
Si se emplea la fuente de reloj externa se alimenta con pulsos al pin Counter
PWM Modulación por ancho de pulso.
TCNT0 Si se active el temporizador se active este registro.
Registros TCCR Configuración del timer
COMOA1:0 Controlan el comportamiento del pin de comparación-salida OC0A
La conducta del timer/contador y los pines de comparación a la salida se definen por la combinación del modo de Generador de Forma de Onda WGM02:0 y el modo de comparación de salida COM0x1:0.
Normal El contenido del timer/contador incrementa con cada clock. El contador no se limpia simplemente se sobreescribe de FF a 0
CTC Modo de borrado de contador en la igualdad de la comparación CTC (Auto-recarga)
CTC Modo de borrado de contador en la igualdad de la comparación CTC (Auto-recarga)
Registros TCCR Configuración del timer
COMOA1:0 Controlan el comportamiento del pin de comparación-salida OC0A
Registros TCCR Configuración del timer
COMOA1:0 Controlan el comportamiento del pin de comparación-salida OC0A
Registros TCCR Configuración del timer
COMOA1:0 Controlan el comportamiento del pin de comparación-salida OC0A
Registros TCCR Configuración del timer
COMOA1:0 Controlan el comportamiento del pin de comparación-salida OC0A
COMOA1:0 Controlan el comportamiento del pin de comparación-salida OC0A
COMOA1:0 Controlan el comportamiento del pin de comparación-salida OC0A
COMOA1:0 Controlan el comportamiento del pin de comparación-salida OC0A
COMOA1:0 Controlan el comportamiento del pin de comparación-salida OC0A