Está en la página 1de 6

05/06/13

Apuntes Informtica / Electrnica - Uso del TMR1 como temporizador

Inicio

Contactar

Foros

Actualidad / Noticias

Acerca de ..

Men Principal
Inicio Registrarse Enlaces Web Foros Actualidad / Noticias Por qu donar?

Inicio

ndice prcticas PIC C

Uso del TMR1 como temporizador

Recursos del PIC - Uso del TMR1 como Temporizador


Detalles
ltima actualizacin el Mircoles, 05 Septiembre 2012 18:01 Escrito por Biblioman

Continuamos con el curso de C con CCS, esta vez con la utilizacin de un nuevo recurso, que todava no habamos visto: el Timer1. El Timer1 es un temporizador/contador ascendente parecido al TMR0, pero con algunas peculiaridades que lo hacen muy interesante a la hora de incluir temporizaciones en nuestros programas. La primera de ellas, es que se trata de un contador de 16 bits cuyo valor se almacena en dos registros de 8 bits el TMR1H y el TMR1L, ambos registros se pueden leer y escribir su valor durante la ejecucin del programa. Cuando el Timer1 est habilitado, el valor de esos registros se incrementan desde 0000h a FFFFh y una vez que llega a su mximo valor empieza otra vez desde 0 avisndonos de ello por medio de la bandera TMR1F . Si est activa la interrupcin por desbordamiento del Timer 1 al desbordarse el contador, el programa entra en la funcin de tratamiento a la interrupcin por desbordamiento del Timer1. El diagrama de bloques es el siguiente:

Siguenos en ...

Algunas caractersticas de este Timer son las siguientes:

ltimos Tutoriales
ndice Programacin PIC en C ndice prcticas PIC C Secuencia de luces Decodificador Binario/Decimal Uso del TMR0 como temporizador Uso del TMR0 como contador Interrupcin externa por RB0 Control motor CC con la terminal Control motor CC con el Hyperterminal Interrupcin cambio de estado RB4-RB7 Comuicacin serie asncrona entre dos PICs con la

El Timer1 puede funcionar con un oscilador externo y trabajar a una frecuencia distinta a la del oscilador principal del PIC. Al igual que el TMR0 el Timer1 puede operar en dos modos: como temporizador y como contador. El modo de funcionamiento est determinado por el tipo de reloj seleccionado (interno ->temporizador, externo -->contador), lo configuramos por medio del bit TMR1CS del registro TICON. Cuando est en modo contador su valor se incrementa en cada flanco de subida de la seal de reloj externa. El tiempo que se tarda en incrementarse el contador se le suele llamar paso, el paso del contador depende de la frecuencia del oscilador y del prescaler seleccionado. La frmula para determinar los tiempos del Timer1 cuando es utilizado como temporizador (Reloj interno) es la siguiente:

El paso del contador vendr determinado por: Paso_Contador= 4/Frecuencia Oscilacin.Prescaler El Timer1 se puede habilitar o deshabilitar por medio del bit TMR1ON del registro T1CON. Un dibujo con los bits de configuracin del registro TICON, lo tenis en la figura de abajo:

www.aquihayapuntes.com/indice-practicas-pic-en-c/uso-del-tmr1-como-temporizador.html

1/6

05/06/13
USART Control teclado 4X4 con el MM74C922 Memoria EEPROM interna del PIC Comunicacin serie I2C entre PIC y EEPROM 24LC256A Uso del TMR1 como temporizador Controlador Domstico Kit de desarrollo PIC16F877A de CCS Controlador LCD Serie Comunicacin USB PIC18F4550 utilizando la clase CDC BootLoader USB Multiplataforma Comandar un PIC a travs de Internet Gobernar un Microcontrolador desde la BeagleBoard-Xm Empezando con las libreras grficas de Microchip Implementacin de una Mquina de Estados Finita en un PIC Conexin inalmbrica entre dos Microcontroladores C omunicacin USBPIC con HID Entrenadora para PIC. Fenix V2.0 Control de Mensajes SMS a travs de un PIC Comandar un PIC a travs de la voz Contador de 0 a 10 Bluetooth HC-05 Acceso a datos en tiempo real sin parar MCU Test GLCD (KS0108) Expansor de E/S PCF8574 Curso PIC32 SDCC (Small Device C Compiler) en Windows Actualizar a Ubuntu 9.10 (Karmic Koala) Programacin de Microcontroladores PIC en C con Ubuntu utilizando el ICD2

Apuntes Informtica / Electrnica - Uso del TMR1 como temporizador

Vamos a ver un ejemplo sencillo (como siempre) de como utilizar el Timer1 como temporizador usando el reloj interno del micro. El ejemplo consiste simplemente en hacer parpadear un led a un intervalo de 0.5 segundos, usando el Timer1 con la interrupcin por desbordamiento habilitada. Para ello tenemos como siempre dos opciones, escribir nosotros todo el cdigo o ayudarnos por medio del asistente que trae CCS. Cualquiera de las opciones es valida, ya que el cdigo es muy sencillo. El que utilice el asistente, deber configurar primeramente el micro a utilizar y la frecuencia de reloj. Yo voy ha utilizar el PIC16f877 y un cristal de 4MHz (el viejo amigo de batallas PIC16f84A no dispone de este recurso).

