MICROCONTROLADORES
Laboratorio Nº 11
(Programación de una pantalla LCD)
1. CAPACIDAD TERMINAL:
- Utilizar al microcontrolador en aplicaciones de control electrónico.
- Desarrollar y ejecutar programas en un microcontrolador PIC
- Programar y configurar interfaces básicas del microcontrolador.
2. COMPETENCIA ESPECÍFICA DE LA SESIÓN:
- Conocer el Display LCD y su funcionamiento
- Programar eficientemente el LCD
- Programar HMI para proyecto actual.
3. CONTENIDOS A TRATAR:
- Display LCD
- Manejo de teclado matricial
4. RESULTADOS:
- Diseñan y optimizan sistemas y procesos para cumplir con las condiciones establecidas y gestionando adecuadamente los recursos materiales y humanos.
5. MATERIALES Y EQUIPO
- CCS Compiler instalado.
- Entrenador de PICS
- PIC16F877A
- Guía de Laboratorio. El trabajo se desarrolla de manera GRUPAL.
- PC con Software de simulación.
6. FUNDAMENTO TEÓRICO
-
Pantallas LCD de 16x2
¿Que es un LCD?
El LCD(Liquid Crystal Dysplay) o pantalla de cristal líquido es un dispositivo empleado para la visualización de contenidos o información de una forma gráfica, mediante caracteres, símbolos o pequeños dibujos dependiendo del modelo. Está gobernado por un microcontrolador el cual dirige todo su funcionamiento.
En este caso vamos a emplear un LCD de 16x2, esto quiere decir que dispone de 2 filas de 16 caracteres cada una. Los píxeles de cada símbolo o carácter, varían en función de cada modelo.
¿Como es su conexionado?
En la siguiente imagen de Proteus se puede observar la estructura de sus pines.
Lo podemos dividir en los Pines de alimentación, pines de control y los pines del bus de datos bidireccional. Por lo general podemos encontrar ademas en su estructura los pines de Anodo de led backlight y cátodo de led backlight.
Pines de alimentación:
Vss: Gnd
Vdd: +5 voltios
Vee: corresponde al pin de contraste, lo regularemos con un potenciómetro de 10K conectado a Vdd.
Pines de control:
RS: Corresponde al pin de selección de registro de control de datos (0) o registro de datos(1). Es decir el pin RS funciona paralelamente a los pines del bus de datos. Cuando RS es 0 el dato presente en el bus pertenece a un registro de control/instrucción. y cuando RS es 1 el dato presente en el bus de datos pertenece a un registro de datos o un carácter.
RW: Corresponde al pin de Escritura(0) o de Lectura(1). Nos permite escribir un dato en la pantalla o leer un dato desde la pantalla.
E: Corresponde al pin Enable o de habilitación. Si E(0) esto quiere decir que el LCD no esta activado para recibir datos, pero si E(1) se encuentra activo y podemos escribir o leer desde el LCD.
Pines de Bus de datos:
El Bus de datos bidireccional comprende desde los pines D0 a D7. Para realizar la comunicación con el LCD podemos hacerlo utilizando los 8 bits del bus de datos(D0 a D7) o empleando los 4 bits mas significativos del bus de datos(D4 a D7). En este caso vamos a explicar la comunicación con el bus de 4 bits.
¿DDRAM y CGROM?
Son las dos zonas de memoria del LCD.
La memoria DDRAM(Data Display Ram): corresponde a una zona de memoria donde se almacenan los caracteres que se van a representar en pantalla. Es decir es la memoria donde se almacenan los caracteres a mostrar con su correspondiente posición.
La memoria CGROM es una memoria interna donde se almacena una tabla con los caracteres que podemos visualizar en el lcd. En la imagen podemos ver un ejemplo de la tabla con un contenido de 192 caracteres.
La memoria CGRAM(Character Generator Ram): en ella se pueden almacenar nuestros propios caracteres.
La librería del LCD:
Para poder visualizar los caracteres o símbolos en el LCD es necesario que en el programa de código fuente a emplear, incluyamos la librería de este.
En este caso empleamos la librería "lcd.c", la cual hemos modificado. Siempre que utilicemos una librería de este tipo tendremos que analizarla para saber cuales son los pines de control y los pines para el Bus de datos, en este caso podemos observar que están definidos al comienzo de la misma.
#define LCD_ENABLE_PIN PIN_D0
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
En el resto de la librería se puede encontrar todas las estructuras necesarias así como las funciones que nos permiten utilizar nuestro LCD.
Podemos encontrar funciones como :
lcd_init: inicializa el lcd.
lcd_gotoxy: establece la posicion de escritura en el lcd.
lcd_putc: nos muestra un dato en la siguiente posición del lcd, podemos emplear funciones como \f para limpiar el display, \n cambio a la segunda línea, \b mueve una posición atrás.
lcd_getc(x,y): devuelve caracteres a la posición x,y.
Otras funciones: lcd_send_nibble(BYTE n), lcd_send_byte(BYTE address, BYTE n).
1. CAPACIDAD TERMINAL:
- Utilizar al microcontrolador en aplicaciones de control electrónico.
- Desarrollar y ejecutar programas en un microcontrolador PIC
- Programar y configurar interfaces básicas del microcontrolador.
2. COMPETENCIA ESPECÍFICA DE LA SESIÓN:
- Conocer el Display LCD y su funcionamiento
- Programar eficientemente el LCD
- Programar HMI para proyecto actual.
3. CONTENIDOS A TRATAR:
- Display LCD
- Manejo de teclado matricial
4. RESULTADOS:
- Diseñan y optimizan sistemas y procesos para cumplir con las condiciones establecidas y gestionando adecuadamente los recursos materiales y humanos.
- CCS Compiler instalado.
- Entrenador de PICS
- PIC16F877A
- Guía de Laboratorio. El trabajo se desarrolla de manera GRUPAL.
- PC con Software de simulación.
6. FUNDAMENTO TEÓRICO
- Pantallas LCD de 16x2
¿Que es un LCD?
El LCD(Liquid Crystal Dysplay) o pantalla de cristal líquido es un dispositivo empleado para la visualización de contenidos o información de una forma gráfica, mediante caracteres, símbolos o pequeños dibujos dependiendo del modelo. Está gobernado por un microcontrolador el cual dirige todo su funcionamiento.
En este caso vamos a emplear un LCD de 16x2, esto quiere decir que dispone de 2 filas de 16 caracteres cada una. Los píxeles de cada símbolo o carácter, varían en función de cada modelo.
¿Como es su conexionado?
En la siguiente imagen de Proteus se puede observar la estructura de sus pines.
Lo podemos dividir en los Pines de alimentación, pines de control y los pines del bus de datos bidireccional. Por lo general podemos encontrar ademas en su estructura los pines de Anodo de led backlight y cátodo de led backlight.
Pines de alimentación:
Vss: Gnd
Vdd: +5 voltios
Vee: corresponde al pin de contraste, lo regularemos con un potenciómetro de 10K conectado a Vdd.
Pines de control:
RS: Corresponde al pin de selección de registro de control de datos (0) o registro de datos(1). Es decir el pin RS funciona paralelamente a los pines del bus de datos. Cuando RS es 0 el dato presente en el bus pertenece a un registro de control/instrucción. y cuando RS es 1 el dato presente en el bus de datos pertenece a un registro de datos o un carácter.
RW: Corresponde al pin de Escritura(0) o de Lectura(1). Nos permite escribir un dato en la pantalla o leer un dato desde la pantalla.
E: Corresponde al pin Enable o de habilitación. Si E(0) esto quiere decir que el LCD no esta activado para recibir datos, pero si E(1) se encuentra activo y podemos escribir o leer desde el LCD.
Pines de Bus de datos:
El Bus de datos bidireccional comprende desde los pines D0 a D7. Para realizar la comunicación con el LCD podemos hacerlo utilizando los 8 bits del bus de datos(D0 a D7) o empleando los 4 bits mas significativos del bus de datos(D4 a D7). En este caso vamos a explicar la comunicación con el bus de 4 bits.
¿DDRAM y CGROM?
Son las dos zonas de memoria del LCD.
La memoria DDRAM(Data Display Ram): corresponde a una zona de memoria donde se almacenan los caracteres que se van a representar en pantalla. Es decir es la memoria donde se almacenan los caracteres a mostrar con su correspondiente posición.
La memoria CGROM es una memoria interna donde se almacena una tabla con los caracteres que podemos visualizar en el lcd. En la imagen podemos ver un ejemplo de la tabla con un contenido de 192 caracteres.

