apuntes informática _ electrónica - uso del tmr1 como temporizador

6
05/06/13 Apuntes Informática / Electrónica - Uso del TMR1 como temporizador www.aquihayapuntes.com/indice-practicas-pic-en-c/uso-del-tmr1-como-temporizador.html 1/6 Menú Principal Inic io Registrarse Enlaces Web Foros Actualidad / Noticias ¿Por qué donar? Siguenos en ... Últimos Tutoriales Índice Programación PIC en C Índice prácticas PIC C Secuencia de luces Decodificador Binario/Dec imal Uso del TMR0 como temporizador Uso del TMR0 como contador Interrupción externa por RB0 Control motor CC con la terminal Control motor CC con el Hyperterminal Interrupción cambio de estado RB4- RB7 Comuicación serie asíncrona entre dos PICs con la Inicio Índice prácticas PIC C Uso del TMR1 como temporizador Recursos del PIC - Uso del TMR1 como Temporizador Detalles Última actualización el Miércoles, 05 Septiembre 2012 18:01 Escrito por Biblioman Continuamos con el curso de C con CCS, esta vez con la utilización de un nuevo recurso, que todavía no habíamos 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 ejecución 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 máximo valor empieza otra vez desde 0 avisándonos de ello por medio de la bandera TMR1F . Si está activa la interrupción por desbordamiento del Timer 1 al desbordarse el contador, el programa entra en la función de tratamiento a la interrupción por desbordamiento del Timer1. El diagrama de bloques es el siguiente: Algunas características de este Timer son las siguientes: 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 señal 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 fórmula 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 Oscilación.Prescaler El Timer1 se puede habilitar o deshabilitar por medio del bit TMR1ON del registro T1CON. Un dibujo con los bits de configuración del registro TICON, lo tenéis en la figura de abajo: Inicio Contactar Foros Actualidad / Noticias Acerca de ..

Upload: alfredo-flores-vargas

Post on 30-Nov-2015

171 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Apuntes Informática _ Electrónica - Uso del TMR1 como temporizador

05/06/13 Apuntes Informática / Electrónica - Uso del TMR1 como temporizador

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

Menú Principal

Inicio

Registrarse

Enlaces Web

Foros

Actualidad / Noticias

¿Por qué donar?

Siguenos en ...

Últimos Tutoriales

Índice ProgramaciónPIC en C

Índice prácticas PICC

Secuencia de luces

DecodificadorBinario/Decimal

Uso del TMR0como temporizador

Uso del TMR0como contador

Interrupciónexterna por RB0

Control motor CCcon la terminal

Control motor CCcon elHyperterminal

Interrupcióncambio de estadoRB4-RB7

Comuicación serieasíncrona entredos PICs con la

Inicio Índice prácticas PIC C Uso del TMR1 como temporizador

Recursos del PIC - Uso del TMR1 como Temporizador

Detalles

Última actualización el Miércoles, 05 Septiembre2012 18:01Escrito por Biblioman

Continuamos con el curso de C con CCS, esta vez con la utilización de un nuevo recurso, que todavíano habíamos visto: el Timer1.

El Timer1 es un temporizador/contador ascendente parecido al TMR0, pero con algunas peculiaridadesque 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 registrosde 8 bits el TMR1H y el TMR1L, ambos registros se pueden leer y escribir su valor durante la ejecucióndel programa.

Cuando el Timer1 está habilitado, el valor de esos registros se incrementan desde 0000h a FFFFh y unavez que llega a su máximo valor empieza otra vez desde 0 avisándonos de ello por medio de la banderaTMR1F . Si está activa la interrupción por desbordamiento del Timer 1 al desbordarse el contador, el programaentra en la función de tratamiento a la interrupción por desbordamiento del Timer1.

El diagrama de bloques es el siguiente:

Algunas características de este Timer son las siguientes:

El Timer1 puede funcionar con un oscilador externo y trabajar a una frecuencia distinta a la deloscilador 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 registroTICON. Cuando está en modo contador su valor se incrementa en cada flanco de subida de laseñal de reloj externa.El tiempo que se tarda en incrementarse el contador se le suele llamar paso, el paso del contadordepende de la frecuencia del oscilador y del prescaler seleccionado.La fórmula para determinar los tiempos del Timer1 cuando es utilizado como temporizador (Relojinterno) es la siguiente:

El paso del contador vendrá determinado por:

Paso_Contador= 4/Frecuencia Oscilación.Prescaler

El Timer1 se puede habilitar o deshabilitar por medio del bit TMR1ON del registro T1CON.

Un dibujo con los bits de configuración del registro TICON, lo tenéis en la figura de abajo:

Inicio Contactar Foros Actualidad / Noticias Acerca de ..

Page 2: Apuntes Informática _ Electrónica - Uso del TMR1 como temporizador

