Vous êtes sur la page 1sur 8

TEMPORIZADORES

El micro PIC 16F6xx y 16F8X posee 3 temporizadores internos que


pueden trabajar como temporizador o como contador. Estos registros
se denominan:
TMR0
TMR1
TMR2
MODULO DE TIMER TMRO
Caractersticas:
8 bits temporizador/contador.
Capacidad de lectura/escritura.
8 bits preescalar programable por software.
Seleccin de reloj interno o externo.
Interrupcin por desbordamiento (FFh a 00h).
Seleccin de flanco para reloj externo.
El control del TMR0 se realiza mediante los registros OPTION
INTCON.

REGISTRO OPTION
El registro OPTION controla el modo de funcionamiento del TMR0.
REGISTRO OPTION
RBPU

INTDEG

T0CS

T0SE

PSA

PS2

PS1

DESCRIPCION DE BITS:
Bit7:

RBPU Pull-up PORTB.


1 = Cargas Pull-Up Desconectadas
0 = Cargas Pull-Up Conectadas.

Bit6:

INTEDG Flanco/Interrupuccin.
1 = RB0/INT Flanco ascendente
0 = RB0/INT Flanco descendente

Bit 5:

T0CS: Selecciona la fuente de Reloj para TMR0


1 = Pulsos por el pin RA4/T0CKI (contador)
0 = Ciclo de instruccin interno, pulsos igual Fosc/4
(temporizador).

Bit 4:

T0SE: Flanco de incremento para RA4/T0CKI


1 = Incrementa TMR0 en flanco descendente
0 = Incremento en flanco ascendente

Bit 3:

PSA: Bit de asignacin del Prescalar

1 = Divisor asignado al WDT


Preparado por: Sixto Reinoso

PS0

0 = Divisor asignado al TMR0


Bit 2-10:

PS2, PS1, PS0: Seleccin del prescalar (divisor de

frecuencia)

El prescaler debe tener algn valor, y si bien no se puede cargarle un


valor cualquiera, se tiene la posibilidad de seleccionarlo segn la
combinacin de PS2, PS1 y PS0 como muestra la tabla:
PS2 PS1 PS0

Divisin del
TMR0

Divisin
del WDT

1/1

1/2

1/8

1/4

1/16

1/8

1/32

1/16

1/64

1/32

1/128

1/64

1/256

1/128

REGISTRO INTCON
Los bits de este registro controlan las interrupciones internas del
TMR0.

REGISTRO INTCON
GIE EEIE T0IE INTE RBIE T0IF INTF RBIF

El Bit GIE (Global Interrupt Enable) habilita todas las interrupciones.


Los Bit's que terminan con la letra F son banderas (flags) y cambian
de estado ante la ocurrencia de algn evento, concretamente en la
interrupcin.
Los detalles de cada Bit del registro INTCON, se muestran en la tabla.
BIT's

R/W Reset

Bit 7: GIE
Habilitacin
R/W
General de
interrupciones.

Preparado por: Sixto Reinoso

Descripcin
1 = Todas las Interrupciones
activadas
0 = Todas las Interrupciones
desactivadas

Bit 6: EEIE
Int. de
Perifricos

R/W

1 = Activada
0 = Desactivada

Bit 5: T0IE
Interrupcin
del TMR0

R/W

1 = Activada
0 = Desactivada

Bit 4: INTE
Int. Externa
RBO

R/W

1 = Activada
0 = Desactivada

Bit 3: RBIE
Int. por PORTB R/W
RB4:RB7

1 = Activada
0 = Desactivada

Bit 2: T0IF
Bandera del
TMR0.

1 = TMR0 desbordado.
0 = No se ha desbordado

1 = Ocurri una interrupcin


externa
0 = No ha ocurrido interrupcin
externa

1 = Al menos un pin cambio de


estado
0 = Ningn pin ha cambiado de
estado.

Bit 1: INTF
Bandera RB0/INT
Bit 0: RBIF
Bandera RB4:RB7

R/W

R/W

R/W

En la tabla, los valores de R/W el bit es de lectura o escritura, los


