Sunteți pe pagina 1din 6

Curso de Electrnica y Microcontroladores PIC

Csar Antonio Saldas Caro. www.ingenieropic.wordpress.com

Parte 7 El mdulo Timer 1. Este curso incluye una carpeta con el cdigo fuente compilado del programa que analizaremos. El Timer 1 Contador y Temporizador En la parte 5 del curso de microcontroladores, analizamos el Mdulo Timer 0. Recordemos que el Timer 0 es un contador/temporizador de 8 bits que poda contar de 0 a 255 y luego desbordarse generando una interrupcin. Yo te recomiendo que leas esta parte del curso nicamente si lograste dominar el uso del Timer 0. El Timer 1 es un contador/temporizador de 16 bits, el cual consiste en dos registros de 8 bits, los cuales son el TMR1H y TMR1L que son de lectura y escritura. Este Timer incrementa su cuenta desde 0 a 65.536 y al desbordarse vuelve a 0. Tambin es posible generar una interrupcin por desborde del TMR1 habilitando los bits correspondientes. El Timer 1, al igual que el Timer 0, puede funcionar como contador o como temporizador. En modo de temporizador, los registros TMR1H y TMR1L se incrementan en cada ciclo de instruccin del reloj interno del PIC, este modo se selecciona poniendo en 0 el bit TMR1CS del registro T1CON. En modo de contador el par de registros TMR1H y TMR1L se incrementan por cada flanco ascendente de una seal de reloj introducida por los pines RB6 y RB7, y se puede configurar en modo sincrnico o asincrnico. El preescaler del Timer 1 tiene un valor mximo de 8 y se selecciona con los bits T1CKPS1 y T1CKPS0 de la siguiente manera: 00 = 1:1 01= 1:2 10= 1:4 11= 1:8 La gran diferencia entre el Timer 0 y el Timer 1, es que este ltimo tiene la posibilidad de activar o detener la cuenta mediante el bit TMR1ON ubicado en el registro T1CON.

El registro T1CON Este registro se encuentra en el banco 0 de la memoria del PIC. Los bits 7 y 6 no se utilizan, por lo tanto se colocan siempre en 0.

Analicemos lo que sucede al colocar cada bit de este registro en 0 o en 1: T1CKPS1 y T1CKPS0: Timer 1 Input Clock Prescale Select bits. Con estos bits se selecciona el valor del preescaler. 00= Preescaler puesto en 1:1 01= Preescaler puesto en 1:2 10= Preescaler puesto en 1:4 11= Preescaler puesto en 1:8 T1OSCEN: Timer 1 Oscillator Enable Control bit. 1= El oscilador se habilita. 0= El oscilador se deshabilita. T1SYNC: Timer 1 External Clock Input Synchronization Control bit. Este bit se utiliza cuando el Timer 1 est en modo de contador, y sirve para sincronizar los pulsos de reloj externo con los del reloj interno. Si el bit TMR1CS est puesto en 1 (modo contador), entonces se debe poner el bit T1SYNC en 0 para sincronizar, o se pone en 1 para no sincronizar. Ahora si el bit TMR1CS est puesto en 0 (modo temporizador), entonces el bit T1SYNC tambin se debe poner en cero puesto que solo se utiliza cuando el Timer 1 est en modo de contador. TMR1CS: Timer 1 Clock Source Select bit. Con este bit se selecciona si el TMR1 se incrementa con pulsos externos o por cada ciclo del reloj interno. 1= Pulsos externos por el pin RB6. 0= Reloj interno. TMR1ON: Timer 1 On bit. Con este bit se activa o se detiene el Timer 1. 1= Habilita Timer 1. 0= Detiene Timer 1.

