Está en la página 1de 11

Timers

Dr. Angel Ricardo Licona Rodríguez


arliconar@upp.edu.mx

1
Ciclo de reloj vs ciclo de máquina
Ciclo de reloj: Es el ciclo que generan los osciladores que determinan el paso del
microprocesador.

Ciclo de máquina: Es el ciclo que le toma a un microprocesador ejecutar una


instrucción en ensamblador. Este ciclo es de 4 ciclos de reloj.

2
Ciclo de máquina
Búsqueda: Se obtiene la instrucción
de la memoria del programa

Decodificación: Se interpreta el tipo


de instrucción a realizar (suma, mover
algún registro, evaluar, etc)

Ejecución: Se ejecuta la instrucción

Almacenaje: En caso de que la


instrucción así lo requiere, se
almacena el resultado en el registro de
trabajo.

3
Timers
Un timer se trata de un contador binario ascedente que posee el microcontrolador y actuá en forma
paralela a las instrucciones que este ejecutando su procesador en ese momento.

Un PIC normalmente cuenta con varios contadores, en el caso del 16F877 se tienen 3 con diferentes
características

4
Timer 0
⚫ Puede funcionar en modo 8bits (conteo máximo de 255)
⚫ Su registro de conteo puede ser leído y pre-cargado
⚫ Posee pre-escaladores (prescaler)
⚫ Fuente de reloj seleccionable (externa o interna)
⚫ Filo de entrada seleccionable (Rising o Falling)
⚫ Interrupción de desbordamiento

5
Timer 1
⚫ Contador de 16bits (conteo máximo de 65535)
⚫ Su registro de conteo puede ser leído y pre-cargado
⚫ Fuente de reloj seleccionable (externa o interna)
⚫ Interrupción de desbordamiento
⚫ Es utilizado por el modulo CCP
⚫ Posee una bandera del estado del reloj

6
Timer 2
⚫ Contador de 8bits (conteo máximo de 255)
⚫ Su registro de conteo puede ser leído y pre-cargado
⚫ Posee pre-escaladores (prescaler)
⚫ Posee pos-escaladores (postscaler)
⚫ Interrupción de desbordamiento

7
Pre-escalador (Prescaler)
⚫ Un pre-escalador es un divisor de frecuencia que Valor Prescaler
se puede utilizar para retrasar el conteo de nuestro 111 1:256
timer. Estos se utilizan si el reloj tiene una
frecuencia demasiado alta para poder utilizar 110 1:128
correctamente el contador.
101 1:64
⚫ Los pre-escaladores que posee el TIMER0 son 8 y
100 1:32
se configuran en los registros TOPS2, TOPS1 y
TOPS0 del timer. 011 1:16

010 1:8

001 1:4

000 1:2

8
Desbordamiento
⚫ Un desbordamiento ocurre cuando un contador ha llegado a máximo valor y, al no poder contar
más, es reiniciado a 0. Los timers producen una interrupción durante este desbordamiento
indicando que el contador ha sido reiniciado.

9
Controlar el desbordamiento
⚫ Utilizando la interrupción por desbordamiento, podemos conocer cuando una actividad o tiempo
requerido ha concluido, mientras nuestro microcontrolador realiza otras acciones en paralelo.
Como no es factible controlar la frecuencia de reloj del microcontrolador para controlar el tiempo
de desbordamiento, lo mejor es pre-cargar el timer con un valor cercano al desbordamiento, y
luego calcular el número de conteos que hacen faltan para él.

⚫ Ejemplo: Si cada ciclo de máquina dura 0.25 segundos, eso significa que el contador sube en 1 su
valor cada ¼ de segundo. Si mi contador es de 4bits (15 máximo), y se requiere un contador que
se desborde cada segundo, lo ideal seria pre-cargar el contador con un valor de 12, para que
cuando hayan pasando 4 conteos, el contador se desborde en 1 segundo exacto.

𝐷𝑒𝑙𝑎𝑦 ∗ 𝐹𝑜𝑠𝑐
𝑇𝐼𝑀𝐸𝑅0 = 256 −
𝑃𝑟𝑒𝑠𝑐𝑎𝑙𝑒𝑟 ∗ 4

10
Timers en arduinos
Timer 0
Es de 8bits. Usado para las funciones delay(), millis(), micros(). Es conveniente NO modificar este
TIMER para evitar alterar estas funciones que son muy comunes en nuestros códigos
Timer 1
Es de 16 bits. Usado por la librería Servo en Arduino Uno (Timer5 para Arduino Mega). Se usa
principalmente para el control de Servos, sin embargo, si no estas controlado servos, puedes usar
este timer 1 arduino libremente.
Timer 2
Es de 8 bits. Usado en la función tone(). Si no usas este módulo, puedes emplear el timer 2 Arduino
libremente para temporizar otra aplicación.

11

También podría gustarte