TUTORIAL manejo LCD y conversion analogo digital

Curso de Microcontroladores [email protected] 1 TUTORIAL manejo LCD y conversion analogo digital OBJETIVOS: • • • Manejar displays de cristal l

17 downloads 118 Views 124KB Size

Recommend Stories


Reloj de pulso LCD parlante y digital
Cat. No. 63-5044 MANUAL DEL PROPIETARIO Favor de leer antes de usar este equipo. Reloj de pulso LCD parlante y digital CARACTERISTICAS Su reloj R

Stufe a Pellet CONSOLE LCD - LCD CONSOLE CONSOLE LCD - LCD-KONSOLE CONSOLA LCD - CONSOLA LCD
Stufe a Pellet CONSOLE LCD - LCD CONSOLE CONSOLE LCD - LCD-KONSOLE CONSOLA LCD - CONSOLA LCD ISTRUZIONI PER L'USO USER INSTRUCTIONS MODE D'EMPLOI GE

TUTORIAL SENCILLO MANEJO DE PSEINT Y FREE DFD
TUTORIAL SENCILLO MANEJO DE PSEINT Y FREE DFD Resumen El siguiente tutorial muestra de manera sencilla como manejar el PSEINT, para ello se toma un ej

Story Transcript

Curso de Microcontroladores [email protected]

1

TUTORIAL manejo LCD y conversion analogo digital OBJETIVOS: • • •

Manejar displays de cristal líquido para visualizar información alfanumérica. Comprender el funcionamiento del convertidor analógico digital de los microcontroladores PIC. Aplicar el manejo del LCD para el despliegue de datos.

EL DISPLAY DE CRISTAL LIQUIDO (LCD): Los LCD son dispositivos ampliamente usados para la visualización de datos e interfaz con el usuario, gracias a su buena presentación y facilidad de uso son generalmente preferidos a los displays de siete segmentos como elemento de visualización. Los LCD conseguidos comercialmente traen consigo un circuito integrado que se encarga de generar todas las señales que manipulan el cristal de modo que se visualice un carácter dado. En el microcontrolador es necesario implementar entonces una comunicación con el circuito integrado del LCD de modo que este último reciba los datos que deben ser visualizados. Comercialmente la mayoria (por no decir todos) los LCD son similares al Hitachi HD44780 el cual puede decirse constituye un estándar. La idea es utilizar el LCD para mostrar cadenas de caracteres tanto predefinidas como ingresadas por el usuario. Para ello se usarán rutinas de LCD que nos facilita el PICCLITE.

Conceptos teóricos: EL LCD: La interfase del microcontrolador con el LCD se realiza por medio de una comunicación paralela que puede ser de 8 o 4 bits, una línea que permite elegir si lo que se envía es un comando o una instrucción, una línea que indica si se va a leer o a escribir (generalmente esta línea indicara que se va a realizar una lectura)y una línea para habilitar la comunicación con el LCD. Para conocer más acerca del manejo del LCD se recomienda consultar la documentación existente por ejemplo en: http://www.x-robotics.com, a continuación nos centraremos en el manejo de estos usando el PICClite.

Curso de Microcontroladores [email protected]

1

Curso de Microcontroladores [email protected]

2

Descripción de las rutinas a utilizar en el PICCLITE: El picclite en la carpeta samples suministra una colección de ejemplos de utilización del compilador, entre esos ejemplos encontramos el ya utilizado delay.h y además encontramos el lcd.h. La librería lcd.h incluye varias funciones que permiten el manejo del LCD (inicializar, enviar un carácter, ir a una posición, enviar una cadena de caracteres, etc) la descripción de dichas funciones se encuentra al abrir el archivo lcd.h y el código ejecutado por estas se encuentra en el archivo lcd.c. Recuerde incluir dichos archivos en su proyecto para permitir la compilación. Estas rutinas están diseñadas para manejar el LCD en el modo de comunicación paralela por 4 pines. Las rutinas para manejo del LCD están hechas para trabajar en un puerto y con unos pines predeterminados. podremos utilizar las rutinas incluidas en esta librería, a continuación describimos cada una de estas: void lcd_init(void); Esta función inicializa el LCD, es necesario ejecutarla antes de realizar cualquier función con el LCD, preferiblemente en la configuración del microcontrolador. Dicha función automáticamente configura el LCD en el modo de transmisión a 4 bits. No devuelve ni entrega argumentos. void lcd_clear(void); Esta función limpia la pantalla LCD y lleva el punto de inserción al punto inicial (Home). Como puede verse no recibe ni entrega argumentos. void lcd_goto(unsigned char pos); Esta función lleva el punto de inserción del LCD al inicio de la pantalla (Home). No devuelve argumentos, recibe como un argumento la posición donde se desea colocar el punto de inserción. void lcd_putch(char c); Esta función sirve para escribir en la pantalla del LCD, recibe como parámetro una variable tipo char la cual contiene el código ASCII del carácter a ser mostrado y lo muestra en la posición actual del LCD. Esta función no devuelve argumentos. void lcd_puts(const char * s); Esta función coloca una string de caracteres (un vector de caracteres) en la pantalla del LCD comenzando en la posición actual. Como puede observarse en la definición recibe un vector de caracteres que debe estar definido como constante. Curso de Microcontroladores [email protected]

