los temporizadores - IES Antonio Machado

Anuncio
LOS TIMER DEL 16F84
MICROCONTROLADORES PIC
01/04/2005
TEMA 13
LOS TEMPORIZADORES
CCFF D.P.E. MÓDULO DE PROYECTOS
1
1. INTRODUCCIÓN (1)
¾ El temporizador/contador TMR0
¾ El perro guardián (Watchdog)
La función del primero es el control de tiempos y además
puede contar impulsos procedentes del exterior.
El segundo tiene por misión evitar que el programa entre
en lazos infinitos, es decir que se quede “enganchado”,
para ello cada cierto tiempo comprueba que la
ejecución del programa es la normal, en caso contrario
produce un RESET.
01/04/2005
LOS TEMPORIZADORES
El PIC 16f84, dispone de dos temporizadores:
CCFF D.P.E. MÓDULO DE PROYECTOS
2
Tanto el TMR0 como el perro guardián, llevan la cuenta
en registros de 8 bits, con ellos solo se pueden contar
hasta FFh estados/sucesos.
En el PIC 16f84, existe un preescaler, que se puede
asignar al TMR0 ó al perro guardián; este preescaler
funciona como un divisor de frecuencia programable
para sus señales de entrada.
Gracias a este preescaler las cuentas/temporizaciones
pueden tener valores mas razonables.
La programación del TMR0, del perro guardián y del
preescaler se realiza mediante el registro OPTION (d.
81h) de la zona de SFR.
01/04/2005
LOS TEMPORIZADORES
1. INTRODUCCIÓN (2)
CCFF D.P.E. MÓDULO DE PROYECTOS
3
01/04/2005
LOS TEMPORIZADORES
2. Diagrama De Bloques Del Preescaler Y
Tmr0/Wdt (1)
CCFF D.P.E. MÓDULO DE PROYECTOS
4
LOS TEMPORIZADORES
2. Diagrama De Bloques Del Preescaler De
TMR0/WDT Y Bits Del R. Option (2)
• Los bits TOCS, TOSE, PSA, PS2, PS1, PS0,
pertenecen al registro OPTION.
• PS2-PS0: Rango con que actúa el preescaler, bits 0,
1 y 2; valor por defecto 111.
• Los rangos se especifican en la siguiente tabla:
PS2 PS1 PS0
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
Divisor para TMR0
1:2
1:4
1:8
1:16
1:32
1:64
1:128
1:256
Divisor para WDT
1:1
1:2
1:4
1:8
1:16
1:32
1:64
1:128
5
• PSA: Asignación del divisor de frecuencia (bit 3)
– 1: Preescaler asignado al WDT (valor por defecto)
– 0: Preescaler asignado a TMR0.
• TOSE: tipo de flanco en TOCK1 (bit 4)
– 1: Incremento de TMR0 en cada flanco descendente
(defecto)
– 0: Incremento de TMR0 en cada flanco ascendente
• TOCS: Tipo de reloj para TMR0 (bit 5)
– 1: Pulsos exteriores (Contador), valor por defecto
– 0: Pulsos del reloj interno (Temporizador)
01/04/2005
LOS TEMPORIZADORES
2. DIAGRAMA DE BLOQUES DEL
PREESCALER DE TMR0/WDT (2)
CCFF D.P.E. MÓDULO DE PROYECTOS
6
El TMR0 es un contador ascendente de 8 bits, que puede
funcionar con el reloj interno o con un reloj externo.
Cuando actúa como contador, los impulsos se introducen
a través del pin RA4/TOCK1, debiendo seleccionarse
el flanco activo de los mismos.
01/04/2005
LOS TEMPORIZADORES
3. EL TMR0 (1)
CCFF D.P.E. MÓDULO DE PROYECTOS
7
Una vez alcanzado el valor FFh, y con el siguiente
impulso, se pone a 00h, a la vez este desbordamiento
hace que se active el flag T0IF del registro INTCON, y
si está habilitada, se producirá una interrupción.
Recuérdese que para que TMR0 actúe como contador se
deberá fijar a 1 el bit TOCS.
Para que TMR0 actúe como temporizador, el bit TOCS
debe programarse a 0, mientras que el valor de TOSE
es indiferente.
Cuando TMR0 trabaja como temporizador, su valor se
incrementa con cada ciclo de instrucción.
01/04/2005
LOS TEMPORIZADORES
3. EL TMR0 (2)
CCFF D.P.E. MÓDULO DE PROYECTOS
8
Igual que en el caso del contador, una vez alcanzado el
valor FFh, y con el siguiente impulso, se pone a 00h, a
la vez este desbordamiento hace que se active el flag
T0IF del registro INTCON, y si está habilitada, se
producirá una interrupción.
En ambos casos, el registro TMR0 se debe inicializar.
Ejemplo 1:
Indicar el valor con el que se debe inicializar TMR0, para
que provoque una interrupción cuando se produzca un
pulso en el pin RA4/TOCK1 (preescaler asignado a
WDT).
01/04/2005
LOS TEMPORIZADORES
3. EL TMR0 (3)
CCFF D.P.E. MÓDULO DE PROYECTOS
9
Ya que únicamente deseamos que se cuente un
suceso, el valor con que deberemos inicializar
TMR0 es FFh.
Complemento a 2 de 01h = FFh
Ejemplo 2:
Repetir el cálculo para que se cuenten 2 impulsos
externos.
Ya que únicamente deseamos que se cuenten 2
sucesos, el valor con que deberemos inicializar
TMR0 es FEh.
Con el primer impulso, TMR0 pasa a valer FFh, y con
el segundo 00h, provocando además la activación
del flag T0IF.
01/04/2005
LOS TEMPORIZADORES
3. EL TMR0 (4)
CCFF D.P.E. MÓDULO DE PROYECTOS
10
Complemento a 2 de 02h = FEh
Por lo tanto parece claro que el valor a cargar en
TMR0 para contar N sucesos es justamente el
complemento a 2 de N.
Esto es cierto siempre que el predivisor esté
asignado a WDT.
En el caso de que el predivisor estuviese
asignado a TMR0, habrá que tener en cuenta
que el número a cargar en él debe estar
dividido por el rango indicado en dicho divisor .
01/04/2005
LOS TEMPORIZADORES
3. EL TMR0 (5)
CCFF D.P.E. MÓDULO DE PROYECTOS
11
LOS TEMPORIZADORES
3. EL TMR0 (6)
Ejemplo 3:
Indicar el valor con que se debe inicializar TMR0
si se desea provocar una interrupción cuando
se produzcan 512 sucesos.
En este caso se hace necesario el concurso del
predivisor, ya que el número de sucesos a
contar excede de 255.
Las soluciones son múltiples:
Ej:. Preescaler 1:256, TMR0 C a 2 de 2 (FEh)
2 x 256 = 512
Ej:. Preescaler 1:128, TMR0 C a 2 de 4 (FCh)
4 x 128 = 512
12
Ej:. Preescaler 1:4, TMR0 C a 2 de 128 (C0h)
128 x 4 = 512
Etc…
Recuerde que todas las instrucciones
escriben en TMR0 borran el preescaler.
01/04/2005
LOS TEMPORIZADORES
3. EL TMR0 (7)
CCFF D.P.E. MÓDULO DE PROYECTOS
que
13
Comprobemos como se utiliza el TMR0 para la
medida de tiempos (temporizador).
El valor de la temporización viene dado por:
Temporización= 4•Tosc•(256-N) • (Rango del Divisor)
Donde 256-N es nº de veces que se incrementará
TMR0 para producir el desbordamiento del mismo.
Tosc es el periodo de la señal de reloj.
Rango del Divisor es la relación del preescaler 1:2
hasta 1:256
01/04/2005
LOS TEMPORIZADORES
3. EL TMR0 (8)
CCFF D.P.E. MÓDULO DE PROYECTOS
14
Ej. Determinar el tiempo que se tardará en
producir una interrupción si la frecuencia del
reloj del sistema es de 4MHz, el preescaler está
asignado a TMR0 y con un rango de 1:256, y
TMR0 se ha inicializado con el valor 06h (6 en
decimal.)
Tosc = 1/ 4. 10 6 = 0,25 µs.
Temporización = 4 x 0,25 µs x (256 - 6) x 256 =
64.000 µs.
01/04/2005
LOS TEMPORIZADORES
3. EL TMR0 (9)
CCFF D.P.E. MÓDULO DE PROYECTOS
15
Hay que tener en cuenta que la temporización
máxima que se puede obtener con TMR0 y con
un oscilador de 4Mhz es de 65536 µs.
Calculemos el valor con el que se debe inicializar
TMR0 para una temporización determinada.
El valor a cargar en TMR0 será el complemento a
2 del número resultante de la siguiente
operación:
Temporización/4•Tosc•Rango del Divisor
Ej.: determinar el valor con que se debe inicializar
TMR0 si queremos temporizar 1 ms (1000 µs),
suponiendo una frecuencia de oscilación de
4MHz.
01/04/2005
LOS TEMPORIZADORES
3. EL TMR0 (10)
CCFF D.P.E. MÓDULO DE PROYECTOS
16
Tosc = 1/ 4. 10 6 = 0,25 µs.
4. Tosc = 1µs.
Valor de TMR0 = 1000µs/ 1µs x Rango del Divisor
Si fijamos el valor del divisor en 1:4, el valor con el
que
deberemos
inicializar
TMR0
es
el
complemento a 2 de 250d. = 06h
Como se habrá observado, no se pueden obtener
todos los valores de temporización, ya que el rango
del divisor aumenta en potencias de 2:
1:2, 1:4, 1:8, … 1:256
01/04/2005
LOS TEMPORIZADORES
3. EL TMR0 (11)
CCFF D.P.E. MÓDULO DE PROYECTOS
17
El Watchdog o perro guardián es un contador interno
de 8 bits que provoca un reset cuando se
desborda.
Este recurso puede activar o desactivar, mediante la
programación del bit WDTE de la palabra de
configuración.
El control de tiempos de este temporizador, está
basado en una red RC interna e independiente de
TMR0.
Esta última característica permite que siga
incrementando
su
cuenta
aunque
el
microcontrolador se encuentre en estado de bajo
consumo.
01/04/2005
LOS TEMPORIZADORES
4. El Perro Guardián WDT (1)
CCFF D.P.E. MÓDULO DE PROYECTOS
18
01/04/2005
LOS TEMPORIZADORES
4. Diagrama de bloques Del Perro Guardián
CCFF D.P.E. MÓDULO DE PROYECTOS
19
Para evitar el desbordamiento del WDT, se debe
refrescar (ponerlo a cero) mediante las
instrucciones CLRWDT ó SLEEP.
La instrucción CLRWDT, borra el WDT, y reinicia su
cuenta.
La instrucción SLEEP, provoca que el WDT se ponga
a cero, además el PIC entra en el estado de bajo
consumo,
WDT
en
este
estado
sigue
incrementando su cuenta, y cuando se desborda,
provoca un RESET que saca al sistema del modo
de bajo consumo, es decir lo despierta.
01/04/2005
LOS TEMPORIZADORES
4. El Perro Guardián WDT (2)
CCFF D.P.E. MÓDULO DE PROYECTOS
20
El perro guardian (WDT) tiene un periodo nominal
para su desbordamiento de 18 ms (sin preescaler).
El tiempo de desbordamiento puede variar con la
temperatura, tensión de alimentación.
Como ya se ha indicado anteriormente, al WDT se le
puede asignar el preescaler que posee el PIC, para
ello, se debe poner a 1 el bit PSA del registro
OPTION.
De idéntica manera a como hacíamos con TMR0, se
puede programar el rango del divisor, mediante los
bits PS0, PS1 y PS2 del registro OPTION.
01/04/2005
LOS TEMPORIZADORES
4. El Perro Guardián WDT (3)
CCFF D.P.E. MÓDULO DE PROYECTOS
21
En este caso el rango puede variar desde 1:1, 1:2,
1:4 y hasta
1:128, aumentando según las
potencias de dos.
Si se selecciona el rango 1:128, el tiempo de
desbordamiento se eleva hasta 2,3 s.
01/04/2005
LOS TEMPORIZADORES
4. El Perro Guardián WDT (4)
CCFF D.P.E. MÓDULO DE PROYECTOS
22
01/04/2005
LOS TEMPORIZADORES
5. Ejemplos de fabricante
CCFF D.P.E. MÓDULO DE PROYECTOS
23
01/04/2005
LOS TEMPORIZADORES
5. Ejemplos de fabricante
CCFF D.P.E. MÓDULO DE PROYECTOS
24
Descargar