I2C LCD Serial Interface Board zeigt keinen Text an (falsche Pins?)


9

Ich habe einen 1602 LCD-Bildschirm, der alleine gut funktioniert. Ich wollte jedoch einige Pins mit einem I2C / IIC-LCD-Controller freigeben, den ich separat gekauft habe.

Während der Controller mit meinem Arduino UNO unter der richtigen Adresse zu kommunizieren scheint, kann kein Text angezeigt werden. Standardmäßig (kein Code) scheint das LCD 1 Zeile mit 16 durchgezogenen "Quadraten" zu haben. Wenn Sie die Adresse 27 in meinem Code verwenden, ändert sich das LCD in 2 Zeilen mit 16 Quadraten (siehe Foto unten). Der Code fordert auch, dass die Hintergrundbeleuchtung dreimal blinkt, was funktioniert. Ich kann jedoch nur 2 Quadrate bekommen. (Der vollständige Code befindet sich am Ende dieser Frage.)

Ich verwende die LiquidCrystal_I2C-Bibliothek von F Malpartida, die anscheinend häufig verwendet wird.
Gibt es eine bessere Bibliothek, die ich verwenden sollte?

Ich frage mich, ob es nur die falschen Pins sind, die im Code verwendet werden. Alle Skizzen, die ich online sehe, verwenden die folgenden Stifte:

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

Aber alle 1602 LCDs, die ich online sehe, haben die gleichen Stifte wie meine, wie Sie auf meinem Foto unten sehen können:

I2C LCD Controller

Diese Stifte scheinen Standard zu sein:
1602 LCD Pinbelegung

Um mich weiter zu verwirren, beginnen die Pins auf der LCD-Platine links mit 1, aber die Pins des Standardcodes scheinen mit 0 zu beginnen! Also habe ich versucht, die Pins des Codes in die Zahlen auf der LCD-Platine zu ändern. Das LCD ändert sich nicht mehr in 2 Quadratzinien und die Hintergrundbeleuchtung blinkt nicht mehr. Ich habe dann versucht, 1 von jedem Pin zu subtrahieren (um bei 0 zu beginnen), das gleiche Ergebnis. Ich habe dann versucht, die Standard-Pins minus 1 zu verwenden, das gleiche Ergebnis. Somit sind die Standardstifte irgendwie korrekter?! Was mache ich falsch?

Hat jemand einen dieser I2C-Controller dazu gebracht, für sie zu arbeiten, und wenn ja, wie?

Vollständiger Code:

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

Hast du daran gedacht, die Klimmzüge hinzuzufügen?
Ignacio Vazquez-Abrams


1
Wahrscheinlich nicht das Problem, aber haben Sie versucht, den Kontrast mit dem Potentiometer einzustellen? Die Zahlen im Code beziehen sich darauf, welcher Pin auf dem PCF8574- Chip mit welchem ​​Pin auf der LCD-Platine verbunden ist. P3 auf der I2C-Karte ist offensichtlich mit dem Hintergrundbeleuchtungsstift auf dem LCD verbunden. Aber ich denke, die anderen Pins sind irgendwie falsch. Verwenden Sie ein Multimeter, um festzustellen, wo die P0-P7-Pins des PCF8574 zu welchen Pins im LCD-Header führen.
Gerben

2
Obwohl dies möglicherweise nicht der Fall ist, sollten Sie auf die gelöteten Stiftleisten auf dem LCD achten. Auf dem Bild scheinen sie das Kupfer um das Loch nicht vollständig zu bedecken. Ich würde zuerst versuchen, diese Lötpunkte zu verbessern.
jfpoilpret