Despus en el apartado timers habr que configurar los parmetros para el Timer1, como vamos a trabajar con el Timer1 en modo Temporizador, en el tipo de reloj seleccionaremos Internal, despus seleccionaremos una resolucin entre las cuatro disponibles, segn se muestra en la figura de abajo.

www.aquihayapuntes.com/indice-practicas-pic-en-c/uso-del-tmr1-como-temporizador.html

2/6

05/06/13
Particiones y sistemas de archivos en Linux Algunas razones para probar Ubuntu Instalacin de Ubuntu 9.04 paso a paso Compilador PCW CCS Compiladores C para PIC Programacin PIC en C X - 10 Comandos Unix/Linux Autmatas Secuenciales Finitos CAD Electrnico Arduino y el controlador LCD serie

Apuntes Informtica / Electrnica - Uso del TMR1 como temporizador

Chat
30 may 13, 08:43

Manuel: estoy aprendoo!!


30 may 13, 08:42

La resolucin es el tiempo que tarda el contador en incrementar su valor, es decir, el paso del contador. Este valor, como hemos dicho ya, depende del Preescaler seleccionado y de la frecuencia del reloj principal. Por ejemplo, si seleccionamos la ltima opcin le estamos diciendo al asistente que queremos un preescaler de 8 y como hemos seleccionado una frecuencia de 4MHz para el reloj principal, el paso del contador ser igual a: 4/Frecuencia Oscilacin.Prescaler= 4/4MHz.8= 8u segundos. El asistente tambin nos muestra el Overflow, que como hemos dicho tambin, es el tiempo que tardar el contador en desbordarse. Suponiendo que carguemos el TMR1 con valor 0, que es como viene por defecto, si aplicamos la formula obtendremos el valor de 524ms (Desbordamiento_Timer1= 4/4MHz*8(65536-0)= 524 ms). Como en vez de 524 ms, queremos obtener 500 ms. Sustituimos ese valor en la frmula y despejamos el valor a cargar en el TMR1:

Manuel: esta chevere esta pagina


29 may 13, 01:36

jose : se puede sacar la seal pw m en el micro 16f877a que no sea por c2??
21 may 13, 19:21

Bibliom an: Hola Sc0rp10. Si es SPI hay un ejemplo en el foro.


21 may 13, 19:15

LM : Hola, alguien tiene algo de informacin sobre los amplificadores operacionales del pic16f690?

El valor de TMR1 que sale es de 3036 que en hexadecimal es: 0x0BDC Por ltimo solo nos queda decirle al asistente que queremos utilizar la interrupcin por desbordamiento del Timer 1, segn se muestra en la figura de abajo:

[The Dotifier] nombre mensaje

actualizar ok

ayuda emoticonos cbox

Licencia

Todo el contenido de este sitio est bajo una licencia de Creative Commons

El cdigo de nuestro ejemplo quedar de la siguiente forma: 0 1 . # i n c l u d e< 1 6 F 8 8 7 . h > / / P i cu t i l i z a d o 0 2 . / / P a l a b r ad ec o n f i g u r a c i nd el o sf u s i b l e s . 0 3 . # F U S E SN O W D T ,X T ,N O P U T ,N O M C L R ,N O P R O T E C T ,N O C P D ,N O B R O W N O U T ,N O I E S O ,N O F C M E N ,N O L V P ,

www.aquihayapuntes.com/indice-practicas-pic-en-c/uso-del-tmr1-como-temporizador.html

3/6

05/06/13
0 4 . 0 5 . 0 6 . 0 7 . 0 8 . 0 9 . 1 0 . 1 1 . 1 2 . 1 3 . 1 4 . 1 5 . 1 6 . 1 7 . 1 8 . 1 9 . 2 0 . 2 1 . 2 2 . 2 3 . 2 4 . 2 5 . 2 6 .

Apuntes Informtica / Electrnica - Uso del TMR1 como temporizador


N O D E B U G ,N O W R T ,B O R V 4 0 # u s ed e l a y ( c l o c k = 4 0 0 0 0 0 0 ) / / F r e c u e n c i ad e lr e l o jp r i n c i p a l # b i tR B 7 = 0 x 0 6 . 7/ / I d e n t i f i c a d o rp a r ae lb i tR B 7 # i n t _ T I M E R 1 v o i d T I M E R 1 _ i s r ( v o i d ) / / F u n c i nd ei n t e r r u p c i np o rd e s b o r d a m i e n t oT M R 1 { R B 7 = ~ R B 7 ;/ / T o g l eR B 7 s e t _ t i m e r 1 ( 0 x 0 B D C ) ; / / c a r g ad e lT M R 1 }