05/06/13 Apuntes Informática / Electrónica - Uso del TMR1 como temporizador

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

USART

Control teclado4X4 con elMM74C922

Memoria EEPROMinterna del PIC

Comunicación serieI2C entre PIC yEEPROM 24LC256A

Uso del TMR1como temporizador

ControladorDoméstico

Kit de desarrolloPIC16F877A deCCS

Controlador LCDSerie

Comunicación USBPIC18F4550utilizando la claseCDC

BootLoader USBMultiplataforma

Comandar un PIC através de Internet

Gobernar unMicrocontroladordesde laBeagleBoard-Xm

Empezando con laslibrerías gráficas deMicrochip

Implementación deuna Máquina deEstados Finita enun PIC

Conexióninalámbrica entredosMicrocontroladores

Comunicación USB-PIC con HID

Entrenadora paraPIC. Fenix V2.0

Control deMensajes SMS através de un PIC

Comandar un PIC através de la voz

Contador de 0 a 10

Bluetooth HC-05

Acceso a datos entiempo real sinparar MCU

Test GLCD(KS0108)

Expansor de E/SPCF8574

Curso PIC32

SDCC (Small DeviceC Compiler) enWindows

Actualizar a Ubuntu9.10 (Karmic Koala)

Programación deMicrocontroladoresPIC en C con Ubuntuutilizando el ICD2

Vamos a ver un ejemplo sencillo (como siempre) de como utilizar el Timer1 como temporizador usando elreloj interno del micro. El ejemplo consiste simplemente en hacer parpadear un led a un intervalo de 0.5segundos, usando el Timer1 con la interrupción por desbordamiento habilitada.

Para ello tenemos como siempre dos opciones, escribir nosotros todo el código o ayudarnos por mediodel asistente que trae CCS. Cualquiera de las opciones es valida, ya que el código es muy sencillo.

El que utilice el asistente, deberá configurar primeramente el micro a utilizar y la frecuencia de reloj. Yovoy ha utilizar el PIC16f877 y un cristal de 4MHz (el viejo amigo de batallas PIC16f84A no dispone deeste recurso).

Después en el apartado timers habrá que configurar los parámetros para el Timer1, como vamos atrabajar con el Timer1 en modo Temporizador, en el tipo de reloj seleccionaremos Internal, despuésseleccionaremos una resolución entre las cuatro disponibles, según se muestra en la figura de abajo.

Page 3: Apuntes Informática _ Electrónica - Uso del TMR1 como temporizador

05/06/13 Apuntes Informática / Electrónica - Uso del TMR1 como temporizador

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

Particiones ysistemas de archivosen Linux

Algunas razones paraprobar Ubuntu

Instalación deUbuntu 9.04 paso apaso

Compilador PCW CCS

Compiladores C paraPIC

Programación PIC enC

X - 10

Comandos Unix/Linux

AutómatasSecuenciales Finitos

CAD Electrónico

Arduino y elcontrolador LCD serie

Chat

30 may 13, 08:43

Manuel: estoy

aprendoo!!

30 may 13, 08:42

Manuel: esta chevere

esta pagina

29 may 13, 01:36

jose: se puede sacar la

señal pw m en el micro

16f877a que no sea por

c2??

21 may 13, 19:21

Biblioman: Hola

Sc0rp10. Si es SPI hay un

ejemplo en el foro.

21 may 13, 19:15

LM: Hola, alguien tiene

algo de información sobre

los amplif icadores

operacionales del

pic16f690?

[The Dotif ier] actualizar

nombre

mensaje ok

ayuda · emoticonos · cbox

Licencia

Todo el contenido deeste sitio está bajo unalicencia de CreativeCommons

La resolución 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 delreloj principal. Por ejemplo, si seleccionamos la última opción le estamos diciendo al asistente quequeremos 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 Oscilación.Prescaler= 4/4MHz.8= 8u segundos.

El asistente también nos muestra el Overflow, que como hemos dicho también, es el tiempo que tardaráel contador en desbordarse. Suponiendo que carguemos el TMR1 con valor 0, que es como viene pordefecto, 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 fórmula y despejamos elvalor a cargar en el TMR1:

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 interrupción por desbordamientodel Timer 1, según se muestra en la figura de abajo:

El código de nuestro ejemplo quedará de la siguiente forma:

01.02.03.

#include <16F887.h>//Pic utilizado//Palabra de configuración de los fusibles.#FUSES NOWDT, XT, NOPUT, NOMCLR, NOPROTECT, NOCPD, NOBROWNOUT, NOIESO, NOFCMEN, NOLVP,

Page 4: Apuntes Informática _ Electrónica - Uso del TMR1 como temporizador

05/06/13 Apuntes Informática / Electrónica - Uso del TMR1 como temporizador

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

