Beruflich Dokumente
Kultur Dokumente
MANEJO DE TEMPORIZACIONES
2016A
Temporizador (Definicin)
Un temporizador es simplemente un contador, que se incrementa
automticamente.
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 (Definicin)
Fsicamente, un temporizador 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
La primera mediante la ejecucin de lneas programacin llamadas retardos que se
lo hace mediante lazos o bucles simples o anidados.
La segunda utilizando los mdulos de temporizacin disponibles en el C. Son
contadores que cuentan a partir de un reloj externo o del propio oscilador del C y
que activan un indicador o bandera (flag) cuando 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.
5
Caractersticas Generales
Disponibles en todos los microcontroladores PIC.
Puede generar interrupciones por desbordamiento del temporizador.
Algunos temporizadores son 8 bits o 16 bits
Algunos pueden conectarse a un reloj externo, al reloj del procesador o a
cualquiera
Se puede Leer o Escribir el valor del temporizador
Se puede usar un pin externo como entrada / salida de reloj (es decir, como
contador de eventos)
6
Retardos
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
Cuando se utiliza 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 pueden 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.
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
Direccin 0x01 del banco 0 de la memoria de datos (TMR0)
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.
12
Registros Asociados al Timer0
El TIMER0 est asociado con lo 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)
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 de tiempos).
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.
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 temporizador/contador Timer0 por el pin RA4.
0 - El temporizador utiliza los pulsos de reloj internos (Fosc/4).
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
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
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.
La ltima opcin es 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
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
Ejemplo
Ejemplo2
Use el programa anterior para prender y apagar un led cada segundo.
30
Ejemplo3
Realizar un programa que prenda y apague un Led cada segundo use TMR0 y
desbordamiento
31