PIC 16F876 EL TIMER 1 Manejo como contador asíncrono PROBLEMA P02 13/01/2009 CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 02 El Timer 1 como contador asíncrono Se desea realizar un contador de eventos externos , para ello por el pin RC0/T1CK1 introduciremos pulsos, deseándose ver en un lcd conectado al puerto B el número de impulsos recibidos. El programa se realizará en C. Para el control del LCD utilizaremos el fichero LCD.C que se encuentra en la carpeta drivers. 13/01/2009 CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 02 Creación del proyecto 1 fijamos el tipo de micro, frecuencia de funcionamiento etc. 13/01/2009 CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 02 Fijamos: modo contador asíncrono; prescaler del Timer_1 (1:1); timer_2 desactivado; etc. 13/01/2009 CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 02 Picamos en la pestaña analog y seleccionamos deshabilitado. 13/01/2009 CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 02 Picamos en la pestaña other y seleccionamos off. 13/01/2009 CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 02 Picamos en la pestaña de interrupciones, y en el cuadro de selección NO habilitamos la interrupción del timer1. 13/01/2009 CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 02 Picamos en la pestaña Drivers y seleccionamos LCD Driver. 13/01/2009 CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 02 El fichero.c que genera el propio compilador es: 13/01/2009 CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 02 El fichero.h que genera el compilador es: 13/01/2009 CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 02 Abrimos el fichero LCD.C que se encuentra en la carpeta DRIVERS y habilitamos la línea marcada quitando //: 13/01/2009 CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 02 Editamos el programa: 13/01/2009 CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 02 Simulación: Circuito antirrobotes 13/01/2009 CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 02 Simulación 13/01/2009 CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 02 Simulación: sacamos primera línea en el LCD 13/01/2009 CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 02 Simulación: primera lectura del TMR1 13/01/2009 CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 02 Simulación: primera lectura del TMR1 13/01/2009 CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 02 Simulación: Generamos el primer flanco de subida soltando el pulsador y vemos como se actualizan las variables y se presenta e el LCD 13/01/2009 CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 02 Simulación: hemos sustituido el circuito generador de pulsos por un generador TTL 13/01/2009 CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 02 La función PRINTF( ) En este ejercicio hemos utilizado la funciónes lcd_putc ( ) y PRINTF () para enviar datos al LCD 13/01/2009 CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 02 La función lcd_putc( ) está dentro del driver para el manejo del LCD y ya ha sido explicada, recordemos que admite los siguientes formatos: lcd_putc(“chart”); //saca por el LCD el texto entrecomillado lcd_putc(“\f”); //limpia el LCD lcd_putc(“\n”); //salta a la 1ª posición de la 2ª línea lcd_putc(“\b”); //limpia el LCD además en dicho driver tenemos la función: lcd_gotoxy(x,y);//posiciona el cursor en la línea x posición y 13/01/2009 CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 02 Por su parte el compilador CCS nos facilita una función más versátil que es PRINTF(); si la seleccionamos en el help del compilador obtenemos: 13/01/2009 CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 02 Haciendo doble click sobre PRINTF ( ) obtenemos la correspondiente ayuda: 13/01/2009 Ó FPRINTF( ) CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 02 Donde: String es una cadena o array de caracteres, values es una lista de variables separadas pr comas, y fname es una función. En nuestro caso utilizaremos la forma: printf( fname, cstring,values); El formato es %nt; donde n es opcional y puede ser: 1 a 9: para indicar cuantos caracteres se deben sacar; si se precede del carácter 0, indicará que se debe completar el número con ceros a la izquierda. 13/01/2009 CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 02 Ejemplo: printf(Lcd_putc,"%05Lu",numero_eventos); aquí se indica que debe presentarse el valor de la variable numero_eventos con 5 dígitos y rellenado a la izquierda con ceros. Así si la variable numero_eventos es 3 se presentaría en el lcd como sigue: 13/01/2009 CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 02 Si ahora su valor fuese 27, la representación sería: Por su parte t indicará el tipo de variable que tenemos y de acuerdo con la siguiente tabla: 13/01/2009 CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 02 S Carácter S Cadena o carácter u Entero sin signo d Entero con signo Lu Entero largo sin signo Ld Entero largo con signo x Entero hexadecimal en minúsculas X Enetero hexadecimal en mayúsculas Lx Entero largo hexadecimal en minúsculas LX Entero largo hexadecimal en mayúsculas f Flotante con truncado G Flotante con redondeo e Flotante en forma exponencial w Entero sin signo con decimales insertados, la primera cifra indica el total, la 2ª El número de decimales 13/01/2009 CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 02 EJEMPLOS FORMATO VALOR = 0X12 VALOR 0XFE Comentarios %03u 018 254 Entero sin signo 3 digitos y complementa con 0 %u 18 254 Entero sin signo %2u 18 * * Error este número necesita 3 dígitos %5 18 254 %d 18 -2 Entero con signo %x 12 fe Hexadecimal en minúsculas %X 12 FE Hexadecimal en mayúsculas %4X 0012 00FE Hexadecimal 4 dígitos en mayuúsculas %3.1w 1.8 24.5 Número de dígitos 3, número de decimales 1 13/01/2009 CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 02