La placa de interfaz serie LCD I2C no muestra texto (¿pines incorrectos?)

9

Tengo una pantalla LCD 1602 que funciona bien por sí sola. Sin embargo, quería liberar algunos pines usando un controlador LCD I2C / IIC que compré por separado.

Si bien el controlador parece estar comunicándose con mi Arduino UNO en la dirección correcta, no puedo mostrar el texto. Por defecto (sin código) parece que la pantalla LCD tendrá 1 línea de 16 "cuadrados" sólidos. Cuando uso la dirección 27 en mi código, la pantalla LCD cambiará a 2 líneas de 16 cuadrados (ver foto a continuación). El código también requiere que la luz de fondo parpadee 3 veces, lo que funciona. Sin embargo, no puedo obtener nada más que 2 líneas de cuadrados. (El código completo está al final de esta pregunta).

Estoy usando la biblioteca LiquidCrystal_I2C de F Malpartida, que parece ser de uso común.
¿Hay una mejor biblioteca que debería estar usando?

Me pregunto si solo se usan los pines incorrectos en el código. Todos los bocetos que veo en línea usan los siguientes pines:

//                    addr,en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// Set the LCD I2C address

Pero todos los 1602 LCD que veo en línea tienen los mismos pines que los míos, como puedes ver en mi foto a continuación:

Controlador LCD I2C

Estos pines parecen ser estándar:
1602 Pinout LCD

Para confundirme más, los pines en la placa LCD comienzan con 1 a la izquierda, ¡pero los pines del código predeterminado parecen comenzar con 0! Así que intenté cambiar los pines del código a los números en la placa LCD. La pantalla LCD ya no cambia a 2 líneas de cuadrados y ya no parpadea la luz de fondo. Luego intenté restar 1 de cada pin (para comenzar desde 0), el mismo resultado. Luego intenté usar los pines predeterminados menos 1, el mismo resultado. ¿Entonces los pines predeterminados son de alguna manera más correctos? ¿Qué estoy haciendo mal?

¿Alguien más ha conseguido que uno de estos controladores I2C trabaje para ellos, y si es así, cómo?

Código completo:

/* YourDuino.com Example Software Sketch
 16 character 2 line I2C Display
 Backpack Interface labelled "YwRobot Arduino LCM1602 IIC V1"
 [email protected] */

/*-----( Import needed libraries )-----*/
#include <Wire.h>  // Comes with Arduino IDE
// Get the LCD I2C Library here: 
// https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
#include <LiquidCrystal_I2C.h>

/*-----( Declare objects )-----*/
// set the LCD address to 0x27 for a 20 chars 2 line display
// Set the pins on the I2C chip used for LCD connections:
//                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address

void setup()   /*----( SETUP: RUNS ONCE )----*/
{
  Serial.begin(9600);  // Used to type in characters
  lcd.begin(16,2);   // initialize the lcd for 16 chars 2 lines, turn on backlight

// ------- Quick 3 blinks of backlight  -------------
  for(int i = 0; i< 3; i++) {
    lcd.backlight();
    delay(250);
    lcd.noBacklight();
    delay(250);
  }
  lcd.backlight(); // finish with backlight on  

//-------- Write characters on the display ------------------
// NOTE: Cursor Position: (CHAR, LINE) start at 0  
  lcd.setCursor(0,0); //Start at character 4 on line 0
  lcd.print("Hello, world!");
  delay(1000);
  lcd.setCursor(0,1);
  lcd.print("HI!YourDuino.com");
  delay(8000);  

// Wait and then tell user they can start the Serial Monitor and type in characters to
// Display. (Set Serial Monitor option to "No Line Ending")
  lcd.clear();
  lcd.setCursor(0,0); //Start at character 0 on line 0
  lcd.print("Use Serial Mon");
  lcd.setCursor(0,1);
  lcd.print("Type to display");  

}/*--(end setup )---*/

