Está en la página 1de 6

TIMER 2

El Timer2 es un módulo que solamente funciona como temporizador. Y aunque el registro


TMR2 es de modo W/R (permite leer y escribir). No es utilizado para generar la temporización
deseada.

Si recordamos en las sesiones de TMR0 y TMR1, nosotros modificabamos el registro TMR0 y


TMR1(H,L) respectivamente. Con la finalidad de cargar un valor que me permitirá acercarme
más al desbordamiento o alejarme de el. De eso dependía la temporización.

Sin embargo en el TMR2 vamos a modificar un registro que servirá como meta para que
cuando la cuenta llegue este resetee de nuevo el valor del TMR2. Este registro se llama "PR2"
y hablaremos de él a continuación.

Para entender el funcionamiento de este módulo, nos basta con observar la hoja técnica y su
diagrama de bloques. Que los anexamos a continuación y con uno creado por nosotros para
que puedan entenderlo de mejor manera.

Como se puede observar, la única entrada del módulo es la oscilación de nuestro cristal. Es
debido a eso que el TMR2 solamente puede operar como temporizador.

En la segunda etapa : se ve como la entrada del oscilador llega a un Preescalador configurable


con los pines TCKPS0 y TCKPS1 del registro T2CON. Hay que tener presente que solamente
existen 3 escalas que son 1,4 y 16.
En la tercera etapa : Despues de haber escalado los pulsos del cristal, se incrementará el
TMR2. Nótese que este módulo muestra una entrada de Reset que es activado por una
condicional.
En la cuartaetapa : Se ve un comparador. Ahí está nuestro registro PR2 que dejará pasar la
salida del TMR2 o lo reseteará cuando la cuenta llegue al valor programado.
Es por eso que decimos que en el TMR2 se programa la meta.
Para finalizar : Tenemos 2 salidas que funcionan en paralelo sin embargo 1 de ellas (TMR2
out) servirá para alimentar a otros módulos dentro del microcontrolador. Y la salida que sigue
defrente se ve como se va a un POSTescalador. Esto permitirá que podamos obtener un poco
más de tiempo antes de que la bandera TMR2IF se haya activado.

T2CON: Es el registro ubicado en el banco 0, que nos permitirá configurar el módulo de TMR2
de nuestro microcontrolador.

- TOUTPS3,TOUTPS2,TOUTPS1,TOUTPS0 : Son los pines que nos permitirán seleccionar el


valor de Post-escalador de los pulsos de salida. Estos permiten generar un poco más de
tiempo antes de que la bandera TMR2IF se desborde. Las escalas se configurar modificando
estos pines en código binario. Y se tiene escalas desde 1 hasta 16.

- TMR2ON : Es el pinde habilitación y desabilitación del incremento del TMR2, aunque no se


muestra en las gráficas. Este permite activar y desactivar el módulo

- T2CKPS0 y T2CKPS1 : Son los pines que permiten seleccionar el valor de preescaler, la
forma de escribir es en binario y SOLAMENTE tiene 3 escalas que son. 1:1 , 1:4 y 1:16.

PIR1: En este registro se encuentran las bandera de aviso para cuando el TMR2 se haya
desbordado. Este registro se encuentra en el banco 0 según el datasheet.

- TMR2IF : Es la bandera que indica el desbordamiento del TMR2, Pero hay que tener
encuenta según el diagrama que este va despues del Postescaler. Lo que significa que
escogiendo un postescalador de 2, la bandera se activará cuando el TMR2 se haya desbordado
2 veces. (cuando tiene el valor de 255 y se le agrega uno más ocurre el desbordamiento)

PR2: Este es el registro más importante del TMR2, pues limita a un valor el incremento del
módulo. Una vez que el registro TMR2 haya llegado a igualarse con el PR2. Este registro TMR2
se volverá "0" nuevamente continuando con el ciclo.

