You are on page 1of 37

CAPTULO 3

MANEJO DE TEMPORIZACIONES
2017A
Ing. Fanny Flores E.
Temporizador y Contador (Definicin)
Un temporizador o un contador se incrementan automticamente.

Puede ser conducido por el reloj de instrucciones del procesador, en


cuyo caso se conoce como un contador de tiempo (temporizador),
incrementando a una tasa predefinida y constante.

O puede ser accionado por una seal externa, donde acta como un
(contador), contando transiciones en un pin de entrada. De cualquier
manera, el temporizador continuar su cuenta, de forma
independiente, mientras que el PIC realiza otras tareas

2
Temporizador y Contador (Definicin)

Fsicamente, es un registro cuyos valores


incrementan continuamente hasta 255 y luego
retorna su cuenta desde el valor 0.

3
Manejo de Temporizaciones
En la mayor parte de los programas, resulta necesario controlar el tiempo
que tardan en ejecutarse algunas acciones o bien establecer una
duracin determinada para un estado del sistema digital que se quiere
realizar.
Estos tiempos se los puede realizar mediante dos formas
Lazos o bucles simples o anidados.
Mdulos de temporizacin disponibles en el C. Cuentan a partir de un reloj
externo (contador) o del propio oscilador del C (temporizador) y activan un
indicador o bandera (flag) cuando se desbordan o cuando alcanzan una
determinada combinacin.

4
Manejo de Temporizaciones
Es muy difcil en la prctica usar bucles de retardo programado, como
una manera precisa de medir el tiempo transcurrido. DURANTE EL
PROCESO DE RETARDO EL MICRO NO VA A MONITOREAR LAS
ENTRADAS.

Por otra parte, un mdulo contador o temporizador se mantiene


contando, de manera constante, mientras que el programa responde a
diversas entradas, realiza los clculos, o lo que sea. DURANTE EL
PROCESO DE RETARDO EL MICRO SI MONITOREA LAS ENTRADAS.

5
Caractersticas Generales del mdulo
contador o temporizador
Disponibles en todos los microcontroladores PIC.
Pueden generar interrupciones por desbordamiento del temporizador.
Algunos temporizadores son de 8 bits o 16 bits.
Algunos pueden conectarse a un reloj externo o al reloj del procesador.
Se puede Leer o Escribir el valor generado.
Se puede usar un pin externo como entrada de reloj (es decir, como
contador de eventos).

6
Retardos (lazos o bucles simples o anidados)
Se debe evaluar la duracin de la ejecucin de una zona de cdigo (contar
ciclos de instruccin) destinada a la temporizacin.
Todas las instrucciones se ejecutan en un ciclo de instruccin excepto las
instrucciones asociadas (saltos y llamadas a subprogramas).
Siempre dependen de la frecuencia del oscilador de que disponga el C :
1 ciclo de instruccin = 4 ciclos de oscilador

7
Retardos (lazos o bucles simples o anidados)
Cuando se utilizan retardos, el C est ocupado ejecutando esa zona de
cdigo y no podra realizar otras acciones salvo que se activen
interrupciones.
Con el C en modo de bajo consumo (SLEEP), no se podran realizar este
tipo de temporizaciones
Para conseguir alcanzar una temporizacin dada, a partir del oscilador
disponible, se puede obtener el nmero de ciclos mquina necesarios

# =
4
Ej: Para un retardo de 500ms
4
# = 500 = 500.000
4

8
Timers y Tipos de temporizadores
El segundo mtodo para realizar temporizaciones se lo hace mediante los
mdulos denominados timers con los cuales se puede realizar las
temporizaciones de manera independiente al cdigo que se est ejecutando
en ese momento.

Las banderas (flags) indican desbordamiento, los cuales pueden provocar una
interrupcin si se configuran adecuadamente.

De forma general los microcontroladores PIC tienen tres tipos de


temporizadores de lectura escritura, que se pueden incrementar
automticamente con cada ciclo de instruccin (si no se utiliza un pre-
escalador). 9
Timers
Se pueden realizar varias temporizaciones de manera simultnea con los
mdulos disponibles, hasta 3 en el caso de la serie PIC16F870
(TMR0,TMR1 y TMR2)

El valor de temporizacin resulta ser ms preciso con el uso de timers.

Adicionalmente los timers pueden contar impulsos que se producen en el


ambiente externo, los cuales son ajenos a los del oscilador, razn por la
cual los timers tambin son usados como contadores.

10
Timer0
Es muy conveniente y fcil de utilizar en programas o subrutinas para
generar pulsos de duracin arbitraria, en medir tiempo o en contar los pulsos
externos (eventos) casi sin limitaciones.
El mdulo temporizador/contador Timer0 tiene las siguientes caractersticas:
Temporizador/Contador de 8-bits
Registro Escritura/Lectura
Pre-escalador programable mediante software de 8-bit (lo comparte con el watchdog)
Seleccin de reloj interno o externo
Generacin de interrupcin por desbordamiento desde FFh a 00h
Seleccin de flanco de reloj externo programable

