13/11/2016
Tim er 1 PIC - MICROCON TR OLADORES
MICROCONTROLADORES MICROCONTROLADORES Programación de Microcontroladores Microcontroladores PIC, AVR, ARDUINO
Inicio » Timer1 PIC
Timer 1 PIC Compartir: Comparti r:
0
0
0
0
0
En este caso se verá el uso del timer1 PIC como contador y como temporizador, en lo que sigue se comentará para el caso del PIC16F877A por lo que es muy importante que se tenga a mano la hoja de datos datos del PIC16F877A, para el caso de utilizar algún otro microcontrolador PIC el procedimiento será muy similar a lo aquí comentado, la programación se realizará con el XC8. El timer1 PIC es un temporizador contador de 16 bits, el registro TMR1 es el temporizador contador timer1 PIC en si, es donde se guardan los valores del timer1 PIC, cuando es utilizado como temporizador, sus valores aumentaran de uno en en uno entre 0 y 65535 con cada 4 ciclos de reloj, no olvidar que cada ciclo de instrucción del microcontrolador PIC es realizado en 4 ciclos de reloj, por ejemplo si el oscilador con el que está funcionando el microcontrolador PIC es de 4MHz, entonces el registro TMR1 aumentará en una unidad cada 1us, si el registro TMR1 se incrementa en 100 unidades habrán transcurrido 100us; cuando es utilizado como contador el temporizador timer1 PIC ya no aumenta su valor de uno en uno en cada 4 ciclos de reloj, sino que lo hará mediante el flanco de subida o el flanco de bajada de alguna señal que llegue a un pin especial del PIC conectado al timer1 PIC, este pin es identificado como T1CKI que en el PIC16F877A es el pin15 o RC0, esto puede variar de acuerdo al microcontrolador microcontrolador PIC utilizado, pero siempre se llamará T1CKI.
El registro TMR1 del timer1 PIC puede ser leído y escrito, puede ser prescalado para que el tiempo en su incremento de valor en una unidad sea mayor, el timer1 PIC cuando alcanza su valor máximo de 65535 se reinicia, volviendo a incrementar sus valores de 0 a 65535, además cuando llega a su valor máximo y se reinicia puede producir una interrupción, lo cual se decide por programa.
Timer1 AVR como contador Para el PIC16F877A el registro TMR1 del timer1 PIC está formado por 16 bits por lo que se puede contar desde 0 hasta 65535, al utilizar timer1 PIC como contador este no aumentará sus valores o su cuenta con cada ciclo de instrucción, en este caso el timer1 estará conectado al pin T1CKI por donde se le hará llegar una señal, la cual al cambiar de estado de un bajo a un alto, esto es por flanco de subida, hará que el timer1 PIC se incremente en una unidad, estos incrementos en su cuenta serán siempre por cada flanco de subida, por ejemplo cada vez que la señal que llega al pin T1CKI pase de un bajo a un alto o de 0 a 1, el registro TMR1 aumentará en una unidad, de esta manera se le puede utilizar como contador, cuando la señal pase de un alto a un bajo o de 1 a 0 el registro TMR1 no aumentará su valor o no se incrementará.
La programación del Timer1 PIC como contador se hace mediante el bit1 o el bit TMR1CS del registro T1CON.
Política y privacidad de Cookies
http://m icr ocontr ol ador es- mr el ber ni .com /ti mer 1- pi c/
1/8
13/11/2016
Timer1 PIC - MICROCONTROLADORES
Los bits 7 y 6 no se utilizan por lo que se les pone a 0.
Los bits 5 y 4 son para elegir un prescaler,MICROCONTROLADORES mediante las combinaciones de estos bits se pueden elegir los prescaler 1, 2, 4 u 8. Programación de Microcontroladores PIC, AVR, ARDUINO El bit3 es para cuando se quiere conectar un oscilador independiente al timer1 PIC, este ocilador se debe colocar entre el pin T1OSO (pin 15) y el pin T1OSI (pin16) para esto hay que poner este bit a 1.
El bit2 es para hacer que el timer1 PIC cuando es programado como contador trabaje en forma sincronizada con el sistema interno del pic. El bit1 (TMR1CS), con este bit se elige si el timer1 PIC será utilizado como contador o como temporizador, al poner este bit a 1 TMR1CS=1 se elige la opción de utilizar el timer1 PIC como contador, al ponerlo a 0 se elige la opción de utilizarlo como temporizador, el aumento en las cuentas del timer1 PIC será siempre por flanco de subida de la señal en el pin T1CKI.
El bit 0 (TMR1ON) al poner este bit a 1 se habilita el uso del timer1 PIC, cuando este bit está a 0 el timer1 PIC estará desactivado.
Timer1 PIC como contador ejemplo El circuito utilizado es el que se muestra en la siguiente imagen, la señal que ingresa por el pin T1CKI se genera con la ayuda de un fotorresistor, cada vez que el fotorresistor disminuya su valor al pin T1CKI le llegará un alto, esto es un flanco de subida, lo que provocará que el registro TMR1 aumente en una unidad, la cuenta del timer1 PIC irá desde 0 hasta 65535, se verá de forma indirecta los valores del timer1, se hará que cada vez que el timer1 aumente en 8000 unidades se encienda un led del puerto b, se empezará con los leds del puerto b totalmente apagados. Se utilizará un led mas conectado al pin RD1 se hará que este led esté en contacto con el fotorresistor para que sea este el que genere los altos y bajos que llegarán al pin T1CKI, con lo que en cada flanco de subida se incremente el valor del registro TMR1, el led se hará parpadear cada 20ms. 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
Configuración del registro T1CON para el ejemplo Los bits 7 y 6 no se utilizan por lo que se les pone a 0, el prescaler será de 1 para que los valores del registro TMR1 se incrementen en una unidad en cada flanco de subida que ocurra en el pin T1CKI, por lo que los bits5 y 4 se pondrán a 0, no se usará ningún oscilador externo por lo que el bit3 se pondrá a 0, el conteo será en forma asíncrona por lo que el bit2 se pondrá a 1, el bit1 se pondrá a 1 porque se utilizará el timer1 PIC en Política y privacidad de Cookies
http://microcontroladores-mrelberni.com/timer1-pic/
2/8
13/11/2016
Timer1 PIC - MICROCONTROLADORES
modo contador y el bit0 se pondrá a 1 para habilitar el timer1 PIC.
Luego el registro T1CON en el XC8 quedará MICROCONTROLADORES así:
de Microcontroladores PIC, AVR, ARDUINO T1CON=0b00000111;// timer1 pic como Programación contador asíncrono El programa realizado en el MPLAB XC8 para el uso del timer1 pic como contador es el siguiente: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
///////////////////////////////////////////////// ///////////////////////////////////////////////// //////**microcontroladores‐mrelberni.com**/////// /////////** timer1 PIC como contador **////////// ///////////////////////////////////////////////// //bits de configuración para el PIC16F877A #pragma config FOSC = XT // Oscillator Selection bits (XT oscillator) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = ON // Power‐up Timer Enable bit (PWRT enabled) #pragma config BOREN = ON // Brown‐out Reset Enable bit (BOR enabled) #pragma config LVP = OFF // Low‐Voltage (Single‐Supply) #pragma config CPD = OFF // Data EEPROM Memory Code Protection bit #pragma config WRT = OFF // Flash Program Memory Write Enable bits #pragma config CP = OFF // Flash Program Memory Code Protection bit #define _XTAL_FREQ 4000000 #include "xc.h" int
//cristal utilizado de 4Mhz
main( void) { TRISDbits.TRISD1= 0;//en el pin RD1 se conecta el led que para generar la señal //en el pin T1CKI PORTDbits.RD1= 0;//El led se inicia apagado TRISB=0;//Puerto B como salida para ver indirectamente los incrementos de TMR1 PORTB=0;//El puerto B se inicia a 0 T1CON=0b00000111 ;// timer1 pic como contador asíncrono TMR1=0;//se inicia a 0 while(1){//ciclo
de programa el timer1 se ponga a 0, todos los leds del PORTB=0;//puerto B se apagan } if(TMR1==0){//cuando
switch(TMR1){//observa
los valores que va tomando TMR1 8000://cuando el registro tmr1 es 8000 PORTB=0b00000001 ; break; case 16000://cuando el registro tmr1 es 16000 PORTB=0b00000011 ; break; case 24000://cuando el registro tmr1 es 24000 PORTB=0b00000111 ; break; case 32000://cuando el registro tmr1 es 32000 PORTB=0b00001111 ; break; case 40000://cuando el registro tmr1 es 40000 PORTB=0b00011111 ; break; case 48000://cuando el registro tmr1 es 48000 PORTB=0b00111111 ; break; case 56000://cuando el registro tmr1 es 56000 PORTB=0b01111111 ; break; case 60000://cuando el registro tmr1 es 60000 PORTB=0b11111111 ; break; }//transcurren 50ms case
PORTD^=(1<<1);//El led en RD1 se coloca sobre el fotorresistor __delay_ms( 20);//este led cambia de estado cada 20ms, de esta } //forma se logra enviar altos y bajos al pin T1CKI return 0; }
La siguiente es la imagen del circuito de prueba para el uso del timer1 PIC como contador, se puede ver el led que está en contacto con el fotorresistor.
Política y privacidad de Cookies
http://microcontroladores-mrelberni.com/timer1-pic/
3/8
13/11/2016
Timer1 PIC - MICROCONTROLADORES
MICROCONTROLADORES Programación de Microcontroladores PIC, AVR, ARDUINO
Temporizador contador PIC: Timer1 como temporizador. Se verá en este caso el uso del temporizador contador pic timer1 como temporizador, normalmente el registro TMR1 del timer1 PIC irá aumentando su valor en una unidad 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 para el que cada ciclo del oscilador será 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 le llama ciclo máquina TCM=4/Fosc, entonces el registro TMR1 aumentará en una unidad en cada microsegundo cuando el oscilador es de 4Mhz. Como el registro TMR1 es de 16 bits este aumentará desde 0 o desde algún valor que se le ponga como valor inicial hasta un máximo de 65535, por ejemplo si va desde 0 hasta 65535 habrán transcurrido 65535us luego volverá a 0 pero en esa vuelta a 0 transcurre 1us mas, por lo cual en ir de 0 a 65535 y volver a 0 transcurren 655 36us; 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 TMR1 aumente su valor en una unidad. El temporizador contador pic TMR1 cuenta con lo que se conoce como prescaler esto hace que la frecuencia del oscilador FOSC se divida por este prescaler, con lo que se logra que el timer1 pic tarde un poco mas en aumentar su valor en una unidad; el prescaler puede tomar el valor de 1, 2, 4 o 8; estos valores se eligen programando los bits 4 y 5 del registro T1CON.
En la siguiente tabla se puede ver las combinaciones de los bits 5 y 4 para obtener los diferentes valores de los prescaler para el timer1 PIC.
Política y privacidad de Cookies
http://microcontroladores-mrelberni.com/timer1-pic/
4/8
13/11/2016
Timer1 PIC - MICROCONTROLADORES
MICROCONTROLADORES Programación de Microcontroladores PIC, AVR, ARDUINO
Si el prescaler elegido es por ejemplo de 8 y la FOSC=4Mhz, entonces la frecuencia de trabajo del temporizador Ftemp será de Ftemp=FOSC/(4*prescaler), el tiempo que tardará ahora el temporizador en aumentar una unidad será la inversa de este valor lo cual se conoce como periodo del temporizador Ttemp=(4*prescaler)/(FOSC) por lo que en este caso Ttemp=(4*8)/(4Mhz) de donde Ttemp=8us, esto quiere decir que ahora el temporizador aumentará en una unidad cada 8us y en este caso entonces el registro TMR1 para ir de 0 a 65535 tardará 65535*Ttemp=65535*8us lo que es igual a 524280us=524,28ms así para los demás prescaler. Al utilizar los prescaler se tiene la ventaja de lograr temporizar tiempos mas largos pero muchas veces se vuelven demasiado largos si el registro TMR1 se inicia a 0, por lo cual para lograr las temporizaciones que se quieren por ejemplo de 500ms se tendría que utilizar un prescaler adecuado e iniciar el registro TMR1 a 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 TMR1 para obtener las temporizaciones buscadas.
TMR1=216-Tretardo*(Fosc/(4*prescaler))-1 Donde TMR1 es el valor inicial a cargar en este registro para obtener la temporización buscada, 216 porque el timer1 PIC es de 16 bits, Tretardo es el tiempo que se quiere obtener con el temporizador, Fosc es la frecuencia del oscilador o del cristal utilizado, y prescaler será el prescaler elegido según la tabla anterior. Por ejemplo si se quiere temporizar 500ms, en este caso 500ms sería el tiempo de retardo, y si el microcontrolador PIC trabaja con un oscilador de 4Mhz, habrá que elegir entre los posibles prescaler que se tienen, reemplazar en la ecuación anterior y ver si el número obtenido esta entre 0 y 65535, de ser así la elección del prescaler es correcta, de lo contrario habrá que utilizar otro, por ejemplo si se elige un prescaler de 8 se tendría: TMR1=65535-(500ms)(1Mhz)/8 -1 TCNT1=3035 El valor obtenido está entre 0 y 65535 por lo que 3035 sería el valor inicial a cargar en el registro TMR1 para obtener una temporización de 500ms con el timer1 PIC, esto quiere decir que si se inicia el timer1 PIC con 3035 y un prescaler de 8, cuando aumente su valor de 3035 a 65535 habrán transcurrido 500ms. Los resultados obtenidos serán usados en el ejemplo de la utilización del timer0 pic como temporizador. Este proceso será el que se seguirá cuando se utilice el timer1 AVR como temporizador.
La programación del Timer1 PIC como temporizador se hace mediante el bit1 o el bit TMR1CS del registro T1CON.
Los bits 7 y 6 no se utilizan por lo que se les pone a 0. Los bits 5 y 4 son para elegir un prescaler, mediante las combinaciones de estos bits se pueden elegir los prescaler 1, 2, 4 u 8. El bit3 es para cuando se quiere conectar un oscilador independiente al timer1 PIC, este ocilador se debe colocar entre el pin T1OSO (pin 15) y el pin T1OSI (pin16) para esto hay que poner este bit a 1.
El bit2 es para hacer que el timer1 PIC cuando es programado como contador trabaje en forma sincronizada con el sistema interno del pic, en el modo temporizador no se toma en cuenta. Política y privacidad de Cookies
http://microcontroladores-mrelberni.com/timer1-pic/
5/8
13/11/2016
Timer1 PIC - MICROCONTROLADORES
El bit1 (TMR1CS), Al poner este bit a 0 se elige la opción de utilizar el timer1 PIC como temporizador, al ponerlo a 1 se elige la opción de utilizarlo como contador.
MICROCONTROLADORES
El bit 0 (TMR1ON) al poner este bit a 1 Programación se habilita el uso timer1 PIC, cuandoPIC, este AVR, bit está a 0 el timer1 PIC estará desactivado. dedel Microcontroladores ARDUINO
Timer1 PIC como temporizador ejemplo El circuito de ejemplo utilizado para ver el uso del timer1 PIC como temporizador es el siguiente, se hará cambiar el estado del pin RB7 cada 500ms, se utilizarán los resultados obtenidos cuando se comento sobre el prescaler del timer1 PIC, se obtuvo que para temporizar 500ms se utiliza el prescaler de 8 y el registro TMR0 se tiene que cargar en un inicio con 3035, esto es TMR0=3035. 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
Configuración del registro T1CON para el ejemplo Los bits 7 y 6 no se utilizan por lo que se les pone a 0, el prescaler será de 8 por lo que los bits5 y 4 se pondrán a 1, no se usará ningún oscilador externo por lo que el bit3 se pondrá a 0, el bit2 se pone a 0 porque en el modo temporizador no se toma en cuenta, el bit1 se pondrá a 0 porque se utilizará el timer1 PIC en modo temporizador y el bit0 se pondrá a 1 para habilitar el timer1 PIC. Luego el registro T1CON en el XC8 quedará así: T1CON=0b00110001;// timer1 pic como temporizador prescaler de 8 El programa realizado en el MPLAB XC8 para el uso del timer1 pic como temporizador es el siguiente:
Política y privacidad de Cookies
http://microcontroladores-mrelberni.com/timer1-pic/
6/8
13/11/2016 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
Timer1 PIC - MICROCONTROLADORES
///////////////////////////////////////////////// ///////////////////////////////////////////////// //////**microcontroladores‐mrelberni.com**/////// ///////** timer1 PIC como temporizador **//////// Programación /////////////////////////////////////////////////
MICROCONTROLADORES de Microcontroladores PIC, AVR, ARDUINO
//bits de configuración para el PIC16F877A #pragma config FOSC = XT // Oscillator Selection bits (XT oscillator) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = ON // Power‐up Timer Enable bit (PWRT enabled) #pragma config BOREN = ON // Brown‐out Reset Enable bit (BOR enabled) #pragma config LVP = OFF // Low‐Voltage (Single‐Supply) #pragma config CPD = OFF // Data EEPROM Memory Code Protection bit #pragma config WRT = OFF // Flash Program Memory Write Enable bits #pragma config CP = OFF // Flash Program Memory Code Protection bit #define _XTAL_FREQ 4000000 #include "xc.h" int
//cristal utilizado de 4Mhz
main( void) { TRISBbits.TRISB7= 0;//pinRB7 como salida digital, se colocará el led PORTBbits.RB7= 0;//El led se inicia apagado y parpadea cada 500ms T1CON=0b00110001 ;// timer1 pic como temporizador prescaler de 8 TMR1=3035;//se inicia a este valor para obtener 500ms while(1){//ciclo
de programa
if(TMR1==65535){//cuando
el timer1 PORTB^=(1<<7);//el led cambiará de TMR1=3036;//se carga nuevamente el } //para seguir obteniendo
llegue a este valor habrán pasado 500ms estado cada ms timer1 pic con este valor 500ms
} return
0;
}
El uso del timer1 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 timer1 PIC como contador y temporizador comparte este enlace para poder ayudar a muchas personas mas. Muchas Gracias. Atte: MrElberni.
Compartir:
0
0
0
0
Buscar
MAS DE ELECTRÓNICA AQUÍ http://microcontroladores-mrelberni.com/timer1-pic/
Política y privacidad de Cookies
7/8
13/11/2016
Timer1 PIC - MICROCONTROLADORES
mrelbernitutoriales.com
MICROCONTROLADORES Lista de Reproducción Microcontroladores PIC Programación de Microcontroladores PIC, AVR, ARDUINO Microcontroladores PIC 1...
Lista de Reproducción Microcontroladores AVR Microcontrolador AVR 1 ...
Google Maps
Datos de mapas ©2016 Google 50 km
Compartir 0
0
0
0
Política y privacidad de Cookies
http://microcontroladores-mrelberni.com/timer1-pic/
8/8