- Controlador LCD de matriz de puntos 16x2 IC HD44780:
- Visualización de un carácter personalizado en una pantalla LCD de 16x2:
- Programación y explicación de trabajo:
- Conexiones y pruebas de circuitos:
En nuestro tutorial anterior, hemos aprendido Cómo conectar una pantalla LCD de 16 * 2 con un microcontrolador PIC. Le recomendamos que lo revise antes de continuar, si es principiante en el microcontrolador PIC. Anteriormente, también hemos aprendido los conceptos básicos de PIC utilizando el programa de parpadeo de LED y los temporizadores en el microcontrolador PIC. Puede consultar aquí todos los tutoriales sobre cómo aprender microcontroladores PIC utilizando el compilador MPLABX y XC8.
En este tutorial, hagámoslo más interesante creando nuestros propios personajes personalizados y mostrándolos en nuestra pantalla LCD utilizando el microcontrolador PIC PIC16F877A. También hay algunos caracteres personalizados predefinidos que se usan principalmente dados por el propio HD44780A IC, también veremos cómo podemos usarlos. Como se explicó en nuestro tutorial anterior, nuestra pantalla LCD tiene un controlador Hitachi HD44780 integrado que nos ayuda a mostrar caracteres. Cada carácter que mostramos ya está predefinido dentro de la ROM del HD44780 IC. Aprenderemos sobre el controlador LCD IC HD44780, antes de mostrar el carácter en la pantalla LCD.
Controlador LCD de matriz de puntos 16x2 IC HD44780:
Para mostrar un carácter personalizado, de alguna manera tenemos que decirle al IC cómo se verá el carácter personalizado. Para hacer eso, debemos conocer los tres tipos de memorias presentes dentro del controlador IC HD44780 LCD:
Character Generator ROM (CGROM): Es la memoria de solo lectura que, como se dijo anteriormente, contiene todos los patrones de los caracteres predefinidos en su interior. Esta ROM variará de cada tipo de interfaz IC, y algunos pueden tener algún carácter personalizado predefinido con ellos.
Display Data RAM (DDRAM): esta es una memoria de acceso aleatorio. Cada vez que mostramos un carácter, su patrón se obtendrá del CGROM y se transferirá a la DDRAM y luego se colocará en la pantalla. En pocas palabras, DDRAM tendrá los patrones de todos los caracteres que se muestran actualmente en la pantalla LCD. De esta manera, para cada ciclo, el IC no necesita obtener datos de CGROM y ayuda a obtener una frecuencia de actualización corta
RAM del generador de caracteres (CGRAM): Esta también es una memoria de acceso aleatorio, por lo que podemos escribir y leer datos de ella. Como su nombre lo indica, esta memoria será la que se pueda utilizar para generar el carácter personalizado. Tenemos que formar un patrón para el personaje y escribirlo en el CGRAM, este patrón se puede leer y mostrar en la Pantalla cuando sea necesario.
Ahora, ya que obtuvimos una comprensión básica de los tipos de memoria presentes en la interfaz IC HD44780. Echemos un vistazo a su hoja de datos para entender un poco más.
Como implica la hoja de datos, el HD44780 IC ha proporcionado 8 ubicaciones para almacenar nuestros patrones personalizados en CGRAM, también a la derecha podemos ver que hay algunos caracteres predefinidos que también se pueden mostrar en nuestra pantalla LCD. Veamos cómo podemos hacerlo.
Visualización de un carácter personalizado en una pantalla LCD de 16x2:
Para mostrar un carácter personalizado, primero debemos generar un patrón para él y luego guardarlo en el CGRAM. Dado que ya tenemos las funciones de la biblioteca, debería ser fácil hacer esto con algunos comandos simples. Aquí está la biblioteca para funciones LCD, pero aquí hemos copiado y pegado todas las funciones de la biblioteca en el programa mismo, por lo que no es necesario incluir este archivo de encabezado en nuestro programa. Consulte también este artículo para conocer el funcionamiento básico de la pantalla LCD y sus pines.
El primer paso es generar un patrón o el carácter personalizado. Como sabemos, cada carácter es una combinación de 5 * 8 puntos. Tenemos que seleccionar qué punto (píxel) debe ser alto y cuál debe permanecer bajo. Simplemente dibuja un cuadro como el siguiente y sombrea las regiones según tu personaje. Mi personaje aquí es un hombre de palo (espero que se vea como uno). Una vez sombreado, simplemente escriba el valor binario equivalente de cada byte como se muestra a continuación.
Simplemente coloque un '1' en la región sombreada y un '0' en la región no sombreada para cada byte, y ya está listo nuestro patrón personalizado. De manera similar, he creado 8 códigos de patrones personalizados para nuestros 8 espacios de memoria y lo presento el CGROM. Se enumeran en la tabla siguiente.
S.NO: |
Personaje personalizado |
Código de patrón |
1 |
0b01110, 0b01110, 0b00100, 0b01110, 0b10101, 0b00100, 0b01010, 0b01010 |
|
2 |
0b00000, 0b00000, 0b01010, 0b00100, 0b00100, 0b10001, 0b01110, 0b00000 |
|
3 |
0b00100, 0b01110, 0b11111, 0b11111, 0b01110, 0b01110, 0b01010, 0b01010 |
|
4 |
0b01110, 0b10001, 0b10001, 0b11111, 0b11011, 0b11011, 0b11111, 0b00000 |
|
5 |
0b01110, 0b10000, 0b10000, 0b11111, 0b11011, 0b11011, 0b11111, 0b00000 |
|
6 |
0b00000, 0b10001, 0b01010, 0b10001, 0b00100, 0b01110, 0b10001, 0b00000 |
|
7 |
0b00000, 0b00000, 0b01010, 0b10101, 0b10001, 0b01110, 0b00100, 0b00000 |
|
8 |
0b11111, 0b11111, 0b10101, 0b11011, 0b11011, 0b11111, 0b10001, 0b11111 |
Nota: No es obligatorio cargar los 8 espacios previstos en el CGRAM.
Programación y explicación de trabajo:
Ahora que nuestros códigos de patrón están listos, solo tenemos que cargarlos en el CGRAM de la pantalla LCD y mostrarlos usando el microcontrolador PIC. Para cargarlos en el CGRAM podemos formar una matriz de elementos de 5 * 8 y cargar cada byte usando un ' bucle for '. La matriz de código de patrón se muestra a continuación:
const unsigned short Custom_Char5x8 = {0b01110,0b01110,0b00100,0b01110,0b10101,0b00100,0b01010,0b01010, // Código para el espacio de memoria CGRAM 1 0b00000,0b00000,0b01010,0b00100,0b00100,0b10001,0b01110,0b00000, // Código para Espacio de memoria CGRAM 2 0b00100,0b01110,0b11111,0b11111,0b01110,0b01110,0b01010,0b01010, // Código del espacio de memoria CGRAM 3 0b01110,0b10001,0b10001,0b11111,0b11011,0b11011,0b11111,0b00000, // Código para memoria CGRAM space 4 0b01110,0b10000,0b10000,0b11111,0b11011,0b11011,0b11111,0b00000, // Código para espacio de memoria CGRAM 5 0b00000,0b10001,0b01010,0b10001,0b00100,0b01110,0b10001,0b00000, // Código para espacio de memoria CGRAM 6 0b00000,0b00000,0b01010,0b10101,0b10001,0b01110,0b00100,0b00000, // Código del espacio de memoria CGRAM 7 0b11111,0b11111,0b10101,0b11011,0b11011,0b11111,0b10001,0b11111 // Código del espacio de memoria CGRAM 8};
Cada espacio de memoria se carga con su patrón de caracteres respetado. Para cargar este patrón en el HD44780 IC, se debe consultar la hoja de datos del HD44780, pero son solo líneas de comando las que se pueden usar para configurar la dirección del CGRAM
// *** Cargar caracteres personalizados en el CGROM *** ////// Lcd_Cmd (0x04); // Establecer la dirección CGRAM Lcd_Cmd (0x00); //.. establecer la dirección CGRAM para (i = 0; i <= 63; i ++) Lcd_Print_Char (Custom_Char5x8); Lcd_Cmd (0); // Regresar a Inicio Lcd_Cmd (2); //.. volver a Inicio // *** Cargando caracteres personalizados completos *** //////
Aquí, dentro del ' bucle for', cada valor binario se carga en el CGROM. Una vez que se carga el patrón, los caracteres personalizados se pueden mostrar simplemente llamando a la ubicación del patrón usando la función void Lcd_Print_Char (datos de caracteres) como se muestra a continuación.
Lcd_Print_Char (0); // Mostrar carácter personalizado 0 Lcd_Print_Char (1); // Mostrar carácter personalizado 1 Lcd_Print_Char (2); // Mostrar el carácter personalizado 2 Lcd_Print_Char (3); // Mostrar el carácter personalizado 3 Lcd_Print_Char (4); // Mostrar el carácter personalizado 4 Lcd_Print_Char (5); // Mostrar el carácter personalizado 5 Lcd_Print_Char (6); // Mostrar el carácter personalizado 6 Lcd_Print_Char (7); // Mostrar carácter personalizado 7
Imprimir carácter especial predefinido:
El HD44780 IC tiene algunos caracteres especiales predefinidos almacenados en la DDROM. Estos caracteres pueden imprimirse directamente en la pantalla haciendo referencia a su valor binario en la hoja de datos.
Por ejemplo: el valor binario del carácter "ALPHA" es 0b11100000. La forma de obtener esto se puede entender en la siguiente figura, de la misma manera puede obtener valor para cualquier carácter especial que esté predefinido en el IC.
Una vez que se conoce el valor binario, el carácter correspondiente se puede imprimir en la pantalla simplemente usando la función void Lcd_Print_Char (datos de caracteres) como se muestra a continuación, Lcd_Print_Char (0b11100000); // valor binario de alfa de la hoja de datos
El código completo de este proyecto se proporciona a continuación en la sección Código, también verifique la explicación detallada del video al final de este tutorial.
Conexiones y pruebas de circuitos:
Este proyecto no tiene ningún requisito de hardware adicional, simplemente hemos utilizado las mismas conexiones del tutorial de interfaz LCD anterior y hemos utilizado la misma placa que hemos creado en el Tutorial de parpadeo de LED. Como siempre, simulemos el programa usando Proteus para verificar nuestra salida.
Una vez que tengamos la simulación funcionando como se esperaba, grabemos directamente el código en nuestra configuración de hardware. La salida del programa debería ser algo como esto:
Así es como puede mostrar cualquier carácter personalizado en una pantalla LCD de 16x2 utilizando el microcontrolador PIC con el compilador MPLABX y XC8. Consulte también nuestra serie completa de aprendizaje de microcontroladores PIC aquí.