valores de Reset son el estado de cada Bit despus de producirse un
reset o cuando se inicia el micro.
Si bien cada flag cambia o se pone a 1 al producirse una interrupcin,
es tarea del programador ponerlo a cero nuevamente, ya que si no lo
hace el micro estar siempre interrumpido o lo que es lo mismo,
creer que la interrupcin se est produciendo continuamente.

Temporizaciones
Algunas de las cosas que debemos tener en cuenta.
Se puede utilizar el oscilador interno del PIC o utilizar un externo de
hasta
20
Mhz.
El
registro
llamado
TMR0,
es
un
Temporizador/Contador de 8 bits, que como es lgico cuenta en
binario y en forma ascendente es decir... de 0x00 a 0xFF, lo
interesante de este registro es que cuando ocurre un
desbordamiento, o sea, pasa de 0xFF a 0x00, el registro INTCON la
bandera T0IF se pone en 1, y produce una interrupcin.

Preparado por: Sixto Reinoso

La estructura del micro para trabajar con este registro se indica en la


figura.

Los Bit's que estn escritos con T0SE, T0CS, PSA, PS2, PS1, PS0 son
configurables en el Registro OPTION, el Bit T0IF es el Bit2 del
registro INTCON (la bandera que se altera cuando el TMR0 se
desborda).
El registro TMR0 puede trabajar de dos modos distintos, ya sea como
temporizador o bien como contador el cual se selecciona en T0CS
(Bit5 del registro OPTION).
En modo Temporizador: El TMR0 se incrementa con cada Ciclo de
Instruccin (Fosc/4) y cuando el registro se desborde provocar
una interrupcin.
En modo Contador: El TMR0 se incrementar con cada pulso que
ingrese por el pin RA4/T0CKI, y por supuesto, cuando se desborde
producir la interrupcin. T0SE es el Bit4 del Registro OPTION, en l
se selecciona el flanco con el cual se incrementar el TMR0 cuando
haya un pulso por RA4. Este pin debe definirse como entrada.

Adems, el micro dispone de dos temporizadores, el TMR0 y


WDT (Watchdog). El primero es el que estamos tratando en esta
seccin, el segundo es el perro guardin, lo que hace es vigilar
cada cierto tiempo que el micro no se quede colgado, por
ejemplo cuando se queda detenido en un bucle infinito o en una
larga espera de un acontecimiento que no se produce, entonces
acta reseteando al micro.
El Prescalar es un predivisor de frecuencia que se utiliza
comnmente para programar tiempos largos y se puede
aplicarlo al TMR0 o al WDT, esto lo configura en PSA Bit3 del
registro OPTION.

Preparado por: Sixto Reinoso

Temporizacin con el registro TMR0.


El tiempo empleado en una temporizacin se puede calcular a partir
de un ciclo de instruccin (es decir 1 instruccin por cada
microsegundo, al trabajar con el oscilador interno de 4 Mhz), tambin
se necesita el valor del Divisor de Frecuencia y finalmente con el
complemento del valor cargado en TMR0 (es decir 256-TMR0), la
ecuacin que permite realizar el clculo es la que sigue...
Tiempo = 4 * Toscilador * (256 - TMR0) * Rango Divisor de Frecuencia

El 4 indica que el micro ejecuta una instruccin normal en 4 ciclos de


reloj.
Ejemplo: Se desea una temporizacin de 10 ms, trabajando con un
oscilador de 4 Mhz.
El primer paso, es seleccionar el prescalar, es decir, PS2, PS1, PS0 =
1, 1, 1. Por tanto, el Rango del divisor de frecuencia es 256.
El siguiente paso es calcular el valor que se debe cargar en
TMR0...???
256- TMR0= Tiempo / (4*Toscilador * Rango Divisor de Frecuencia).
256- TMR0 = 10000 us / (4 * 0.25 us * 256) = 39,0625 ciclos =~ 39
ciclos.
Eso significa que en TMR0 se debe cargar 256-39=217 y a partir de
all el TMR0 contar los 39 ciclos que faltan para desbordarse y
producir la interrupcin, y el tiempo que tardar en hacerlo es
aproximadamente 10000 us, o sea 10 ms.
PROGRAMA TEMPORIZADOR CON TMR0
Utilizando el registro TMR0, escribir un programa generar una onda
cuadrada de 2000 HZ.
El periodo de la seal es T= 1/f = 1/2000= 500 us. Por tanto, para
tener una onda cuadrada el tiempo en alto y en bajo de seal sern
iguales, o sea, 250 us, y este es el tiempo de temporizacin.
Aplicando la ecuacin para calcular el tiempo de temporizacin
obtenemos el valor para cargar el TMR0. Considerando que se
utilizar el oscilador interno de 4MHZ y un preescalar de 128:
256 - TMR0= Tiempo / (4*Toscilador * Rango Divisor de Frecuencia).
256 TMR0= 250us / (4*(1/4MHZ)*128)= 2
Preparado por: Sixto Reinoso