1
@ Gerben, derp. Ich habe den Chip mit einem Multimeter getestet, bin aber immer noch völlig verwirrt. Die Pins 9-12 auf dem Chip entsprechen D4-D7 auf der ICD. Pin 6 = E, 5 = RW und 4 = RS. Ich kann nicht herausfinden, was Pin 7 eigentlich ist. Wenn ich diese Werte verwende, erhalte ich keine Antwort mehr vom LCD. Soll ich auch 1 von diesen Stiften subtrahieren? Denn auch hier haben alle Standardcodes Pin 0 = RS. Das kann aber nicht sein, denn der erste Pin auf dem Chip ist A0 (Adresse). Grundsätzlich wird durch Ändern eines einzelnen Pins entweder die Hintergrundbeleuchtung unterbrochen oder die zweite Zeile wird daran gehindert, die Blockzeichen anzuzeigen.
Bort

Antworten:


3

Zunächst sieht es so aus, als ob diese Drähte nicht richtig angeschlossen sind:

Geben Sie hier die Bildbeschreibung ein

Ich habe noch nie eine Jumperin zerlegt, daher ist das möglicherweise nicht das Problem. Es ist jedoch wahrscheinlich, dass dies eine Ursache sein könnte.

Auch Sie müssen den Kontrast einzustellen durch diesen Trimmer (das blaue Ding , das aussieht ein bisschen wie eine Schraube in sich hat) drehen. LCDs zeigen entweder nichts, eine verwaschene Version des Textes oder blaue Kästchen an, wenn der Kontrast nicht richtig eingestellt ist. Dies ist wahrscheinlich die Ursache.


Die Jumper sind nur so, weil ich das Board für das Foto verschoben habe. Außerdem habe ich den Trimmer bereits eingestellt und er ist entweder voll oder gar nichts.
Bort

3

Ich habe den SainSmart 20x04 gekauft und musste auch die Adresse in ändern 0x3F. Mein Jumper für die Hintergrundbeleuchtung fehlte, dieser kleine Header rechts auf der I2C-Platine liefert die Hintergrundbeleuchtung. Ein Code, den ich gefunden habe, enthielt Folgendes:

lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);

1

Ich habe das gleiche Problem und behebe es, indem ich die Adresse für das LCD 1602A ändere. Diese befindet sich in den Tutorials 0x27, aber auf meinem Gerät ist 0x3F.

Viel Glück!


Das gleiche gilt in meinem Fall beim Ändern dieser Zeile : LiquidCrystal_I2C lcd(0x3F,16,2);. Vielen Dank!
Stefan

0

Soweit ich weiß, sollten die Pull-up-Widerstände in das Display integriert werden.

Haben Sie verschiedene Adressen ausprobiert? Ich habe eine ähnliche, die auf Adresse 0x3F funktioniert. Vielleicht hilft das.


Das Board wurde als "Adresse 27" verkauft und 27 ist die einzige Adresse, die überhaupt antwortet. Es kann durch Anlöten der Stifte A1 A2 und A3 direkt über dem auf dem Foto gezeigten Trimmtopf angepasst werden.
Bort

0

Ändern Sie diesen Code:

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

Dazu:

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

(Das Argument vor "POSITIV" wird von 3 auf 8 geändert.)


1
Irgendeine Erklärung warum? Auf dem PCF8574 befindet sich kein P8.
tcurdt

-1

Ich bin mir sicher, dass dieser Link für Sie hilfreich sein wird. Ich habe dieselbe LCD-Karte und habe sie mit I2C ausgeführt. Befolgen Sie dazu die Schritte in diesem Link http://forum.arduino.cc/index.php?topic=128635.0


1
Wie in Ihrer anderen Antwort, veröffentlichen Sie hier eine Zusammenfassung des Handbuchs, falls Ihr Link 404
lautet.

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

Das I2C-Modul D6-> P5 ist D5-> P6 (invertiert).


1
Kannst du mehr erklären?
Bort

2
Bitte bearbeiten Sie Ihren Beitrag und formatieren Sie den Code mit dem Code-Formatierungs-Markdown (vier führende Leerzeichen). Hilfe finden Sie unter Markdown-Hilfe . Sie sollten dies tun können, indem Sie den Code auswählen und drücken Ctrl+K, damit Ihr Browser dies für Sie erledigt. Ihre Antwort wäre hilfreicher, wenn Sie näher darauf eingehen würden.
Nick Gammon
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.