Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

PIC18F2550 - Timer0

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 5

Microcontroladores

Microcontroladores

El temporizador/contador Timer0 del PIC18F2550


Timer0 es un temporizador/contador cuyo funcionamiento está basado en un registro contador. Este
registro puede ser de 8 bits (modo de 8 bits) o de 16 bits (modo de 16 bits).
El registro contador puede contar:
- Pulsos del reloj del sistema (fOSC/4), en cuyo caso se comporta como temporizador.
- Pulsos externos que ingresan por el pin RA4/T0CKI, en cuyo caso se comporta como contador. Para esto
se debe configurar si cuenta flancos positivos (cambios de 0 a 1) o flancos negativos (cambios de 1 a 0).
El registro de configuración del Timer0 es T0CON.
Modo de 8 bits
En este modo el temporizador cuenta pulsos mediante el registro TMR0L. Como este registro es de 8 bits,
quiere decir que el temporizador cuenta 28 = 256 pulsos como máximo: de 0 a 255. Cuando alcanza el valor
de 255 y recibe un nuevo pulso, el contador vuelve a 0. Se dice entonces que el temporizador ha
desbordado. Cuando esto ocurre, el bit TMR0IF, denominado flag del Timer0, cambia de 0 a 1, indicando
que se ha producido el desbordamiento.
En el gráfico siguiente se observa el diagrama de bloques del Timer0 en modo de 8 bits como temporizador.

Por ejemplo, si se utiliza el oscilador interno a 8 MHz, entonces fOSC=8 MHz y fOSC/4=2 MHz, lo que produce
un período de 4TOSC=0,5 µs. Eso significa que Timer0 podrá temporizar un tiempo máximo de 256 × 0,5 µs
= 128 µs.
Para extender los tiempos se puede utilizar el predivisor (prescaler). Este es un divisor de frecuencia que
extiende el período del reloj interno por factores 2, 4, 8, 16, 32, 64, 128 y 256. En el siguiente gráfico vemos
al temporizador Timer0 con el predivisor asignado.

Por ejemplo, con un período de reloj interno 4TOSC=0,5 µs y el predivisor ajustado a 1:64, Timer0 podría
temporizar como máximo: 256 × 64 × 0,5 µs = 8192 µs ≈ 8,2 ms.
Como contador de pulsos externos, el funcionamiento en modo de 8 bits se da según el diagrama de
bloques a continuación. El bit T0SE es el que permite seleccionar si se contarán flancos positivos o
negativos.

Universidad Continental Microcontroladores Ing. Juan L. Merlo G


Microcontroladores
Microcontroladores

También como contador se puede utilizar el predivisor, en este caso para extender la capacidad de conteo,
significando que contará cada 2, 4, 8, 16, … pulsos de entrada, según se haya configurado el predivisor.

El registro TMR0L se puede cargar con cualquier valor, de modo que no necesariamente tenga que
empezar a contar desde cero. Por ejemplo, si cargamos TMR0L con el valor 156, entonces el registro
contador contará 256 – 156 = 100 pulsos hasta desbordarse. De esa manera se puede programar un
determinado tiempo a temporizar.
En modo de 8 bits, se pueden utilizar las siguientes fórmulas.
Para calcular el tiempo que temporizará Timer0:
Tiempo = ( 256 − TMR0L )  Div  4 TOSC
Donde, TMR0L es el valor cargado en dicho registro, Div es el valor programado en el predivisor (2, 4, 8,
16, 32, 64, o 128) y 4TOSC es el ciclo de instrucción.
Para calcular el valor que debemos cargar en TMR0L para lograr un determinado tiempo:
Tiempo
TMR0L = 256 −
Div  4 TOSC
En esta última fórmula hay que darle un valor al predivisor para calcular un valor de TMR0L. De preferencia,
se debe despejar un valor entero exacto para TMR0L, porque de lo contrario, el tiempo no será exacto,
solo aproximado. En algunos casos puede haber más de una solución con diferentes valores de predivisor.
Modo de 16 bits
En este modo el registro contador se forma juntando dos registros de 8 bits: TMR0H y TMR0L, formando
el registro de 16 bits TMR0 = TMR0H:TMR0L. Por lo tanto, ahora Timer0 será capaz de contar un máximo
de 216 = 65536 pulsos: de 0 a 65535. Cuando alcanza el valor de 65535 y recibe un nuevo pulso, el contador
vuelve a 0. Se dice entonces que el temporizador ha desbordado. Cuando esto ocurre, el bit TMR0IF,
denominado flag del Timer0, cambia de 0 a 1, indicando que se ha producido el desbordamiento.
En el gráfico a continuación podemos ver el diagrama de bloques de Timer0 funcionando en modo de 16
bits.

