Timer2 PIC


Compartir: Share on Facebook0Tweet about this on TwitterShare on Google+0Share on Tumblr0Share on LinkedIn0

El timer2 PIC solo  puede ser utilizado como temporizador no como contador, consta de 8 bits por lo que sus valores pueden aumentar desde 0 a 255, se comentará sobre el timer2 PIC para el PIC16F877A, del que se puede ver y descargar su hoja de datos desde aquí, lo que  se  comente aquí para el timer2 de este microcontrolador es muy similar para otros microcontroladores PIC, la programación se realizará con el MPLAB XC8.

El registro TMR2 es en si el timer2 PIC, este registro tiene asociado un registro llamado PR2 de 8 bits, en este registro se cargará el número de veces que se quiere que el registro TMR2 aumente de valor, cuando el valor del registro TMR2 llegue a ser igual al valor cargado en el registro PR2 el registro TMR2 se pondrá a 0, por ejemplo si el registro PR2=150, entonces el registro TMR2 aumentará su valor en cada ciclo de instrucción hasta que se haga igual a 150, momento en el que el registro TMR2 se pondrá a 0  y volverá a aumentar sus valores hasta llegar nuevamente a 150 tras lo cual se volverá a reiniciar a 0.

Normalmente el registro del timer2 PIC TMR2 irá aumentando su conteo con cada ciclo de instrucción del microcontrolador PIC, y para  estos microcontroladores a cada ciclo de instrucción le toma 4 ciclos del oscilador que se esté utilizando, si se usa por ejemplo un cristal de Fosc=4Mhz del que cada ciclo del oscilador es de 0,25us, entonces cada ciclo de instrucción tardará 4 veces este valor, es decir 4*(0,25us) lo que viene a ser 1us, a esto se se conoce como ciclo máquina TCM=4/Fosc, entonces el registro TMR2 aumentará en una unidad cada microsegundo cuando el oscilador es de 4Mhz.

Como el registro TMR2 es de 8 bits este aumentará desde 0 o desde algún valor que se le ponga como valor inicial hasta el valor cargado en el registro PR2 siendo el máximo valor de 255, por ejemplo si el valor cargado en el registro PR2=150, entonces cuando el registro TMR2 va desde 0 hasta 150 habrán transcurrido 150us luego volverá a 0 pero en esa vuelta a 0 transcurre 1us mas, por lo cual en ir de 0 a 255 y volver a 0 transcurren 151us; no siempre se utiliza una FOSC de 4Mhz esto puede variar, por lo que como consecuencia variará el tiempo que trascurre para que el registro TMR2 aumente su valor.

Timer2 PIC como temporizador

T2CON es el registro de control del  timer2 PIC

El temporizador timer2 PIC cuenta con lo que se conoce como prescaler y también con un postcaler pero el postcaler solo hace su trabajo cuando el timer2 PIC es utilizado con interrupciones esto se ve en la sección de interrupciones con el PIC,  por ahora se comentará como utilizar tanto el prescaler como el postcaler, lo que hacen es que la frecuencia de trabajo FOSC se divida por este prescaler y a la vez por el postcaler si se utilizan ambos a la vez se logra que el temporizador timer2 PIC tarde un poco mas en aumentar su valor en una unidad.

timer2 pic registro t2con

El bit7 no se utiliza por lo que se le pone a 0.

Los bits de 6 al 3 mediante las combinaciones de estos bits se elige el postcaler, el poscaler puede tener los valores del 1 al 16.

El bit2 al poner este bit a 1 se habilita el uso del  timer2 PIC, si se pone a 0 el timer2 PIC estará deshabilitado.

Los bits 1 y 0 mediante las combinaciones de estos bits se elige el prescaler, el prescaler puede tener los valores del 1, 4 y 16

En la siguiente tabla se ve los valores que hay que dar a estos bits para obtener los diferentes valores de los prescaler y el postcale para el timer2 PIC.

timer2 pic registro t2con bits

Si el prescaler elegido es por ejemplo de 4 y el postcale de 16 cuando la FOSC=4Mhz, entonces la frecuencia de trabajo del temporizador Ftemp será de Ftemp=FOSC/(4*prescaler*postcale), el tiempo  que tardará ahora el temporizador timer2 PIC en aumentar una unidad será la inversa de este valor lo que se conoce como periodo del temporizador Ttemp=(4*prescaler*postcale)/(FOSC) por lo que en este caso Ttemp=(4*4*16)/(4Mhz) de donde Ttemp=64us, esto quiere decir que ahora el temporizador aumentará en una unidad cada 64us y en este caso entonces el registro TMR2 para ir de 0 a hasta el valor cargado en el registro PR2=150 tardará 150*Ttemp=150*64us lo que es igual a 9600us=9,6ms así para los demás prescaler y postcale.