En modo de contador, el Timer 1 tiene dos formas de funcionar, ya sea en modo sincrnico o en modo asincrnico. El Timer 1 en modo de Contador Sincrnico En este caso, se debe ingresar una seal de reloj externa por los pines RB6 y RB7, y la cuenta del Timer 1 se incrementar en cada flanco ascendente de la seal introducida. Para poder utilizar el Timer 1 en modo de contador sincrnico se debe poner en 1 el bit T1OSCEN para habilitar el modo de oscilador y poner en 0 el bit T1SYNC para habilitar el modo de sincronizacin, para que la seal de reloj externa se sincronice con la del reloj interno. El Timer 1 en modo de Contador Asincrnico En este caso, tambin se debe ingresar una seal de reloj externa por los pines RB6 y RB7, y la cuenta del Timer 1 se incrementar en cada flanco ascendente de la seal introducida. Para poder utilizar el Timer 1 en modo de contador asincrnico se debe poner en 1 el bit T1OSCEN para habilitar el modo de oscilador y poner en 1 el bit T1SYNC para deshabilitar el modo de sincronizacin, para que la seal de reloj externa no se sincronice con la del reloj interno. La nica diferencia entre ambos es el cambio del bit T1SYNC. En el primer caso se habilita para que se sincronice, y en el segundo caso se deshabilita. Oscilador externo para el modo de contador El oscilador externo, como se mencion, va conectado en los pines RB6 y RB7 y debe ser de una frecuencia de 32.768KHz con capacitares de 15pF. El Timer 1 en modo de Temporizador En este caso el bit TMR1CS debe estar en 0, y el bit T1SYNC para la sincronizacin no afecta al reloj interno, puesto que este siempre trabaja en modo sincrnico. Avanza a la siguiente pgina

Interrupcin por desborde del TMR1 (Timer 1) Como dije anteriormente, es posible generar una interrupcin por desborde del TMR1. Recordemos la lista de fuentes de interrupcin que se pueden hacer con el PIC, la cual hemos analizado en partes anteriores de este curso:

Para que esta interrupcin funcione de forma exitosa debemos habilitar los bits correspondientes de diversos registros: GIE: Debemos habilitar el bit GIE (bit 7) del registro INTCON del banco 0 para habilitar las interrupciones globales. PEIE: Debemos habilitar el bit PEIE (bit 6) del registro INTCON del banco 0 para habilitar las interrupciones de perifricos. TMR1IF: Debemos poner en 0 el bit TMR1IF (bit 1) del registro PIR1 del banco 0 para limpiar la bandera de la interrupcin. TMR1IE: Debemos poner en 2 el bit TMR1IE (bit 0) del registro PIE1 del banco 1 para habilitar las interrupciones por desborde del TMR1. Y como siempre, debemos escribir el vector de interrupciones (0x4). El Timer 1 en modo de Temporizador Ya estamos listos para hacer nuestra primera aplicacin con el Timer 1 en modo de temporizador. Primero debemos conocer la formula que nos permite saber cuales son los valores que debemos cargar en los registros TMR1H y TMR1L para que el TMR1 se demore el tiempo que nosotros queremos en desbordarse: TempTMR1 = (65536 - precarga) x PS x Tinstr Precarga = Valor asignado a TMR1H y TMR1L. PS = Valor del preescaler. Tinstr = 4/frecuencia de oscilacin TempTMR1 = Temporizacin que queremos (en segundos).

La mxima temporizacin que podemos obtener utilizando el Timer 1 con un oscilador externo de 4MHz es la siguiente: TempTMR1 = (65536 - precarga) x PS x Tinstr TempTMR1= (65536 0) x 8 x 1 De esta forma estamos utilizando el preescaler mximo (1:8) y la precarga es de 0, por lo tanto el tiempo obtenido es de 524,288mS. Si se desea un tiempo diferente, se deben cargar los correspondientes nmeros en los registros TMR1H y TMR1L. Por ejemplo, para una temporizacin de 50mS hacemos lo siguiente: Utilizando el preescaler en 1:8 y colocando como precarga 59286: TempTMR1 = (65536 - precarga) x PS x Tinstr TempTMR1 = (65536 - 59286) x 8 x 1 Esto nos da aproximadamente 50.000 microsegundos, lo que equivale a 50mS. Entonces tenemos que cargar el nmero 59288 en los registros TMR1H y TMR1L. Pero como hacemos esto? Debemos convertir el nmero 59286 a hexadecimal, el resultado es E798. Por lo tanto cargamos 0xE7 en TMR1H y cargamos 0x98 en el registro TMR1L de la siguiente forma: Movlw Movwf Movlw Movwf 0xE7 TMR1H 0x98 TMR1L

De esta manera, el desbordamiento se realizar en el tiempo previsto (50mS) utilizando el preescaler en 1:8 con precarga 59286. Puedes ver el cdigo fuente del programa en la carpeta Temporizador el cual est hecho de forma tal que se genere una interrupcin a los 500mS aproximadamente. Gracias por descargar este curso Csar Saldas.

S-ar putea să vă placă și