TMR0 - 16f877a

Descargar como ppt, pdf o txt
Descargar como ppt, pdf o txt
Está en la página 1de 19

IUT Cumaná

TEMA 4. TIMER 0

Microcontroladores Prof. Luis Zurita


REGISTROS ASOCIADOS AL IUT Cumaná

TEMPORIZADOR TMR0

• TMR0: Registro de 8 bits de lectura/escritura


• OPTION: Configura al TMR0 para que trabaje como
temporizador ó contador y asigna el valor al prescaler
• INTCON: Da información mediante el bit “TOIF”
cuando el TMR0 se ha desbordado.
• TRISA (PUERTO A): Permite el ingreso de pulsos
cuando el TMR0 está configurado como contador por
RA4

Prof. Luis Zurita


REGISTRO OPTION (Dirección 81H) IUT Cumaná

• bit 7, RPBU : Resistencia Pull-up, Puerto B, habilita el bit


1: Desactivadas
0: Activadas
• bit 6, INTEDG: Flanco activo para el control de
interrupciones
1: Con flanco Ascendente
0: Con flanco Descendente
• bit 5, TOCS: Fuente de Reloj para TMR0
1: Pulsos introducidos a través de RA4/T0CK1 (Contador)
0: Pulsos de reloj interno Fosc/4 (Temporizador)
• bit 4, TOSE: Tipo de flanco en TOCK1
1: Incremento de TMR0 cada flanco descendente
0: Incremento de TMR0 cada flanco ascendente
• bit 3, PSA: Bit de asignación del prescaler divisor de
frecuencia
1: El divisor de frecuencia se asigna al WDT
0: El divisor de frecuencia se asigna al TMR0
• bit 2-0, PS2:PSO: Rango con el que actúa el divisor de
frecuencia.

Prof. Luis Zurita


EJEMPLOS DE CONFIGURACIÓN
IUT Cumaná

• Configure al PIC16F84 para que el temporizador TMR0, trabaje con los


pulsos provenientes de un reloj externo, y el mismo cambie en el flanco
de subida del pulso externo:

• Configure al PIC16F84 para que el TMR0, trabaje con el reloj interno y la


frecuencia del mismo sea dividida por 32:

¿Y los demás bits?


¿Cómo lo cargo al OPTION?
En el primer caso: En el segundo caso:
movlw b’xx11xxxx1’ movlw b’xx0x0100’
movwf OPTION movwf OPTION

Prof. Luis Zurita


TEMPORIZADOR TMR0 IUT Cumaná

• Registro asociado al Timer0. Se encuentra en la posición 01H de la


memoria RAM. Es el corazón del módulo Timer0. Puede ser leído o
escrito en cualquier momento. El TMR0 se incrementará
automáticamente por cada ciclo de instrucción y contará desde 0 (00H)
hasta 255 (FFH) (Contador de 8 bits).
• Para que opere como temporizador, el bit TOCS (del registro OPTION)
debe ser cero (0), el bit PSA= 0 y deben ser cargados los bits PS2 a
PS0, según sea el preescaler a utilizar para lograr nuestra
temporización.
• Para que opere como contador, se usa una entrada de reloj externo en el
TMR0 y se deben de cumplir ciertos requisitos para que el reloj externo
pueda ser sincronizado con el reloj interno (TOSC). Además existe un
retardo en el incremento real del TMR0, después de la sincronización. El
bit TOCS= 1. Se debe seleccionar el tipo de flanco que producirá el
incremento del TMR0 ( TOSE = 1 ó 0).

Prof. Luis Zurita


¿QUÉ ES EL PRESCALER? IUT Cumaná

• Divide la frecuencia de reloj de entrada del Timer0, entre valores predefinidos,


como se ve en la tabla asociada al registro OPTION, 1:32, 1: 64, 1:256, etc., genera
una nueva señal de menor frecuencia a la salida, que será la señal de reloj de
entrada al registro TMR0.
• “Ralentiza” señales de entrada demasiado rápidas para nuestros propósitos.
• También existe un postescaler, asociado al perro guardián WDT (Watch Dog Timer)
del microcontrolador, pero en este caso recibe el nombre de postcaler ya que se usa
a la salida del WDT, no pudiendo estar asignado a la vez al Timer0 o al WDT. El
preescaler es transparente para el programador, no se puede leer ni escribir sobre
él, pero se puede seleccionar por software, como ya se ha dicho, mediante el
registro OPTION.
• Nota: Para evitar un RESET no deseado del sistema, es necesario ejecutar una
secuencia de instrucciones específicas cuando se cambia la asignación del prescaler
del TMR0 al WDT. Esta secuencia debe ser seguida, aún cuando el WDT esté
inactivo.
¿CÓMO CUENTA EL TMR0?
IUT Cumaná