11
Timer0
La siguiente figura muestra el esquema del temporizador Timer0 con todos los bits que
determinan su funcionamiento. Estos bits se almacenan en el registro OPTION_REG.

Error

12
Registros Asociados al Timer0
El TIMER0 est asociado con los siguientes registros:
TMR0
OPTION_REG
TRISA
INTCON

13
Registro TMR0
Registro del PIC, temporizador contador de 8 bits con capacidad de lectura y
escritura. (Podemos contar hasta 28 = 256 valores, entre 0 y 255)

Es un temporizador especial del mdulo Timer0.

El TMR0 se inicializa con un valor, que se incrementa con cada pulso de entrada
hasta un valor mximo b11111111 (FFh, .255); con el siguiente pulso de entrada
el contador se desborda a b00000000, circunstancia que se advierte mediante la
activacin de la bandera T0IF (bit 2 del registro INTCON), generndose la
interrupcin, slo si el Control Global de Interrupciones est activado GIE = 1,
INTCON bit 7. Al desbordarse, empieza a contar desde 0 y no desde el valor
originalmente cargado.
14
Registro TMR0
Los pulsos aplicados al TMR0, pueden provenir de los pulsos aplicados al pin
RA4/T0CKI (actuando como contador) o de la seal de reloj interna Fosc/4
(actuando como temporizador).

El actuar de una u otra forma depende del bit 5 (T0CS) del registro OPTION.
Si T0CS = 1, el TMR0 acta como contador (reloj externo mediante el pin RA4).
Si T0CS = 0, el TMR0 acta como temporizador o timer (reloj interno).

15
Registro TMR0
CONTADOR
Cuando el TMR0 trabaja como contador se le introducen los pulsos desde
el exterior por el pin RA4/T0CKI. Su misin es contar el nmero de
acontecimientos externos representados por los pulsos que se aplican al
pin T0CKI.
El tipo de flanco activo se elige mediante el bit 4 (T0SE) del registro
OPTION.
Si T0SE = 1, incremento en la transicin de alto a bajo de la seal de reloj (flanco
descendente).
Si T0SE = 0, incremento en la transicin de bajo a alto de la seal de reloj (flanco
ascendente).

16
Registro TMR0
TEMPORIZADOR
Cuando el TMR0 trabaja como temporizador cuenta los pulsos de Fosc/4.
Se usa para determinar intervalos de tiempo concretos.
Estos pulsos tienen una duracin conocida de un ciclo de instruccin que
es cuatro veces el periodo de la seal de reloj.
Para una frecuencia de reloj igual a 4 MHz el TMR0 se incrementa cada
1s.

17
Registro TMR0
Si nos interesa, se puede insertar un divisor de frecuencia programable
(preescaler). Este divisor puede ser utilizado indistintamente como
preescaler del TMR0 o como postscaler del WDT (Watch Dog Timer), segn
lo programemos por software.

A diferencia de otros registros, el valor que contiene el registro TMR0 se


incrementa continuamente. De modo que, si asignamos el valor 10, despus
de un ciclo de instruccin, el contenido del registro comienza a ser
incrementado a 11, 12, 13 y as sucesivamente con una cadencia constante y
totalmente independiente de la ejecucin del resto del programa.

18
Registro OPTION_REG
La misin principal del registro OPTION_REG es gobernar el
comportamiento del registro TMR0

19
Registro OPTION_REG
Bit 7 RBPU - PORTB Pull-up enable bit (resistencia Pull Up del puerto PORTB)
1 - Resistencias pull-up del puerto PORTB estn deshabilitadas.
0 - Pines del puerto PORTB pueden estar conectados a las resistencias pull-up.
Bit 6 INTEDG - Interrupt Edge Select bit (bit selector de flanco activo de la interrupcin externa)
1 - Interrupcin por flanco ascendente en el pin INT (0-1).
0 - Interrupcin por flanco descendente en el pin INT (1-0).
Bit 5 T0CS - TMR0 Clock Select bit (bit selector de tipo de reloj para el Timer0)
1 - Los pulsos se llevan a la entrada del Timer0 por el pin RA4 (contador).
0 - El temporizador utiliza los pulsos de reloj internos (Fosc/4) (temporizador).
Bit 4 T0SE - TMR0 Source Edge Select bit (bit selector de tipo de flanco)
1 - Incrementa en flanco descendente en el registro TMR0.
0 - Incrementa en flanco ascendente en el registro TMR0.
Bit 3 PSA - Prescaler Assignment bit (bit de asignacin del pre-escalador)
1 - Pre-escalador se le asigna al WDT.
0 - Pre-escalador se le asigna al temporizador/contador Timer0.
20
Registro OPTION_REG
bit 2-0 PS2, PS1, PS0: Prescaler Rate Select bits