TMR0= 256 2= 254= 254.


Con estos datos escribimos el programa:
PROGRAMA 1
LED1 VAR PORTB.0
TRISB = 0
M VAR BYTE
K VAR BYTE
M=0
K=0
ON INTERRUPT GOTO TIMER
OPTION_REG = %10000110
INTCON = %10100000
TMR0= 254
LAZOPRINCIPAL:
IF M = 0 THEN LOW LED1
IF M = 1 THEN HIGH LED1
GOTO LAZOPRINCIPAL
DISABLE
TIMER:
K=K+1
IF K = 1 THEN M = 1
IF K= 2 THEN M = 0 : K = 0
INTCON = %10100000
TMR0= 254
RESUME
END

Figura 1. CIRCUITO PARA COMPROBAR EL FUNCIONAMIENTO DEL


TMR0 COMO TEMPORIZADOR
Preparado por: Sixto Reinoso

EJERCICIOS PREVIOS
Ejercicio 1. Calcular la mayor temporizacin que se puede obtener
haciendo uso del registro TMR0.
Ejercicio 2. Calcular los
temporizacin de 50 ms?.

valores

del

TMR0

para

tener

una

Ejercicio 3. Contador con el registro TMR0. Para utilizar el TMR0


como contador se debe seleccionar los bits TOSE y TOCS del registro
OPTION.

Cul es el valor que se debe poner en el registro OPTION para


el contador responda al flanco de bajada y acte el TMR0 como
contador?
Fije el valor para el registro INTCON.

TRABAJO DE LABORATORIO:
Puntos 1, 2 y 3 solo en el simulador.
Punto 4 en el protoboard.
1. Implemente el programa 1 y la figura 1. Mediante el osciloscopio virtual
observe la seal generada. Mida el periodo. Es el esperado? Cules
pueden ser las razones para no obtener los valores calculados?
2. Analizar detenidamente el cdigo del programa 1, comentar la finalidad
de las variables M, K. Comprobar que los valores de los registros
INTCON y OPTION sean los correctos para que mdulo TMR0 acte
como temporizador.
3. El Timer TMR0 como contador. Modifique el progrma 1, los
valores de los registros INTCON y OPTION con un preescalar
de para el TMR0, para que el timer TMR0 acte como
contador, segn el ejericio 3. Simule en Proteus utilizando el
circuito de la figura 2. Accione y cuente el nmero de veces que
acciona S1 hasta que se prenda el LED o se apague el LED.
Cuntos pulsos necesito?.
Si el TMR0 en el programa est fijado en 254 y el registro TMR0
se desborada al pasar de 255 a 0, es decir necesita 2 pulsos y
ocurre la interrupcin (y el LED debe cambiar de estado), est
cumpliendo con lo indicado?. Explique.

Preparado por: Sixto Reinoso

Figura 2. Circuito para comprobar el funcionamiento del TMR0 como


contador.
4. Realice el programa y un circuito para que un LED titile cada
500 ms. El retardo de tiempo debe ser generado por el TMR0.
Cuestionario
1. Escriba un porgrama para realizar un contador MOD-10 con
visualizacin el display. Un retardo de 1s para el contador debe
ser generado por el TMR1.
2. Utilizando el TMr2 escriba un porgrama para generar una seal
cuadrada de 5 KHZ.

Preparado por: Sixto Reinoso

Vous aimerez peut-être aussi