00H
FFH
El TMR0 cuenta exclusivamente de
forma ascendente, nunca descendente.

00H

(28 – N10)
00H
Si el TMR0 se carga con un valor, FFH
éste comenzará a contar desde el
valor cargado hasta que se
desborda (cuando pasa a 00H) Valor cargado
En el TMR0

00H

Prof. Luis Zurita


CÁLCULOS CON EL TMR0
IUT Cumaná

• Cuando se carga en el registro TMR0 un valor XXH, él mismo


contará: (FFH – XXH) impulsos y el tiempo que tarda en hacerlo
viene dado por la expresión:
 Temporización= 4 * TOSC * Valor Real TMR0 * Rango del
divisor de Frecuencia
 Valor Real TMR0 = (28 – N10) = (256 – N10)
 N10= Valor a cargar en el TMR0

Ejemplo: Sea un valor a cargar en el TMR0 de 100, un prescaler


seleccionado de 1:32 y un oscilador XT. Determine el tiempo en
que tardará el TMR0 en desbordarse.
Solución: Sea XT = Frecuencia = 4 MHz, T = 0.25 μs.
Temporización= 4*0.25 μs* (256 – 100) * 32 = 4.992 ms.

Prof. Luis Zurita


OTROS EJEMPLOS
IUT Cumaná

• Se desea saber: ¿Qué valor debemos cargar en el TMR0, si


deseamos obtener una temporización de 10,24 ms, utilizando un
preescaler de 128 y un cristal XT?
Solución: Temporizac ión 10,24ms
(256 – N ) =
10 = = 80
4  TOSC  Rgodivisor 4  0.25s  128
(256 – N10) = 80, despejando N10 = (256 – 80) = 176, el valor que
debemos cargar en el TMR0 es 176, para que éste cuente desde 176
hasta 256.

• Elegir el TMR0, para generar un retraso de 1.5 ms utilizando un


oscilador de 10 MHz.
Solución: Sea Fosc= 10 MHz, T = 100 ns
Temporizac ión 1.5ms
(256 – N10) = 4  T  Rgodivisor = 4 100ns  RgoDivisor
OSC

N10 = 256 - (3750/RgoDivisor)

Prof. Luis Zurita


CONTINUACIÓN EJEMPLO ANTERIOR
IUT Cumaná

Démosle valores al Rango del divisor, hasta obtener un valor que se


acerque lo más posible al retardo propuesto:
Si Prescaler= 256, Valor a cargar en el TMR0= 241 (redondeado)
Si Prescaler= 128, Valor a cargar en el TMR0= 227 (redondeado)
Si Prescaler= 64, Valor a cargar en el TMR0= 197 (redondeado)
Si Prescaler= 32, Valor a cargar en el TMR0= 139 (redondeado)
Etc…
A manera de práctica, realice usted, el cálculo de la Temporización, para
cada uno de los valores que se consiguieron en los cálculos anteriores.
Escoja uno y justifique. Particularmente parece que el que tiene el rango
de divisor de 64, es el mejor.

• Nota: En este ejercicio resuelto, usted puede darse cuenta de que no


hay un solo resultado para los ejercicios, pero lo que si debe cumplirse
es que sea cualquiera que sean los valores que se tomen para los cálculos,
estos deben de estar cercanos a la respuesta que se espera del
temporizador que esté diseñando.

Prof. Luis Zurita


• Ejemplo. Diga ¿cuánto es la máxima temporización que se puede
IUT Cumaná

hallar con el TMR0? Asuma que se está trabajando con un XT.


Solución: Tomamos el máximo factor de escala de división todos
los estados que puede contar el TMR0:
– Temporización= 4*0.25 μs*(256 )*256 = 65.536 ms.
– Este es el máximo valor que podemos conseguir del TMR0.

• ¿Cómo hacemos entonces para conseguir valores superiores a


éste, tales como 0,5 s; 1 s; 2 s; entre otros?
– Esto se puede arreglar si tenemos un contador de mayor
número de bits. La solución está en extender el Timer0 con un
registro (auxiliar) controlado por software.
– Dicho registro (auxiliar) contará el número de interrupciones
por desbordamiento que genera el Timer0, de forma de que
éste pase por cero, cuando haya pasado el tiempo que estamos
calculando.

