Saludos! Hace tiempo realice otro post en el blog, con el cual mostre un ejemplo basico para el control de una libreria para LCD16x2, hace un par de dias toco retomar la libreria e implementar una funcion que me permitiera crear caracteres personalizados.
Primero debo mencionar que modificado un poco la libreria que mostre aquel post. En esencia cambions pequeños en la escritura de datos (evitar algunas lineas de codigo repetidas) y otra muy notable es la inclusion del registro TRIS en la struct que se usa para inicializar la LCD (esto garantiza el uso de la libreria con MCU que tengan registros TRISD, TRISE y aun no esten definidos en la libreria).
Circuito:
El circuito usado es el siguiente, un PIC18F25K22 y la LCD16x2 conectada el puerto B, un botón de reset y sus debidas resistencias (si no se ocupa dicha función solo es necesario conectar una resistencia de 10K de MCLR a VCC), para este ejemplo estare usando la PIC18BT MCE Development Board v1.0:
Creacion de caracteres:
La memoria CGRAM posee solo 8 vectores disponibles para crear caracteres personalizados, la direccion de origen de estos vectores será el 0x40, desde ahà comenzara a crearse cada carácter de 8 bytes x 5 bits. Empecemos por ver la memoria ROM de una LCD (basada en el driver HD44780U), en el cual se muestra los vectores disponibles para cargar nuestros caracteres personalizados.
Para saber como formar el caracter de 8x5 tenemos el siguiente ejemplo (obtenido del datasheet):
Una vez que se tenga el caracter debemos cargarlo al LCD, el primer paso es saber en que vector lo guardaremos, las direcciones inician en el vector 0x40, como se puede ver en la siguiente imagen:
Bueno con esta teoria podemos mostrar el siguiente ejemplo para dibujar una sombrilla en la direccion 0x40 (claro esto considerando la libreria de LCD que aca mostrare):
Código:
Primer debo mencionar la funcion que se ha creado para cargar nuestro caracter en la CGRAM. Como se dijo antes lo primero es mandar la direccion del vector, para fines practicos "uint8_t location" puede tomar valores de 0 a 7 ( solo 8 caracteres validos). Despues basta con hacer algunas operaciones a bits para consegir las address finales que se mandara. Con respecto al envio de los bytes solo usamos un for.
void LCD_createChar(uint8_t location, const uint8_t charmap[]){// Direcction CGRAM, start 0x40LCD_Command (0x40 | ((location & 0x07) << 3));// Send 8 bytes, special caracterfor(uint8_t i = 0; i < 8; i++){LCD_putc(charmap[i]);}}
Con esto ya se tiene el caratcer en la CGRAM, para mostarlo en la LCD basta con usar "LCD_putc(0)" para msotar el caracter en la address 0x40. Se entiende podemos usar de 0 a 7 para acceder a todos los caracteres.
Sin mas el codigo de ejemplo es el siguiente:
Resultado:
Aquà una foto en el que se aprecia el caracter especial que se ha creado, ademas la forma en la que se lee este caracter tambien nos permite leer otros caracteres especiales con los que cuenta la ROM de la LCD.
Descargas:
Aquà el enlace directo para DESCARGAR los archivos disponibles, también puedes revisar o descargar la información desde mi repositorio en GitHub, si no sabes como descargarlo puedes checar aquÃ, bueno por el momento es todo si tienes dudas, comentarios, sugerencias, inquietudes, traumas, etc. dejarlas y tratare de responder lo mas pronto posible.
Donaciones:
Si te gusta el contenido o si los recursos te son de utilidad, comparte el enlace en tus redes sociales o sitios donde creas que puede ser de interés y la otra puedes ayudarme con una donación para seguir realizando publicaciones y mejorar el contenido del sitio. También puedes hacer donaciones en especie, ya sea con componentes, tarjetas de desarrollo o herramientas. Ponte en contacto para platicar, o puedes volverte uno de nuestros sponsors.
Pido una retroalimentación avisando cada que un enlace no sirva o tenga errores al momento de abrirlo, asà también si una imagen no se ve o no carga, para corregirlo en el menor tiempo posible.
Links:
- "HD44780U (LCD-II) Dot Matrix Liquid Crystal Display Controller/Driver", https://cdn.sparkfun.com/assets/9/5/f/7/b/HD44780.pdf
- MrChunckuee Electronics, "PIC18F25K22 & XC8: LibrerÃa para pantalla LCD 16x2 - Test basico", https://mrchunckuee.blogspot.com/2017/02/mplabx-y-xc8-005.html
0 Comentarios