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