La memoria CGRAM(Character Generator Ram): en ella se pueden almacenar nuestros propios caracteres.
La librería del LCD:
Para poder visualizar los caracteres o símbolos en el LCD es necesario que en el programa de código fuente a emplear, incluyamos la librería de este.
En este caso empleamos la librería "lcd.c", la cual hemos modificado. Siempre que utilicemos una librería de este tipo tendremos que analizarla para saber cuales son los pines de control y los pines para el Bus de datos, en este caso podemos observar que están definidos al comienzo de la misma.
#define LCD_ENABLE_PIN PIN_D0
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
En el resto de la librería se puede encontrar todas las estructuras necesarias así como las funciones que nos permiten utilizar nuestro LCD.
Podemos encontrar funciones como :
lcd_init: inicializa el lcd.
lcd_gotoxy: establece la posicion de escritura en el lcd.
lcd_putc: nos muestra un dato en la siguiente posición del lcd, podemos emplear funciones como \f para limpiar el display, \n cambio a la segunda línea, \b mueve una posición atrás.
lcd_getc(x,y): devuelve caracteres a la posición x,y.
Otras funciones: lcd_send_nibble(BYTE n), lcd_send_byte(BYTE address, BYTE n).
7. TAREAS GUIADAS DENTRO DEL LABORATORIO:
- Transcriba el programa mostrado, compile dicho programa, simule en Proteus y compruebe funcionamiento en Tarjeta Entrenadora.
8. TAREAS A SER EVALUADAS:
En base al programa anterior, realice un PROGRAMA con los siguientes REQUERIMIENTOS:
Investigue y responda lo siguiente:
¿Cómo hacer para mostrar números negativos?
Al momento de designar el entero de 16 bits del dato le añadimos la extensión (SIGNED) al entero que deseamos inprimir en el LCD, por lo tanto la linea será:
signed int16 dato;
¿cómo hacer para mostrar números con decimales?.
Para mostrar estos se requiere colocar al entero una extensión FLOAT, y para ajustar el numero de decimales que queremos imprimir le camibiamos el valor del entero a un valor con decimal, por ejemplo : (1.2) si queremos dos decimales y un entero.
printf (lcd_putc, "Valor: %1.2lu", dato) ;
9. Video explicativo:
10. OBSERVACIONES Y CONCLUSIONES:
- OBSERVACIONES:
- Se observó que es importante declarar la librería correspondiente del LCD para poder realizar su programación.
- Se observó que es necesario declarar los pines del LCD para realizar la programación de cada uno de los datos almacenados en cada pin.
- Se utilizó un VOID BIP, para realizar el sonido de alarma al momento de que el dato llegaba a su valor máximo y su valor mínimo.
- Para realizar un bucle infinito no se utilizó el bucle for, pues este tiene un tope determinado, se utilizó un bucle while, pues a una determinada condición es mas fácil trabajar con él.
- CONCLUSIONES:
- Se reconoció la pantalla LCD, su estructura y su funcionamiento.
- Se reconocieron funciones de bucles (for y while) para realizar un determinado paso por un determinado tiempo o si se desea por un bucle infinito de repeticiones.
- Se identificaron pines de programación correspondientes al LCD para poder enviar el dato a una determinada fila y una determinada columna.
- Se programaron y configuraron interfaces básicas del microcontrolador.
7. TAREAS GUIADAS DENTRO DEL LABORATORIO:
- Transcriba el programa mostrado, compile dicho programa, simule en Proteus y compruebe funcionamiento en Tarjeta Entrenadora.
8. TAREAS A SER EVALUADAS:
En base al programa anterior, realice un PROGRAMA con los siguientes REQUERIMIENTOS:
Investigue y responda lo siguiente:
¿Cómo hacer para mostrar números negativos?
Al momento de designar el entero de 16 bits del dato le añadimos la extensión (SIGNED) al entero que deseamos inprimir en el LCD, por lo tanto la linea será:
signed int16 dato;
¿cómo hacer para mostrar números con decimales?.
Para mostrar estos se requiere colocar al entero una extensión FLOAT, y para ajustar el numero de decimales que queremos imprimir le camibiamos el valor del entero a un valor con decimal, por ejemplo : (1.2) si queremos dos decimales y un entero.
printf (lcd_putc, "Valor: %1.2lu", dato) ;
9. Video explicativo:
10. OBSERVACIONES Y CONCLUSIONES:
- OBSERVACIONES:
- Se observó que es importante declarar la librería correspondiente del LCD para poder realizar su programación.
- Se observó que es necesario declarar los pines del LCD para realizar la programación de cada uno de los datos almacenados en cada pin.
- Se utilizó un VOID BIP, para realizar el sonido de alarma al momento de que el dato llegaba a su valor máximo y su valor mínimo.
- Para realizar un bucle infinito no se utilizó el bucle for, pues este tiene un tope determinado, se utilizó un bucle while, pues a una determinada condición es mas fácil trabajar con él.
- CONCLUSIONES:
- Se reconoció la pantalla LCD, su estructura y su funcionamiento.
- Se reconocieron funciones de bucles (for y while) para realizar un determinado paso por un determinado tiempo o si se desea por un bucle infinito de repeticiones.
- Se identificaron pines de programación correspondientes al LCD para poder enviar el dato a una determinada fila y una determinada columna.
- Se programaron y configuraron interfaces básicas del microcontrolador.

No hay comentarios:
Publicar un comentario