Siempre hay que limpiar un poco el código que nos genera el asistente, de parámetros y opciones queestán deshabilitadas y que no nos sirven para nada.

El circuito a montar en Proteus, será el siguiente:

En el que se ha incluido una gráfica digital para medir el intervalo de tiempo de parpadeo del diodo LED.

Si hacemos un zoom sobre la gráfica y añadimos un segundo cursor (Ctrl+c), podemos ver que elintervalo es de 500 ms.

04.05.06.07.08.09.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.

NODEBUG, NOWRT, BORV40#use delay(clock=4000000)//Frecuencia del reloj principal#bit RB7=0x06.7 //Identificador para el bit RB7 #int_TIMER1void TIMER1_isr(void)//Función de interrupción por desbordamiento TMR1 {RB7=~RB7; //Togle RB7set_timer1(0x0BDC);//carga del TMR1} void main(){set_tris_b(0b01111111); //configura RB7 como salida el resto como entradaRB7=0;//Inicializo RB7setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);//Setup timer: Reloj interno, preescaler= 8enable_interrupts(INT_TIMER1);//Habilito interrupción particular del TIMER1enable_interrupts(GLOBAL);//Habilito interrupciones globalesset_timer1(0x0BDC);//Carga del TMR1while(true);//Bucle infinito hasta interrupción }

Page 5: Apuntes Informática _ Electrónica - Uso del TMR1 como temporizador

05/06/13 Apuntes Informática / Electrónica - Uso del TMR1 como temporizador

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

Comentario del programa:

El programa de lo sencillo que es, está más que explicado con los comentarios hechos en el códigofuente. Solo comentar las funciones que incluye CCS para el control del Timer1:

set_timer1(value); //Función para inicializar los registros TMR1H y TMR1L.value=get_timer1; //Función para leer el valor del timer1setup_timer_1 (parámetros); //configuración del Timer1 por medio de parámetros. Losparámetros pueden ser:

T1_DISABLED: deshabilita el Timer1, esto me permite un ahorro de energía en el PIC si noutilizo este recurso.T1_INTERNAL: fuente de reloj, el principal. Modo temporizador.T1_EXTERNAL: fuente de reloj externa. El timer funcionara como contador y como condiciónpara empezar el contaje debe de producirse un flanco de bajada en la señal de reloj, mira lafigura de abajo:

Este pequeño detalle que parece poco importante, no lo es en el caso de que queramos contar demanera precisa los pulsos de entrada.

T1_EXTERNAL_SYNC: con esto le digo al compilador que la señal de reloj externa se sincronicecon la señal de reloj principal. Como se ve en el diagrama de bloques la sincronización se producedespués del preescaler, por lo que hasta después del preescaler la señal sigue siendo asíncrona.Hay que tener en cuenta que cuando tenemos definido este parámetro si el PIC entra en modoSLEEP el TIMER1 no se incrementará aunque este presente la señal de reloj externa.T1_CLK_OUT: con este parámetro pongo a 1 el bit T1OSCEN, para habilitar el oscilador del Timer1.Cuando tengo seleccionada la fuente de reloj externa y este parámetro a la vez, me permiteindependizar el timer1 del oscilador principal, por lo que el timer1 seguirá contando aunque el PICentre en modo SLEEP. La entrada de la señal de reloj será por la patilla RC0/T1OSO/TICK1 delPIC. Cuando este parámetro no está definido T1OSCEN toma el valor por defecto que es 0, eneste caso y siempre y cuando este definido el parámetro T1_EXTERNAL la entrada de la señal dereloj externa será por RC1/TlOSI/CCP2. Este modo se utiliza para poder producir un reinicio delTimer1 a partir de cualquiera de los módulos CCP1 o CCP2 del PIC.T1_DIV_BY_1, T1_DIV_BY_2, T1_DIV_BY_4, T1_DIV_BY_8: constantes para seleccionar elpreescaler que queremos seleccionar.

Los parámetros seleccionados se colocan juntos separados por el símbolo |.

Ejemplos:

setup_timer_1 ( T1_DISABLED ); setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_4 ); setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_8 );

Page 6: Apuntes Informática _ Electrónica - Uso del TMR1 como temporizador

05/06/13 Apuntes Informática / Electrónica - Uso del TMR1 como temporizador

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

© 2007-2013 AquiHayapuntes.com

Fuentes de información:

Data Sheet PIC16F87XManual CCS compiler

En el próximo artículo (sobre CCS), veremos como utilizar el timer1 como contador, utilizando un relojexterno de 32.768Hz de frecuencia, y veremos si la precisión obtenida es suficiente para implementar unreloj en tiempo real (RTC) de Horas, minutos y segundos.

Como siempre espero vuestros comentarios en el foro.

El .DSN de Proteus lo tenéis aquí

Un Saludo y hasta pronto.