La descripción en el datasheet.
Elemento Adicional:
Finalmente mostramos una imagen que nos permitirá entender mejor la diferencia de este
Timer con los otros que hemos estudiado.

En resumen: El TMR2 es un módulo donde comúnmente se programa el valor límite de


incremento usando el registro PR2. Cuando el TMR2 haya alcanzado este valor; resetea su
valor comenzando nuevamente el incremento (Se genera la oscilación)

Cuando la oscilación ya está generada, solamente nos queda


utilizarla. Para ello se puede usar como fuente de otros módulos
internos del pic. Y a eso nos vamos a dedicar.

TIMER 2 COMO TEMPORIZADOR


La utilización de este módulo como temporizador no es tan común. Sin embargo
conocer la forma de desarrollar es parte de nuestro aprendizaje.

Como tenemos más valores para analizar los cálculos se toman un poco más complicados.

Como la forma de programar es idéntica a la del TMR0 y TMR1 la teotía está demás. Entonces
vamos a crear un pequeño ejercicio que nos permita entender como se usa el TMR2 como
temporizador.
Realizar un tren de pulsos de 16ms de periodo a un dutty al 50%.
Lo primero que tenemos que hacer es despejar la fórmula para
hallar el valor del PR2. Luego de eso probaremos distintos
valores de Preescaler y Postscaler. También podemos optar por
conectar un cristal de distinto valor.

Realizando algunos cálculos.

Con los valores obtenidos, es cosa de empezar a programar


configurando al registro T2CON con los valores de escalamiento
(pre y post)
CODIGO

; ..........www.rodrigocarita.com --- Sesión 17 TMR2........


; Vamos a generar un tren de pulsos en el pin 6 del puerto B
; El periodo de los pulsos es de 16ms con dutty al 50%

; Usando la fórmula general del TMR2


; COn cristal de 20 MHz
; TimeruS = [Pres * (PR2+1) * Post ](4/fosc)
; Para 8ms
; Con....
; PR2 = 155
; Post = 16
; Pre = 16

;//////////////////////////////////////////////////////////////////////////
INCLUDE <P16F877A.INC>
LIST P=16F877A
INCLUDE <mimacro.INC> ;Incluimos la macro
__config 0x3f32 ; Este es un comando de fusibles, lo estudiaremos más
adelante.
cblock 0x20
endc
org 0;
banco 1 ; Nos dirigimos al banco 1
BCF PORTB,6 ; Comfiguramos el pin 6 como salida (LED)
MOVLW D'155' ; Cargamos el valor calculado
MOVWF PR2 ; En el registro PR2.
banco 0 ;Regresamos al banco 0
;T2CON: | x | TOUTPS3 | TOUTPS2 | TOUTPS1 | TOUTPS0 | TMR2ON | T2CKPS1 |
T2CKPS0
MOVLW b'01111010' ;Cargamos el valor de la configuración del TMR2
MOVWF T2CON ;en el registro de configuración del TMR2

PROGRAMA ;Título para bucle


apagar 6,puertob ; Apagamos el pin donde está conectado nuestro led
CALL RETARDOTMR2 ; Llamamos a la subrutina de retardo generado por tmr2
encender 6,puertob ; Encendemos el pin donde está conectado el LED
CALL RETARDOTMR2 ; Llamamos a la subruitona de retardo generado por tmr2
GOTO PROGRAMA ; Repetimos el programa (bucle)

RETARDOTMR2 ;Título de subrutina de retardo mediante TMR2


BSF T2CON,2 ; Encendemos el TMR2
BTFSS PIR1,TMR2IF ; Testeamos si el valor se ha desbordado
GOTO $-1 ;Caso falso: Seguimos testeando
BCF T2CON,2 ;Caso verdadero: Apagamos el TMR2
BCF PIR1,TMR2IF ;Apagamos la bandera de desbordamiento del TMR2
RETURN ;Regresamos a donde nos han llamado

END

También podría gustarte