Prof. Luis Zurita


USO DE REGISTRO AUXILIAR
IUT Cumaná

Pasos:
1. Escoger un valor para el prescaler.
Un posible criterio es calcular todas las frecuencias de prescaler que
podemos obtener con cada divisor posible. Las frecuencias sin decimales
son interesantes al poder encontrar múltiplos de ellas a la salida del
TMR0 con mayor facilidad. En general, la elección del valor del prescaler
es empírica: depende del problema, la experiencia y sobre todo de la
práctica.
2. Determinar el valor del Registro Auxiliar, a partir del valor dado por
el TMR0.
Normalmente viene dado por un múltiplo de la frecuencia, asociada al
tiempo calculado. Con un ejemplo entenderemos mejor lo que se desea
plantear:
Ejemplo: Determine los valores del TMR0 y del Registro Auxiliar para
conseguir una temporización de 1 segundo. Utilice un oscilador XT.
Solución: XT= Frecuencia = 4 MHz ; Tosc= 250 ns
• Paso 1. Como no se nos ha impuesto que prescaler utilizar ni que
temporización, podemos aleatoria mente escogerlas, como en el ejemplo
6. Evaluando cualquiera, cuya temporización del TMR0 se basó en 5 ms,
escojamos el prescaler 128 y sustituyamos los valores en la ecuación
principal:
– Temporización= 4*250 ns*(256 - 217)*128 = 4.992 ms
IUT Cumaná

CONTINUACIÓN DEL EJEMPLO ANTERIOR

• Paso 2. ¿Qué valor debe de tener el registro auxiliar?


a) Al tiempo de 4.992 ms, se asocia una frecuencia del TMR0 de =
1
= 200.3 Hz, redondeando, tomamos este múltiplo:
4.992ms
200, Así, tendremos entonces que si multiplicamos 200*4.992
ms = 0.998 s, que es un valor bastante cercano a 1 segundo.
b) La misma operación pero interpretada de una forma más sencilla
es determinar cuantas veces necesitamos al tiempo calculado
para lograr un segundo:
1segundo
 200.32
4.992ms
La que usted entienda mejor es válida.
Nuestro registro auxiliar debe ser de 200!!!
Recuerde de que éste registro auxiliar no debe superar 255.
Si supera este valor, se debe adicionar un nuevo registro
auxiliar
DE LOS CÁLCULOS A LA PROGRAMACIÓN
IUT Cumaná

• Realicemos un ejercicio completo: Realice un programa que


permita encender y apagar un led cada 15 ms, mediante el
timer0. Utilice un oscilador XT.

Prof. Luis Zurita


DE LOS CÁLCULOS A LA PROGRAMACIÓN
IUT Cumaná

Paso 2. Debemos de
estructurar el programa
para que vigile e informe
cuando el TMR0 se ha
desbordado, y el bit que nos
da esta información es el
TOIF, del Registro
INTCON. Adicional a esto
debemos configurar el
registro OPTION para que
este trabaje con el
prescaler que hemos
seleccionado para nuestros
cálculos, así como de
asignarlo al TMR0. Así como
la rutinaria configuración de
los puertos.
LIST P=16F84A
INCLUDE P16F84A.INC IUT Cumaná

ORG 00H
GOTO INICIO
INICIO BSF STATUS,5
Paso 3. Programa CLRF TRISA
MOVLW B’11010110’
MOVWF OPTION_REG
BCF STATUS,5
CLRF INTCON
LEDON BSF PORTA,0
CALL RETARDO
LEDOFF BCF PORTA,0
CALL RETARDO
GOTO LEDON
;***RUTINA DE RETARDO***
RETARDO MOVLW D’139’
MOVWF TMR0
ESPERA BTFSS INTCON,TOIF
GOTO ESPERA
BCF INTCON,TOIF
RETURN
END
Prof. Luis Zurita
Ejercicio. Realice un programa que permita encender y apagar un
led cada un segundo. Mediante Timer0 y con un oscilador XT. IUT Cumaná

Subrutina

Programa Principal

Prof. Luis Zurita


IUT Cumaná

¿OTRA FORMA DE HACER LOS CÁLCULOS?

• Pero si aún le enredan todas estas fórmulas, para calcular


temporizaciones, probemos con estas tres:

Pruebe ahora realizar los mismos cálculos siguiendo el 1, 2, 3…

Prof. Luis Zurita

También podría gustarte

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy