top of page

MPLAB X 8 LCD 16x2

Actualizado: 8 mar 2022

Hooola!


Los displays son una de las formas con las que tus maquinas o dispositivos se pueden comunicar con los humanos, a diferencia de solo poner leds, los displays nos pueden dar mayor información, como el valor de una variable, o mostrar menus, etc. Es por eso que en la incustria se utilizan mucho. El que no haya visto uno de estos en su vida, posiblemente es porque haya estado viviendo debajo de una piedra


Es por eso que hoy le enseñare a como programar uno de estos con la Xpress board, Comencemos!!!


Lo primero que tenemos que hacer es crear un proyecto nuevo en MPLABX, abrimos el MCC y no modificamos nada, solo le damos generar para que se nos creen las carpetas básicas necesarias, el core que estoy utilizando es el 5.0.1, que es el ultimo que se ve asi como lo muestra la siguiente imagen


Ahora van a descomprimir los 2 archivos el .C y el .H, que están el .rar y los van a pegar en la carpeta donde esta guardado su proyecto


Ahora daremos clic derecho en la carpeta Header Files del proyecto, y le daremos en Add Existing Item

Luego seleccionaremos el lcd.h y select

Realizaremos el mismo procedimiento pero ahora en la carpeta Source Files, y ya tendremos que ver cargados nuestros 2 archivos


Ahora viene una pequeña clase de como es que funciona el driver que traer el LCD, para que así puedan entender que hacen los archivos .C y .H


Así esta mas o menos la arquitectura del driver

cuenta con una memoria DDRAM con las siguientes direcciones de memoria

y es casi seguro que los primeros caracteres ya estén estandarizados en ROM

como buen driver, este funciona con un set de instrucciones


Ahora si, volviendo al .C, tendremos estas funciones principales, y una pequeña descripción de que hace cada una


Lo primero que debemos de agregar el el Main.c es el include "lcd.h" para que nos cargue los headers, y después de que el sistema se inicialicé agregar el inicializador del lcd (lcd_init)


Si le damos a la tecla ctrl+clic en el nombre de la funcion lcd_init, nos mandara a donde esta localizada esta, en este caso en lcd.c. veamos que es lo que hace dentro esta función

Para entender un poco mejor la rutina de power on pueden checar esta pagina

http://web.alfredstate.edu/faculty/weimandn/lcd/lcd_initialization/lcd_initialization_index.html

Con la función lcd_comand le mandamos al driver del lcd una instrucción, no un carácter imprimible

Ahora tenemos que mandarle que este en alto los bits DB5 y DB4 y esperar mas de 4.1ms, nuevamente enviaremos que los bits DB5 y DB4 estén en alto y ahora tenemos que esperar mas de 100ms y por ultimo lo haremos una tercera ves y esperaremos mas de 100ms

El siguiente paso es configurar nuestro Function Set que esta en nuestra tablita de instrucciones, donde en este caso el configurarlo como FOUR_BIT y LINES_5X7 quiere decir que estaremos utilizando solo 4 bits para enviar la información y que nuestro display por carácter es de 5x7

en el paso 6 es apagarlo, quitar el cursor así como el parpadeo

paso 7 es un clear

paso 8 es configurar el entry mode set, que si como es que quieres que se coloquen los datos despues de haber colocado un dato, si incremento o decremento

en el paso 9 ya se termino el inicializado

paso 10, como habiamos dejado apagado el display, ahora lo tenemos que prender, decidir que si queremos el cursor y si este va a parpadear

Ya se que parece largo, pero solo hemos terminado de ver que hace la función init, ya se que es tedioso y un poco confuso, pero es muy necesario para entender que hacen las librerías y si es que quieres hacer algún cambio, hablando de cambios, si en su proyecto necesitan cambiar la localización de algún pin o de donde se van enviar los datos, nos metemos al lcd.h y ahí podremos hacer el cambio de pines que sea necesarios para nuestro proyecto


Ahora para enviar carateres o texto, tenderemos que utilizar la funcion lcd_print(), podemos enviar nuestro mensajes al LCD

lo que hace la funcion print, lo que hace es iterar entre los valores de la cadena de texto, como parametro se le pasa un puntero de 8bits, en este caso data y luego transmite el string a la cadena de texto

mientras tenga un valor sobre la dirección de memoria, con el while iremos imprimiendo la cadena de texto

lcd_putc hace que se ponga en modo dato imprimible y de igual manera, se partan los datos y se envíen

lcd_home() nos manda a la primera linea del display

la funcion lcd_goto(), lo que hace es que moverte a la dirección de memoria que puede mostrar el display, primero se crea una variable local, de tipo char y nombre position, después se pregunta el valor de y, si es 1, solo se suma el valor de x + 0x80, que según la tabla de instrucciones, el primer 1 es para posicionar la direccion de la DDRAM

después si es 2, se le tienen que sumar 0x40 mas el 1 del inicio y nuestro valor de x


Finalmente después de explicar tantas cosas, podremos tener un código relativamente sencillo

Dado que un string no es lo mismo que una variable, si queremos imprimir el valor de una variable la tenderemos que convertir al tipo string, y esto lo haremos con la función sprintf(), la cual esta en la librería <stdio.h> no se olviden de agregarla en la parte superior de su código, en los comentarios del código viene explicado para que sirve cada parámetro

y por ultimo haremos que nuestra variable se mueva de izquierda a derecha en nuestro display lcd


Para montarlo físicamente este seria el diagrama de conexiones. Para el potenciómetro de contraste, les recomiendo utilizar un pot o preset de unos 5k o 10k o si va a ser una resistencia fija, que este conectada a tierra; y para la resistencia de nuestro led de luz de fondo, les recomiendo que hagan los cálculos para saber que resistencia van a necesitar

SI necesitan cambiar algún pin del micro, esto lo pueden hacer en la librería lcd.h


Si todo salió bien, les debería de quedar algo así:


714 visualizaciones0 comentarios

Entradas recientes

Ver todo

Comments


bottom of page