Al utilizar los prescaler y los postcale se tiene la ventaja de temporizar tiempos mas largos pero muchas veces se vuelven demasiado largos, por lo que para lograr las temporizaciones que se quieren por ejemplo de 50ms se tendría que utilizar un prescaler y un poscale adecuado ademas de cargar en el registro PR2 un valor también adecuado.

Utilizando una regla de 3 simple se llega a la siguiente ecuación que ayudará a encontrar el valor inicial adecuado a cargar en el registro PR2 para obtener las temporizaciones buscadas.

PR2=(Tretardo*Fosc)/(4*prescaler*postcale)

Donde PR2 es el valor cargar en este registro para obtener el  tiempo buscado, Tretardo es el tiempo que se quiere obtener en el temporizador, Fosc es la frecuencia del oscilador o del cristal utilizado, prescaler y postcale será el prescaler y postcale elegido según la tabla anterior.

La ecuación mostrada anteriormente se cumple como se dijo en un inicio si el timer2 es utilizado con interrupciones, para el caso de no usar interrupciones el postale no tiene efecto y la ecuación se reducirá a la siguiente.

PR2=(Tretardo*Fosc)/(4*prescaler)

Esta será la que se usará para el ejemplo del uso del timer2 sin interrupciones, el valor máximo del prescaler según la tabla es de 16, ademas PR2 tiene que ser menor o igual a 255, si se usa un cristal de 4Mhz, se puede hallar el Tretardo máximo que se puede lograr con estas condiciones

Tretardomaximo=4*PR2*prescaler/Fosc=4*255*16/4 de donde Tretardomaximo=4080us lo que está al rededor de los 4ms.

Cuando se trabaja con las interrupciones del timer2 se logran tiempos de retardos mucho mayores por que allí si que influye el postcale.

Por ejemplo para obtener 4ms lo que sería el tiempo de retardo sin usar interrupciones, con una FOSC de 4Mhz, un prescaler de 16 se tendría:

PR2=(4ms)(4Mhz)/(4*16)

PR2=250

Este sería el valor a cargar en el registro PR2 para obtener 4ms con el timer2 PIC, ocurrirá que el timer2 PIC aumentará de 0 a 250 en 4ms, luego se resetea a 0 al alcanzar este valor.

Los resultados obtenidos serán usados en el ejemplo de la utilización del timer1 pic como temporizador.

Este proceso será el que se seguirá cuando se quiera utilizar el timer2 PIC como temporizador sin interrupciones.

Timer2 PIC como temporizador ejemplo

El circuito de ejemplo utilizado para ver el uso del timer2 PIC como temporizador es el siguiente, se hará cambiar el estado del pin RB7 cada 100ms, para ello se utilizará el timer2 PIC utilizando los cálculos anteriores, se obtendrá  con el temporizador timer2 PIC 4ms, pero luego en el programa utilizando una variable auxiliar se puede lograr los 100ms; entonces se carga el registro PR2=250 para obtener los 4ms como se calculó.

La programación será hecha en el XC8 porque este permite trabajar directamente con los registros, de esta manera se puede uno familiarizar mas con el microcontrolador PIC.

timer2 pic como temporizador circuito

Configuración del registro T2CON para el ejemplo

El bit7 no se usa por lo que se pone a 0, el postcale en este modo sin interrupciones no tiene efecto por lo que en las combinaciones de los bits del 6 al 3 se puede utilizar cualesquiera en este ejemplo se utilizará 1111, el bit2 se pondrá a 1 para habilitar el uso del timer2 PIC, para obtener los 4ms el prescaler tendrá que ser de 16 por lo que la combinacion de los bits 1 y 0 sera 10.

Luego el registro T2CON en el XC8 quedará así:

T2CON=0b01111110;// timer2 pic como temporizador prescaler de 16

El programa realizado en el MPLAB XC8 para el uso del timer2 pic como temporizador es el siguiente:

El uso del timer2 PIC como temporizador es mucho mas eficaz si se utiliza mediante las interrupciones, este tema se ve en la sección de interrupciones con el PIC.

Si he logrado ayudarte en cuanto al uso del timer2 PIC como temporizador comparte este enlace para poder ayudar a muchas personas mas. Muchas Gracias.

Atte: MrElberni.

Compartir: Share on Facebook0Tweet about this on TwitterShare on Google+0Share on Tumblr0Share on LinkedIn0