El registro Option_reg cuenta con un pre-escalador el cual puede dividir la frecuencia


con esto logramos controlar tiempos ms largos y aumentar la duracin de los pulsos
que incrementan el TMR0.
El Prescaler puede aplicarse al TMR0 o al Watchdog (perro guardin), definido en PSA
(bit 3) del registro OPTION. Cuando se asigna al TMR0 los pulsos pasan primero por el
divisor de frecuencia y una vez aumentada su duracin se aplican a TMR0. 21
Registro OPTION_REG
Para configurar el preescaler del registro TMR0, usaremos 4 bits del registro
OPTION, el PSA y tres bits que nos permiten dividir la frecuencia de una
seal de entrada por 2, 4, 8, 16, 32, 64, 128 o 256. En caso de utilizar un
divisor por 1, la seal de salida es la de entrada sin ningn cambio.

Por ejemplo, si usamos como oscilador externo del PIC un cristal de 4Mhz, entonces el
reloj interno de instrucciones funciona a
Fint = 4Mhz /4 = 1 Mhz = 1 s.

Si el Timer0 usa la seal del reloj interno y la pasamos por el preescaler configurado para
una divisin por 4, la seal a la salida del preescaler ser Fpresc = 250 Khz.

22
Registro INTCON
El registro INTCON contiene 2 bits para controlar las interrupciones
generadas por software o desbordamiento en el Timer0

bit 5 T0IE: TMR0 Overflow Interrupt Enable bit


1 = Habilita la interrupcin de TMR0
0 = Deshabilita la interrupcin de TMR0
bit 2 T0IF: TMR0 Overflow Interrupt Flag bit
1 = El registro TMR0 se ha desbordado (must be cleared in software)
0 = El registro TMR0 no se desbord
23
Cmo cuenta el Timer0?
00H
El Timer0 cuenta exclusivamente de forma FFH
ascendente y nunca descendente.
El Timer0 se incrementa cada que se ejecutan las
instrucciones del programa dependiendo del pre-
escalador.
00H
(28 N)
00H
FFH
Si el TMR0 se carga con un valor, ste comenzar a Valor cargado
contar desde el valor cargado hasta que se desborda en TMR0
(cuando pasa a 00H)
00H
24
Clculo con TMR0
El Timer0 es un registro de 8 bits por lo que puede contar de 00H a FFH.
Para determinar el valor que debe contar el Timer0 para realizar una
temporizacin, se utiliza la siguiente frmula:
Temporizacin = 4*Tosc*ValorTMR0*Preescalador (Oscilador principal)
Temporizacin=Tclk*ValorTMR0*Preescalador (con reloj externo [RA4])
As por ejemplo: Si se desea realizar una temporizacin de 16ms con un
preescalador de 1:64, asumiendo que se va usar un oscilador XT de 4MHz se
tendr:
16ms=4*0,25S*ValorTMR0*64
Valor TMR0=250

25
Clculo con TMR0
Para realizar la temporizacin de 16ms se puede testear el valor del TMR0 y
cuando llegue a este valor efectuar el proceso que se desee e inicializar
nuevamente el Timer 0.

Otra opcin mucho mas comn es cargar el TMR0 con N=256-ValorTMR0 y


Testear el Bit2 T0IF del registro INTCON que se pone en 1 cuando el TMR0
se desborde, una vez que sucede eso se debe volver a cargar el valor de N
en TMR0, para inicializar nuevamente la temporizacin. Se debe habilitar la
interrupcin colocando un 1 en el bit 5 T0IE del registro INTCON lo que
provocar una interrupcin cuando suceda el desbordamiento del Timer0
(Manejo de Interrupciones se revisar detalladamente en el prximo
captulo) 26
Ejemplo 1
Generar un cdigo usando lenguaje ensamblador para obtener un
retardo de 1 segundo.
PASOS
1. Crear variables necesarias
2. Configurar registro OPTION_REG con el valor de pre-escalador
necesario
3. Generar el cdigo
Ejemplo 1
Ejemplo 1
Ejemplo2
Use el programa anterior para prender y apagar un led cada segundo.

30
Ejemplo 3
Realizar un programa que prenda y apague un Led cada segundo use TMR0 y
desbordamiento

31
Ejemplo 3

32
Ejemplo 4
Programa que permite obtener mediante un pulsador una cuenta de 0 a 9 en un
Display de 7 segmentos usando TIMER0 como contador

33
Ejemplo 4

34
Ejemplo 4

35
Ejemplo 4 (MikroC)

36
Ejemplo 4 (MikroC)

37

You might also like