Universidad Continental Microcontroladores Ing. Juan L. Merlo G


Microcontroladores
Microcontroladores

Por ejemplo, si se utiliza el oscilador interno a 8 MHz, entonces fOSC=8 MHz y fOSC/4=2 MHz, lo que produce
un período de 4TOSC=0,5 µs. Eso significa que Timer0 podrá temporizar un tiempo máximo de 65536 × 0,5
µs = 32768 µs ≈ 32,8 ms. Vemos que la capacidad de temporización se ha incrementado notablemente al
utilizar un registro de 16 bits.
También en este modo podemos utilizar el predivisor para incrementar todavía más la capacidad de
temporización. En el siguiente gráfico vemos al temporizador Timer0 en modo de 16 bits con el predivisor
asignado

Por ejemplo, con un período de reloj interno 4TOSC=0,5 µs y el predivisor ajustado a 1:128, Timer0 podría
temporizar como máximo: 65536 × 128 × 0,5 µs = 4194304 µs ≈ 4,2 s. Vemos que ya alcanzamos el rango
de los segundos.
Como contador de pulsos externos, el funcionamiento en modo de 16 bits se da según el diagrama de
bloques a continuación.

Universidad Continental Microcontroladores Ing. Juan L. Merlo G


Microcontroladores
Microcontroladores

Y si se le asigna el predivisor como contador de pulsos externos, tendremos:

Si se desea iniciar el conteo desde un valor diferente de 0, se debe cargar el par de registros TMR0H:TMR0L
con un valor específico. Dependiendo del compilador utilizado, se pude cargar el par de registros
directamente con un valor entero de 0 a 65535, o registro por registro desdoblando el valor calculado en
dos partes.
Por ejemplo, si necesitamos cargar el valor 45536, para que Timer0 cuente 65536 – 45536 = 20000 pulsos,
entonces debemos desdoblar ese valor dividiéndolo entre 256:
45536 256
224 177
En esta operación vemos que el cociente es 177 y el residuo es 224. Eso significa que TMR0H se debe
cargar con el valor 177 y TMR0L se debe cargar con 224.
En modo de 16 bits, se pueden utilizar las siguientes fórmulas.
Para calcular el tiempo que temporizará Timer0:
Tiempo = ( 65536 − TMR0)  Div  4 TOSC
Donde, TMR0 es el valor de 16 bits cargado en el par de registros TMR0H:TMR0L, Div es el valor
programado en el predivisor (2, 4, 8, 16, 32, 64, o 128) y 4TOSC es el ciclo de instrucción.
Para calcular el valor que debemos cargar en TMR0 para lograr un determinado tiempo:
Tiempo
TMR0 = 65536 −
Div  4 TOSC
En esta última fórmula hay que darle un valor al predivisor para calcular un valor de TMR0. De preferencia,
se debe despejar un valor entero exacto para TMR0, porque de lo contrario, el tiempo no será exacto, solo
aproximado. En algunos casos puede haber más de una solución con diferentes valores de predivisor.
Registro de control T0CON
El registro T0CON permite configurar todas las opciones necesarias para el Timer0.

Universidad Continental Microcontroladores Ing. Juan L. Merlo G


Microcontroladores
Microcontroladores

Hay que tener en cuenta que después de un reset o al conectar la alimentación al microcontrolador, el
temporizador Timer0 queda habilitado en modo de 8 bits con entrada de pulsos externos (T0CKI) y
predivisor asignado al máximo (1:256).

Universidad Continental Microcontroladores Ing. Juan L. Merlo G

También podría gustarte