v o i dm a i n ( ) { s e t _ t r i s _ b ( 0 b 0 1 1 1 1 1 1 1 ) ;/ / c o n f i g u r aR B 7c o m os a l i d ae lr e s t oc o m oe n t r a d a R B 7 = 0 ; / / I n i c i a l i z oR B 7 s e t u p _ t i m e r _ 1 ( T 1 _ I N T E R N A L | T 1 _ D I V _ B Y _ 8 ) ; / / S e t u pt i m e r :R e l o ji n t e r n o ,p r e e s c a l e r =8 e n a b l e _ i n t e r r u p t s ( I N T _ T I M E R 1 ) ; / / H a b i l i t oi n t e r r u p c i np a r t i c u l a rd e lT I M E R 1 e n a b l e _ i n t e r r u p t s ( G L O B A L ) ; / / H a b i l i t oi n t e r r u p c i o n e sg l o b a l e s s e t _ t i m e r 1 ( 0 x 0 B D C ) ; / / C a r g ad e lT M R 1 w h i l e ( t r u e ) ; / / B u c l ei n f i n i t oh a s t ai n t e r r u p c i n }

Siempre hay que limpiar un poco el cdigo que nos genera el asistente, de parmetros y opciones que estn deshabilitadas y que no nos sirven para nada. El circuito a montar en Proteus, ser el siguiente:

En el que se ha incluido una grfica digital para medir el intervalo de tiempo de parpadeo del diodo LED. Si hacemos un zoom sobre la grfica y aadimos un segundo cursor (Ctrl+c), podemos ver que el intervalo es de 500 ms.

www.aquihayapuntes.com/indice-practicas-pic-en-c/uso-del-tmr1-como-temporizador.html

4/6

05/06/13

Apuntes Informtica / Electrnica - Uso del TMR1 como temporizador

Comentario del programa:


El programa de lo sencillo que es, est ms que explicado con los comentarios hechos en el cdigo fuente. Solo comentar las funciones que incluye CCS para el control del Timer1: set_timer1(value); //Funcin para inicializar los registros TMR1H y TMR1L. value=get_timer1; //Funcin para leer el valor del timer1 setup_timer_1 (parmetros); //configuracin del Timer1 por medio de parmetros. Los parmetros pueden ser: T1_DISABLED: deshabilita el Timer1, esto me permite un ahorro de energa en el PIC si no utilizo este recurso. T1_INTERNAL: fuente de reloj, el principal. Modo temporizador. T1_EXTERNAL: fuente de reloj externa. El timer funcionara como contador y como condicin para empezar el contaje debe de producirse un flanco de bajada en la seal de reloj, mira la figura de abajo:

Este pequeo detalle que parece poco importante, no lo es en el caso de que queramos contar de manera precisa los pulsos de entrada. T1_EXTERNAL_SYNC: con esto le digo al compilador que la seal de reloj externa se sincronice con la seal de reloj principal. Como se ve en el diagrama de bloques la sincronizacin se produce despus del preescaler, por lo que hasta despus del preescaler la seal sigue siendo asncrona. Hay que tener en cuenta que cuando tenemos definido este parmetro si el PIC entra en modo SLEEP el TIMER1 no se incrementar aunque este presente la seal de reloj externa. T1_CLK_OUT: con este parmetro pongo a 1 el bit T1OSCEN, para habilitar el oscilador del Timer1. Cuando tengo seleccionada la fuente de reloj externa y este parmetro a la vez, me permite independizar el timer1 del oscilador principal, por lo que el timer1 seguir contando aunque el PIC entre en modo SLEEP. La entrada de la seal de reloj ser por la patilla RC0/T1OSO/TICK1 del PIC. Cuando este parmetro no est definido T1OSCEN toma el valor por defecto que es 0, en este caso y siempre y cuando este definido el parmetro T1_EXTERNAL la entrada de la seal de reloj externa ser por RC1/TlOSI/CCP2. Este modo se utiliza para poder producir un reinicio del Timer1 a partir de cualquiera de los mdulos CCP1 o CCP2 del PIC. T1_DIV_BY_1, T1_DIV_BY_2, T1_DIV_BY_4, T1_DIV_BY_8: constantes para seleccionar el preescaler que queremos seleccionar.

Los parmetros seleccionados se colocan juntos separados por el smbolo |. Ejemplos: setup_timer_1 ( T1_DISABLED ); setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_4 ); setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_8 );

www.aquihayapuntes.com/indice-practicas-pic-en-c/uso-del-tmr1-como-temporizador.html

5/6

05/06/13

Apuntes Informtica / Electrnica - Uso del TMR1 como temporizador


Fuentes de informacin:

Data Sheet PIC16F87X Manual CCS compiler

En el prximo artculo (sobre CCS), veremos como utilizar el timer1 como contador, utilizando un reloj externo de 32.768Hz de frecuencia, y veremos si la precisin obtenida es suficiente para implementar un reloj en tiempo real (RTC) de Horas, minutos y segundos. Como siempre espero vuestros comentarios en el foro. El .DSN de Proteus lo tenis aqu Un Saludo y hasta pronto.

2007-2013 AquiHayapuntes.com

www.aquihayapuntes.com/indice-practicas-pic-en-c/uso-del-tmr1-como-temporizador.html

6/6

También podría gustarte