La scheda di interfaccia seriale LCD I2C non visualizza il testo (pin errati?)


9

Ho uno schermo LCD 1602 che funziona bene da solo. Tuttavia, volevo liberare alcuni pin usando un controller LCD I2C / IIC che ho acquistato separatamente.

Mentre il controller sembra comunicare con il mio Arduino UNO sull'indirizzo giusto, non riesco a visualizzare il testo. Di default (nessun codice) sembra che il display LCD abbia 1 riga di 16 "quadrati" solidi. Quando uso l'indirizzo 27 nel mio codice, il display LCD cambierà in 2 righe di 16 quadrati (vedi foto sotto). Il codice richiede anche che la retroilluminazione lampeggi 3 volte, il che funziona. Tuttavia non riesco a ottenere nient'altro che 2 linee di quadrati. (Il codice completo è in fondo a questa domanda).

Sto usando la libreria LiquidCrystal_I2C di F Malpartida, che sembra essere comunemente usata.
Esiste una libreria migliore che dovrei usare?

Mi chiedo se nel codice siano utilizzati solo i pin sbagliati. Tutti gli schizzi che vedo online utilizzano i seguenti pin:

//                    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

Ma tutti i 1602 LCD che vedo online hanno gli stessi pin del mio, come puoi vedere nella mia foto qui sotto:

Controller LCD I2C

Questi pin sembrano essere standard:
1602 Pinout LCD

Per confondermi ulteriormente, i pin sulla scheda LCD iniziano con 1 a sinistra, ma i pin del codice predefinito sembrano iniziare con 0! Quindi ho provato a cambiare i pin del codice con i numeri sulla scheda LCD. Il display LCD non passa più a 2 righe di quadrati e non fa più lampeggiare la retroilluminazione. Ho quindi provato a sottrarre 1 da ciascun pin (per iniziare da 0), stesso risultato. Ho quindi provato a utilizzare i pin predefiniti meno 1, stesso risultato. Quindi i pin predefiniti sono in qualche modo più corretti ?! Che cosa sto facendo di sbagliato?

Qualcun altro ha fatto funzionare uno di questi controller I2C per loro, e se sì, come?

Codice completo:

/* YourDuino.com Example Software Sketch
 16 character 2 line I2C Display
 Backpack Interface labelled "YwRobot Arduino LCM1602 IIC V1"
 terry@yourduino.com */

/*-----( 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 )-- */

Ti sei ricordato di aggiungere i pullup?
Ignacio Vazquez-Abrams,


1
Probabilmente non è un problema, ma hai provato a regolare il contrasto usando il potenziometro? I numeri nel codice si riferiscono a quale pin sul chip PCF8574 è collegato a quale pin sulla scheda LCD. P3 sulla scheda I2C è evidentemente collegato al pin di retroilluminazione sul display LCD. Ma penso che gli altri pin siano in qualche modo sbagliati. Prova a usare un multimetro per vedere dove vanno i pin P0-P7 del PCF8574 a quali pin sull'intestazione dell'LCD.
Gerben,

2
Anche se potrebbe non essere il problema, dovresti prestare attenzione alle intestazioni dei pin saldati sul display LCD, dall'immagine sembrano non coprire completamente il rame intorno al foro; Proverei prima a migliorare questi punti di saldatura.
jfpoilpret

1
@Gerben, derp. Ho testato il chip con un multimetro, tuttavia sono ancora completamente confuso. I pin 9-12 sul chip corrispondono a D4-D7 sull'LCD. Pin 6 = E, 5 = RW e 4 = RS. Non riesco a capire cosa sia effettivamente il pin 7. L'uso di questi valori non mi dà più risposta dal display LCD. Inoltre, dovrei sottrarre 1 da quei pin? Perché ancora una volta, tutti i codici predefiniti là fuori hanno il pin 0 = RS. Ma non può essere, perché il primo pin sul chip è A0 (indirizzo). Fondamentalmente, la modifica di un singolo pin ucciderà la risposta della retroilluminazione o impedirà alla seconda riga di mostrare i caratteri del blocco.
Bort

Risposte:


3

Prima di tutto, sembra che questi fili non siano collegati correttamente:

inserisci qui la descrizione dell'immagine

Non ho mai smontato un maglione femmina prima, quindi questo potrebbe non essere il problema. Tuttavia, sembra probabile che questo potrebbe essere una causa.

Inoltre, è necessario regolare il contrasto ruotando il trimmer che (la cosa blu che assomiglia un po 'come si ha una vite in esso). Gli LCD non visualizzeranno nulla, una versione sbiadita del testo o caselle blu se il contrasto non è impostato correttamente. Questa è probabilmente la causa.


I ponticelli sono così solo perché ho spostato la scheda per la foto. Inoltre ho già regolato il trimmer ed è o blocchi pieni o niente affatto.
Bort

3

Ho comprato SainSmart 20x04 e ho anche dovuto cambiare l'indirizzo in 0x3F. Il mio ponticello della retroilluminazione mancava, quel piccolo header alla destra della scheda I2C fornisce la potenza della retroilluminazione. Alcuni codici che ho trovato includevano questo:

lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);

1

Ho lo stesso problema e lo risolvo semplicemente cambiando l'indirizzo per l'LCD 1602A, che è nei tutorial 0x27 ma nel mio dispositivo è 0x3F.

In bocca al lupo!


Stesso nel mio caso, ha lavorato quando si cambia questa linea: LiquidCrystal_I2C lcd(0x3F,16,2);. Molte grazie!
Stefan,

0

Per quanto ne so, le resistenze pull-up dovrebbero essere integrate con il display.

Hai provato indirizzi diversi? Ne ho uno simile, che funziona sull'indirizzo 0x3F. Forse questo aiuta.


La scheda è stata venduta come "indirizzo 27" e 27 è l'unico indirizzo che risponde a tutti. In realtà è personalizzabile saldando i pin A1 A2 e A3 appena sopra il piatto di rifinitura visto nella foto.
Bort

0

Cambia questo codice:

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

A questo:

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

(L'argomento prima di "POSITIVO" è cambiato da 3 a 8)


1
Qualche spiegazione perché? Non c'è P8 sul PCF8574.
tcurdt,


-2
LiquidCrystal_I2C lcd(0x3f, 2, 1, 0, 4, 6, 5, 7, 3, POSITIVE);  // Set the LCD

Il modulo I2C D6-> P5 è D5-> P6 (invertito).


1
Puoi spiegare di più?
Bort

2
Si prega di modificare il tuo post e formattare il codice utilizzando il codice di formattazione Markdown (quattro spazi iniziali). Per assistenza, consultare la guida di Markdown . Dovresti essere in grado di farlo selezionando il codice e premendo Ctrl+Kper fare in modo che il tuo browser lo faccia per te. La tua risposta sarebbe più utile se entrassi in maggiori dettagli.
Nick Gammon
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.