void loop()   /*----( LOOP: RUNS CONSTANTLY )----*/
{
  {
    // when characters arrive over the serial port...
    if (Serial.available()) {
      // wait a bit for the entire message to arrive
      delay(100);
      // clear the screen
      lcd.clear();
      // read all the available characters
      while (Serial.available() > 0) {
        // display each character to the LCD
        lcd.write(Serial.read());
      }
    }
  }

}/* --(end main loop )-- */
Diamante negro
fuente
¿Te acordaste de agregar los pullups?
Ignacio Vazquez-Abrams
1
Probablemente no sea el problema, pero ¿ha intentado ajustar el contraste con el potenciómetro? Los números en el código se refieren a qué pin en el chip PCF8574 está conectado a qué pin en la placa LCD. P3 en la placa I2C está evidentemente conectado al pin de luz de fondo en la pantalla LCD. Pero creo que los otros pines están equivocados de alguna manera. Intente usar un multímetro para ver dónde van los pines P0-P7 del PCF8574 a qué pines en el encabezado lcd.
Gerben
2
Aunque puede que no sea el problema, debe prestar atención a los encabezados de clavija soldados en la pantalla LCD, por la imagen que parecen no cubrir completamente el cobre alrededor del orificio; Intentaría mejorar estos puntos de soldadura primero.
jfpoilpret 01 de
1
@Gerben, derp. Probé el chip con un multímetro, sin embargo, todavía estoy completamente confundido. Los pines 9-12 en el chip corresponden a D4-D7 en el lCD. Pin 6 = E, 5 = RW y 4 = RS. No puedo entender qué es realmente el pin 7. El uso de esos valores no me da respuesta de la pantalla LCD nuevamente. Además, ¿se supone que debo restar 1 de esos pines? Porque de nuevo, todos los códigos predeterminados tienen pin 0 = RS. Pero eso no puede ser, porque el primer pin en el chip es A0 (dirección). Básicamente, cambiar cualquier pin individual matará la respuesta de la luz de fondo o evitará que la segunda fila muestre los caracteres del bloque.
Bort

Respuestas:

3

En primer lugar, parece que estos cables no están conectados correctamente:

ingrese la descripción de la imagen aquí

No he desarmado un puente femenino antes, por lo que ese podría no ser el problema. Sin embargo, parece probable que esto pueda ser una causa.

Además, debe ajustar el contraste girando esa recortadora (la cosa azul que parece un poco tiene un tornillo). Las pantallas LCD no mostrarán nada, una versión borrosa del texto o cuadros azules si el contraste no está configurado correctamente. Esta es probablemente la causa.

Pingüino anónimo
fuente
Los puentes son así solo porque moví el tablero para la foto. También ajusté el recortador ya y es bloques completos o nada en absoluto.
Bort
3

Compré el SainSmart 20x04 y también tuve que cambiar la dirección 0x3F. Faltaba mi puente de luz de fondo, ese pequeño encabezado a la derecha de la placa I2C proporciona la potencia de la luz de fondo. Algunos códigos que encontré incluyen esto:

lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
Ed Kimble
fuente
1

Tengo el mismo problema y lo soluciono simplemente cambiando la dirección de la LCD 1602A, que está en los tutoriales 0x27 pero en mi dispositivo es 0x3F.

¡Buena suerte!

Ricardo Herrero
fuente
Igual que en mi caso, trabajado al cambiar esta línea: LiquidCrystal_I2C lcd(0x3F,16,2);. ¡Muchas gracias!
Stefan
0

Hasta donde sé, las resistencias pull-up deberían integrarse con la pantalla.

¿Intentaste diferentes direcciones? Tengo uno similar, que funciona en la dirección 0x3F. Quizás esto ayude.

ingeniero
fuente
El tablero se vendió como "dirección 27", y 27 es la única dirección que responde en absoluto. En realidad, se puede personalizar soldando los pines A1 A2 y A3 justo encima del bote de recorte que se ve en la foto.
Bort
0

Cambia este código:

LiquidCrystal_I2C lcd(0x26, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

A esto:

LiquidCrystal_I2C lcd(0x26, 2, 1, 0, 4, 5, 6, 7, 8, POSITIVE);

(El argumento antes de "POSITIVO" se cambia de 3 a 8)

oz1ayw
fuente
1
¿Alguna explicación por qué? No hay P8 en el PCF8574.
tcurdt
-1

Estoy seguro que este enlace será útil para usted, tengo el mismo lcd y lo conseguí trabajo con I2C siguiendo los pasos de este enlace http://forum.arduino.cc/index.php?topic=128635.0

omaima
fuente
1
Al igual que en su otra respuesta, publique un resumen de la guía aquí en caso de que su enlace
falle
-2
LiquidCrystal_I2C lcd(0x3f, 2, 1, 0, 4, 6, 5, 7, 3, POSITIVE);  // Set the LCD

El módulo I2C D6-> P5 es D5-> P6 (invertido).

Vlecsi
fuente
1
¿Puedes explicarme mas?
Bort
2
Por favor, editar tu post y dar formato al código utilizando el formato de código de reducción del precio (cuatro espacios iniciales). Para obtener ayuda, consulta la ayuda de Markdown . Debería poder hacer esto seleccionando el código y presionando Ctrl+Kpara que su navegador lo haga por usted. Su respuesta sería más útil si entrara en más detalles.
Nick Gammon