Aquí les dejo como simplificar la conexión de un LCD 16x2 (consta de 2 líneas y 16 caracteres por línea), mediante comunicación I2C (SCL y SDA únicamente), puesto que por el método tradicional, necesitaríamos un potenciómetro lineal de 10KΩ además de ocupar un gran número de pines digitales, con lo que el montaje del circuito se complicaría en exceso, aunque no va a ser nuestro caso.
Para realizar las conexiones de nuestro montaje, necesitamos un módulo LCM 1602 I2C V1, que es el encargado de realizar la comunicación I2C entre el Arduino y el LCD 1602. Este módulo consta de un expansor de E/S de 8 bits destinado a la comunicación I2C, el cual le podemos encontrar en las versiones PCF8574 y PCF8574A, un potenciómetro para controlar el contraste del LCD, una serie de resistencias para regular corrientes y un pequeño LED integrado en la placa para saber si el módulo está alimentado correctamente (POWER).Módulo LCM 1602 I2C V1 |
Este módulo va soldado directamente sobre los terminales del LCD 1602 que se describen a continuación:
· VSS: Es el terminal de alimentación negativa, es decir, 0 V (masa o GND).
· VDD: Es la alimentación positiva de la pantalla y el chip (5 V). Es recomendable ponerle en serie una resistencia para evitar daños (con una de 220 Ω es suficiente.
· RW: Es el terminal de activación de lectura/escritura. Se suele conectar a masa para que se escriba en todo momento.
· VO: Es el contraste de la pantalla, debe conectarse con un potenciómetro de unos 10 kΩ.
· RS: Es el terminal selector de registro, mediante el cual, el microcontrolador le comunica al LCD si quiere mostrar caracteres o si lo que quiere es enviar comandos de control, como cambiar la posición del cursor o borrar la pantalla, por ejemplo.
· E: Es el terminal de habilitación de la pantalla, tiene que estar activado para poder recibir información.
· D0~D7: El LCD tiene un bus de datos de 8 bits. En este Proyecto solamente utilizaremos 4 bits, de D4 a D7, que nos servirán para establecer las líneas de comunicación por donde se transfieren los datos.
· A y K: Son los terminales del LED que ilumina el fondo de la pantalla (BackLight). A à 5 V y K à GND.
Otra cosa muy importante a recordar es que dentro de la programación, exactamente en la línea “LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);”, donde pone 0x27, es justo la dirección que va a tener nuestro LCD 1602. Dicha dirección se obtiene midiendo el valor de los pines de dirección A0, A1 y A2, que están justo detrás del módulo LCM 1602 I2C V1, con un voltímetro. Si por ejemplo A0 = 0 o nivel BAJO (LOW) significa que ese pin está conectado a GND y de lo contrario si A0 = 1 o nivel ALTO (HIGH) significa que ese pin está conectado a +5V, en la mayoría de los módulos la dirección puede ser modificada simplemente soldando o no los pines de dirección a unos pines adyacentes que van conectados a GND, permitiéndonos conectar varios LCD al mismo tiempo y seleccionarlos según la dirección que tengan. Las posibles direcciones y configuraciones de los pines de dirección A2, A1 y A0 se pueden obtener de la siguiente tabla.
Tabla de configuración de los pines A2, A1 y A0 (direcciones I2C) |
Simplemente tendremos descargar el programa desde el link anterior, conectar el dispositivo deseado mediante I2C, cargar el programa en nuestro Arduino y por último abrir el monitor serie del IDE de Arduino para obtener su dirección I2C.
Monitor serie del IDE de Arduino |
También comentaros que este módulo lo podemos adquirir ya soldado en la parte posterior del LCD 16x2 o por separado, aunque si lo compramos por separado nos hará falta un soldador, estaño y una cierta práctica soldando. Por último no debemos de olvidar ajustar el contraste del LCD 1602 a través del potenciómetro que el módulo LCM 1602 I2C V1 trae incorporado. Ahora ya solo tenemos que conectar los 4 terminales del módulo a sus correspondientes de la placa Arduino (VCC, GND, SDL y SDA), cargar el programa y por último enviar caracteres a través del Monitor serie para que se vayan mostrando en el LCD.
Antes de proceder a enviar caracteres, el LED Backlight, que sirve para iluminar el fondo del LCD , realiza mediante programación una serie de parpadeos, quedándose encendido finalmente. También le enviamos unas pequeñas líneas de texto al LCD para que la ejecución del programa sea mucho más interactiva (consultar comentarios en el código para comprender mejor el funcionamiento completo del programa).
Para ejecutar correctamente este Proyecto necesitamos emplear una parte del software Arduino llamado Serial Monitor. Esta ventana le permite escribir mensajes que se envían a la placa Arduino, así como ver los mensajes que el Arduino nos envía (Herramientas à Monitor serie o también Ctrl+Mayús+M).
Lista de Materiales:
· Arduino UNO Rev.3.
· Cable USB tipo A-B.
· Módulo LCM 1602 I2C V1.
· Display 16x2 LCD 1602.
· Protoboard.
· Cables de conexión.
Código del programa:
Video:
Buen artículo. Sólo una sugerencia, cuando hablas de obtener la dirección del LCD midiendo los pines de dirección, quizá sería más apropiado usar la palabra "voltímetro" en lugar de "potenciómetro". Saludos.
ResponderEliminarMe pudes pasar la libreria I2 C q utlizas gracias :)
ResponderEliminarTengo arduino uno R3, LCD 16X2 I2C con chip PCF8574AT, en mi caso la direccion es 0x3F, y no logro visualizar nada, controlo el backlight, los tiempos, pero no muestra absolutamente nada, ajusto el contraste, he cambiado de librerias, ¿ Tienes alguna sugerencia ?,
ResponderEliminarGracias.
Revisa las conexiones y carga mis librerias que estan en uno de los primeros POST del BLOG.
EliminarHola Mariano, gracias por la respuesta, pero, usando tus librerias, y ejecutando el sketch de este blog, solo pestañea 3 veces, luego queda el backlight encendido, pero no aparece absolutamente nada, ni cuando envio desde el monitor serial.
EliminarEl scaner lo detecta perfectamente pero en la direccion 0x3F.
Eliminarcambia esta la E por la F
EliminarLiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
cdamer me esta pasando exactamente los mismo puedo controlar la luz de contraste y los tiempos, pero no logro mostrar nada en la pantalla, lograste solucionarlo de alguna forma?
EliminarNo lo he podido solucionar y asumi que el lcd esta fallado, porque he probado todo lo posible...
Eliminaryo descarto el LCD por que ya utilice 4 diferentes y sigo con el problema , seguire buscando, si encuentro algo lo pondre por aqui xD
Eliminarencontré la solución a mi problema, hay que desconectar las entradas b0,b1,b2 y b3 del display.
Eliminartengo el mismo problema. Como desconectar b0,b1, b2 y b3? no te sigo.
EliminarMe marca error dice que los documentos no son encontrados en el directorio.
ResponderEliminarWire.h
Instala las librerías.
ResponderEliminarhttp://miarduinounotieneunblog.blogspot.com.es/2015/12/anadiendo-las-librerias.html?m=1
Hola, me tomè el atrevimiento de cambiar lo siguiente, espero no se moleste:
ResponderEliminarlcd.print("Recibiendo>>> ");
lcd.setCursor(14,0);
por
lcd.print("Recibiendo>>> ");
lcd.setCursor(0,1);
ya que cuando compilè y grabè el original, los caracteres enviados se posicionaban en el primer renglòn despues de la palabra "recibiendo>>" y sòlo se imprimian dos caracteres (16 - 14 = 2)
Con la modificaciòn se logra que la palabra recibida se escriba en el segundo renglòn dejando los 16 caracteres libres para ser usados.
Desde ya muy agradecido por su post ya que me ayudò a entender y a hacer funcionar mi kit lcd i2c arduino
LU5YLR Satiago desde Neuquèn Argentina
Me parece muy bien que realices modificaciones a tu gusto, pero al programa no le hace falta ninguna modificacion para su correcto funcionamiento. Saludos
Eliminar¿Porque puede ser que al compilar me dice que la variable POSITIVE no esta declarada?, Gracias.
ResponderEliminarTienes que instalar mis librerías...https://miarduinounotieneunblog.blogspot.com.es/2015/12/anadiendo-las-librerias.html?m=1
EliminarSaludos, Gracias por dedicar tu tiempo a subir contenido.
ResponderEliminarTengo una duda que aun no solvento, ¿se puede variar el contraste y el brillo a través del software? ya lo se hacer con un potenciometro en el pin de led (I2C) y variarlo entre [0-5 Kohm]/ también use el potenciometro a un analogo y una salida pwm al pin led del i2c, sin embargo pestañea por el pwm, por eso me pregunto si hay otra manera de hacerlo a traves de la libreria LiquidCrystal.h, si saben de algo adicional me serviria mucho!
consulta , me esta pasando que si desconecto el USB de la computadora el LCD de 20X4 deja de mostrar los datos , he visto en otros proyectos , que estando desconectado del puerto serie , muestra los datos igual , eso es posible , alguien sabe que configuración es la correcta para poder mostrar datos sin tener el cable USB Conectado.saludos
ResponderEliminarPues muy simple, si desconectas el cable USB del Arduino se queda sin alimentación...debes de alimentar el Arduino con una pila de 9V a través del Jack de 3,5" o bien meter 5VDC a través del pin Vín de Arduino uniendo la masa de la fuente a GND de Arduino.
EliminarSi el problema persiste, elimina del código todas las líneas de comunicación serie con el USB, es decir, los "Serial.print" para que el programa no espere la comunicación USB.
Eliminarbuen dia busco un codigo de mi preferencia me ayudarias porfa y cuento cobrarias https://www.tinkercad.com/things/6nbC4kGEzJv es aumentar 4 pulsadores mas en este codigo con valores 1,2,3,4 y que me lo envies tambien es esquema
ResponderEliminar