2

Curso de Microcontroladores [email protected]

3

void lcd_write(unsigned char c); Esta función es similar a lcd_putch() en el sentido de que también envía caracteres al LCD pero a diferencia de esta no coloca la línea RS en cero (es dato no comando) por lo tanto el dato enviado puede ser interpretado como comando o como dato por el LCD dependiente del estado anterior de esta línea. Esta función está pensada más bien para ser usada internamente por las rutinas anteriores o cuando se le desee enviar comandos al LCD.

Código ASCII: Para usar las anteriores rutinas los datos a enviar deben estar en código ASCII en una versión ligeramente modificada que utilizan los LCD, para enviar datos en ASCII necesitamos hacer la conversión en C. Se anexa una tabla ASCII convencional y una tabla ASCII utilizada por un LCD en particular. En dichas tablas podemos observar lo siguiente: Los números comienzan en el 48 decimal o 30 hexadecimal con el cero y continúan de manera consecutiva hasta el nueve. De aca podemos concluir dos cosas: • Para enviar un número al LCD debemos partirlo en sus dígitos constitutivos, es decir 356 debemos separarlo en 3 5 6 convertir dichos dígitos al código ASCII y enviarlos en el orden respectivo. • Convertir un número a su código en ASCII es fácil, con solo sumarle 0x30 o 48 (en decimal) obtendremos dicho código. Para obtener los códigos ASCII de una letra o un símbolo especial o incluso también de un número simplemente encerramos el carácter entre comilla simple ‘’, por ejemplo: LETRA=’A’; //La variable LETRA contiene el código ASCII de la A (65). NUMERO=’0’ //La variable NUMERO contiene el código ASCII del 0 (48). Para enviar una frase usamos las strings, una string es un vector de variables tipo char que contienen cada una el código de un carácter de la cadena, por ejemplo: unsigned char frase[11]; //Defino una variable vector de tipo char. frase = “Hola mundo”; El vector frase contendrá entonces en su primera posición el código ASCII de la H, en la segunda posición el código de la o y así sucesivamente, al final de la string el compilador agrega un código de finalización. Nótese que cuando usamos strings se usan doble comilla y cuando trabajamos con caracteres únicos usamos comilla sencilla. Curso de Microcontroladores [email protected]

3

Curso de Microcontroladores [email protected]

4

TABLA de caracteres ASCII

Tabla de caracteres de un LCD en particular:

Curso de Microcontroladores [email protected]

4

Curso de Microcontroladores [email protected]

5

CONVERSOR ANALOGO A DIGITAL EN EL PIC16F887: Las señales digitales solo pueden tomar dos valores, o tenemos un uno lógico o tenemos un cero lógico, a diferencia de estas las señales análogas pueden tomar infinitos valores diferentes. La conversión analógica a digital (A/D) es de vital importancia en los sistemas electrónicos ya que permite manipular con todas las facilidades de los sistemas digitales las variables del mundo real cuyo comportamiento es esencialmente análogo. Es por ello que las principales aplicaciones de este módulo están en el manejo de sensores. En esta práctica pretendemos aprender a manejar el conversor análogo digital, inicialmente convertiremos un voltaje variable (obtenido con un potenciómetro) e ilustraremos dicha conversión en el display de LCD, es decir, obtendremos un voltímetro digital. A partir de este montaje y realizando unas conversiones adicionales se podrán manejar variedad de sensores con salida analógica.

