Está en la página 1de 3

Uso de entrada analgica y manejo de display alfanumrico

En esta entrega ensear 2 cosas: 1. Leer un valor por alguna entrada analgica del PIC. 2. Manejo de un display alfanumrico con PIC.

Lectura de un valor analogico Esta caracterstica es muy importante a la hora de trabajar con sensores, debido a que estos entregan valores de tensin para reflejar la variable fsica que esta midiendo. En estas entradas se pueden sensar valores de 0 a 5 V y se pueden representar(segn el PIC) con diferentes resoluciones, como por ejemplo 256 valores, 1024(revisar datasheet). As si trabajamos con una resolucin de 256 tendremos para 0V una salida de 0 y para los 5V veremos el numero 255, lo mismo con otras resoluciones y valores intermedios. Para configurar las entradas analgicas debemos ir a Analog en el wizard y seleccionar que entradas ocuparemos para nuestros propsitos, por ejemplo yo configurare A0, A1 y A3. setup_adc_ports(AN0_AN1_AN3); Y al lado en Units una resolucion de 0-1023(1024 valores). Display alfanumerico Los displays son muy usados para permitir al usuario leer de una forma facil alguna variable, mensaje, dato, etc. Los hay en varios modelos y caracteristicas donde las principales son el numero de filas y columnas que tienen disponible para desplegar mensajes. Estos se expresan como una matriz donde por ejemplo si el display puede desplegar 16 caracteres en dos filas se dice que es un display alfanumerico de 16x2.

Configurarlo en CCS es muy fcil y para eso en el mismo wizard nos dirigimos aDrivers y seleccionamos LCD driver. Las conexiones las podemos ver en I/O Pinspero yo las expondr en los ejemplos descargables.

Ya con el cdigo hecho por el wizard nos queda leer el valor analgico y desplegarcaracteres en el display. Expondr el cdigo en el cual estn comentado todas las lineas importantes. ______________________________________________________ #include <16F873A.h> #device adc=10 //resolucion de 1024 valores #FUSES NOWDT #FUSES HS PCD) #FUSES NOPUT #FUSES NOPROTECT #FUSES NODEBUG #FUSES NOBROWNOUT #FUSES NOLVP used for I/O #FUSES NOCPD #FUSES NOWRT #FUSES RESERVED //No Watch Dog Timer //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for //No Power Up Timer //Code not protected from reading //No Debug mode for ICD //No brownout reset //No low voltage prgming, B3(PIC16) or B5(PIC18) //No EE protection //Program memory not write protected //Used to set the reserved FUSE bits

#use delay(clock=20000000) //oscilador externo de 20MHz #include <LCD.C> float a=0; //definimos la variable "a" void main() { setup_adc_ports(AN0_AN1_AN3); //especifica que canales son configurados como analogicos setup_adc(ADC_CLOCK_DIV_2); setup_spi(SPI_SS_DISABLED); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); lcd_init(); //se inicializa el display while(true){ set_adc_channel(0); //especifica de que canal se leera el valor analogico a=read_adc(); //se lee el valor analogico y se guarda digitalmente en la variable "a" printf(lcd_putc,"\f"); //limpiamos el display alfanumerico printf(lcd_putc,"Valor Digital"); //en la primera linea aparece el mensaje "Valor Digital" lcd_gotoxy(1,2); //saltamos al primer cuadro de la segunda linea del display printf(lcd_putc,"%f",a); //imprimimos el valor digital "a" en la segunda linea

delay_ms(100); //esperamos un tiempo de 100ms para esperar a la siguiente conversion } }

___________________________

También podría gustarte