CONCEPTOS TEORICOS Conversores análogos digitales: Un convertidor análogo digital es un sistema que toma a su entrada un voltaje Vx y obtiene a su salida un valor de n bits el cual es fácilmente manipulable digitalmente. Dicho valor se relaciona proporcionalmente con el voltaje a la entrada Vx y con un voltaje conocido como el voltaje de referencia Vref. La cantidad de bits que maneje un conversor analógico digital influye en la resolución de este, entre mayor cantidad de bits se disponga se podrán detectar cambios más pequeños de voltaje, es decir se tendrá una mayor resolución. Sin embargo entre más bits más costoso es el convertidor. Para obtener aproximadamente el valor de voltaje Vx a partir del valor obtenido por el conversor procedemos a realizar una regla de tres, de esta forma: Supóngase que tenemos un conversor A/D de 10 bits, el máximo valor de salida del convertidor será de 1023, dicho valor de salida corresponde al máximo voltaje de entrada o voltaje de referencia. Con esto planteamos la siguiente regla de 3:

1023 Valor = Vref Vx

Donde valor es el valor entregado por el A/D, Vx es el voltaje leído a la entrada del conversor (el que deseamos hallar) y Vref el voltaje de referencia del convertidor. Así obtenemos un valor digital aproximadamente igual al valor del voltaje en ese momento en la entrada del convertidor.

EL CONVERTIDOR A/D DEL 16F887:

Curso de Microcontroladores [email protected]

5

Curso de Microcontroladores [email protected]

6

Los microcontroladores PIC16F887 traen incorporado un módulo de conversión A/D, dicho módulo posee 14 entradas y 10 bits de resolución, este módulo tiene la posibilidad de manejar voltajes de referencia tanto superiores como inferiores los cuales pueden ser Vdd, Vss o Ra2, RA3. Este módulo es manejado por 6 registros: ANSEL, ANSELH, ADRESH, ADRESL, ADCON0 y ADCON1. Los dos registros ADRESH y ADRESL guardarán el resultado de la conversión (10 bits) una vez esta sea realizada, los demas registros se usan para configurar el módulo. EN ESTE PUNTO RECOMIENDO MIRAR LA HOJA DE DATOS DEL PIC16F887, en la pagina 101 y dodo lo referente a configuracion y funcionamiento del conversor AD. A continuación se resume de manera ilustrativa los registros de configuración del módulo: REGISTRO ADCON1:

Bit7: ADFM: Este bit controla la justificación, 1 significa justificado a la derecha y 0 significa justificado a la izquierda. Justificación: El bit de justificación ADFM indica en que forma se presentará el resultado de la conversión en los registros ADRESL y ADRESH, recuérdese que el resultado de la conversión A/D consta de 10 bits y que cada registro contiene 8 bits por lo tanto de los 16 bits que poseen conjuntamente los dos registros seis quedarán vacíos. La distribución de dichos bits se muestra en la figura para cada valor de ADFM:

Bit6: no implementado Bits 5 y 4: sirve para seleccionar los voltajes de referencia para la conversion Los demas bits, no estan implementados.

Curso de Microcontroladores [email protected]

6

Curso de Microcontroladores [email protected]

7

REGISTRO ADCON0: Bits 7 y 6: ADCS1, ADCS0: Estos bits se usan para seleccionar el tipo de reloj a usarse para el convertidor A/D. La frecuencia de reloj seleccionada influye en el comportamiento del convertidor. Para seleccionar el reloj debe tenerse en cuenta la siguiente tabla, dar una frecuencia de reloj mayor a las recomendadas traería como consecuencia una conversión errónea:

Bits 5 al 2: Estos bits se usan para seleccionar el canal (pin) por el cual va a realizarse la conversión de los ocho que tiene la función de conversión A/D. Según la siguiente tabla:

Bit 1: Go/Done: Este bit se usa para iniciar la conversión A/D, al colocarlo en 1 se inicia la conversión y una vez esta se halla concluido regresará a su valor de 0. Bit 0: Adon: Bit de encendido del conversor A/D, si este bit está en 1 el A/D está encendido, si está en cero el A/D está apagado y no consume corriente.

Curso de Microcontroladores [email protected]

7

Curso de Microcontroladores [email protected]

8

Los Registros Ansel y AnselH, sirven para configurar determinados puertos del microcontrolador como entradas analogas, simplemente se ponen en 1, los demas se dejan en cero y funcionan como puertos digitales.

PASOS PARA REALIZAR UNA CONVERSIÓN A/D. 1. Configurar el módulo A/D. a. Configurar que pines quedan como entradas análogas y cuales como digitales (TRISX, ANSEL y ANSELH) b. Configurar el voltaje de referencia (ADCON1). c. Seleccionar en el ADCON0 por cual canal (pin) voy a realizar la conversión. d. Configurar el reloj del convertidor. e. Encender el módulo de conversión. 2. (OPCIONAL), Si se desea se configura la interrupción por fin de la conversión para ello se limpia el bit ADIF del PIR1 (Bandera de interrupción) y habilita el bit ADIE (Del registro PIE1). Recuerde que los bits de habilitación global de interrupciones (GIE) y habilitación de interrupciones de periféricos deben estar en 1. 3. Acá debe hacerse un retardo de aproximadamente 20us, esto con el fin de permitir la carga del condensador que permite la conversión. 4. Iniciar la conversión colocando en alto el bit GO/DONE. 5. Esperar la finalización de la conversión, puede hacerse de dos formas: a. Si las interrupciones están desactivadas: Hacemos polling (estar preguntando en un ciclo while) sobre el bit GO/DONE, es decir esperamos a que dicho bit sea un cero antes de realizar otra conversión. b. Si las interrupciones están activadas: La interrupción generada por la bandera ADIF nos indicará el fin de la conversión. 6. Leer el resultado de la conversión en la pareja de registros ADRESH y ADRESL, si se está trabajando por interrupciones recuérdese limpiar el bit ADIF. 7. Prepararse para otra conversión, esto significa regresar al paso uno (por ejemplo para cambiar el canal a ser convertido) o al tres si no se requiere cambiar nada. Nota importante: En el picclite el bit GO/DONE se ha renombrado como ADGO o GO o GODONE. CODIFICACIÓN: A continuación realizaremos un código que nos permite realizar una conversión A/D y mostrar su resultado en el LCD. El voltaje variable lo obtendremos con un potenciómetro conectado directamente a la entrada del convertidor, de este modo variaremos el voltaje a ser visualizado en la LCD. Nótese que en dicho código se han usado variables tipo unsigned int (de 0 a 32.0000aprox) para guardar el dato de la conversión a 10 bits (el cual se obtiene por desplazamiento y suma). También se ha usado una variable tipo unsigned long (de 0 a 16 millones) para guardar el dato de voltaje Curso de Microcontroladores [email protected]

8

Curso de Microcontroladores [email protected]

9

dado que durante su cálculo al realizar la multiplicación se obtienen valores muy grandes (del rango de 1millon) es de suma importancia saber el máximo valor obtenido en una variable para evitar desbordamientos seleccionando un tipo de variable apropiado. El módulo A/D tambien tiene la capacidad de producir una interrupción una vez se halla completado una conversión, para utilizar esta caracteristica se requiere manipular los registros de interrupción específicamente el INTCON, el PIE1 (Habilitadores de interrupción para los periféricos) y el PIR1 (Banderas de interrupción para los periféricos). #include #include #include "delay.h" #include "lcd.h" #include "delay.c" #include "lcd.c" const unsigned char frase[ ]="Voltaje in:"; unsigned char unidades, decimas, centesimas; unsigned long resultado; unsigned long voltaje; div_t division; void main (void) { TRISD=0b11110000;

//Puerto D configurado para manejo LCD.

TRISA=0b11110101; ADCON0=0b01000001;//Reloj de 8TOSC para el A/D, Selecciono canal AN0,//Activo el conversor. ADCON1=0b10000000; //Justificado a la derecha, solo RA0 es análogo ANSEL =0b00000001; //Selecciono canal AN0, ANSELH=0b00000000;

lcd_init(); //inicializo el LCD. lcd_puts(frase); //Mensaje de bienvenida. for(;;) {GODONE=1; //Inicio conversión. while(GODONE==1){}; //Espero fin de conversión resultado=((ADRESH

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.