LCD 16x2 zeigt nur 8 Zeichen pro Zeile, I2C-Interface

#5608570
Lesenswert?

Hallo zusammen,

ich versuche gerade ein Standard 16x2 LCD per PCF8574 I2C-Adapter an 
einem Arduino Uno in Betrieb zu bekommen.
Ich habe jetzt die Bibilotheken LiquidCrystal_I2C 1.1.2 und 
LiquidCrystal_PCF8574 getestet. In beiden Fällen zeigt das Display in 
beiden Zeilen jeweils die korrekte Ausgabe in den ersten 8 Stellen an. 
Die 9.-16. Stelle bleibt aus, auch wenn ich den Cursor von Hand auf die 
hinteren Stellen setze. Man könnte fast meinen, es wäre ein 
16x1-Display, aber die Platine hat beide ICs drauf und vor der 
Initialisierung sind alle 16 Zeichen der ersten Zeile grau...

Hat von euch schon mal ein Display mit so einem Defekt gehabt? Es ist 
ein QY-1602A Display mit Hintergrundbeleuchtung.
#5608597
Lesenswert?

Bernhard S. schrieb:
> Hat von euch schon mal ein Display mit so einem Defekt gehabt?

Die Frage ist ob das Display einen defekt hat, was ich erst einmal 
ausschließen würde. Hast Du ein weiteres Display zum testen?

Der Fehler wird wohl eher im Code liegen. Die Verdrahtung wird richtig 
sein, es werden ja Zeichen dargestellt.

Trotzdem, poste mal die Schaltung und den Code.
#5608625
Lesenswert?

An meinem AT89C5131 läuft genau der Displaytp mit 7 IO an einem 
Parallelport. Daher gehe ich von einem Standard-Hitachi-Kompatiblen mit 
16x2 Zeichen aus. Auch der 4-Bit-Modus wird da genutzt.
Am Arduino ist jetzt nur noch der PCF8574-Adapter dazwischen.
Von den I2C-Adaptern habe ich leider nur einen hier (am Montag komme ich 
wieder an meinen Vorrat ran). Der geht auch, weil ja das Display per I2C 
initialisiert wird und die ersten Zeichen jeder Zeile korrekt sind.

In der Initialisierung der LiquidCrystal_I2C wird auch das Function-Set 
Register mit 2-Zeilen-Modus initialisiert. Die Defines in der H-Datei 
passen auch.
1
#include <Wire.h>
2
#include <LiquidCrystal_I2C.h>
3

4
LiquidCrystal_I2C lcd(0x27,16,2);  // LCD address 0x27, 16 chars 2 line display
5

6
void setup()
7
{
8
  lcd.init();                      // initialize the lcd 
9
  lcd.backlight();
10
  
11
  lcd.home();
12
  
13
  lcd.print("Hello world...  ");   // only "Hello Wo" visible
14
  lcd.setCursor(0, 1);
15
  lcd.print("0123456789012345");   // only "01234567" visible
16
  
17
}
18
void loop()
19
{
20
// nothing else
21
delay(1000);
22
}
Gast #5608793
Lesenswert?

Bernhard S. schrieb:
> An meinem AT89C5131 läuft genau der Displaytp mit 7 IO an einem
> Parallelport. Daher gehe ich von einem Standard-Hitachi-Kompatiblen mit
> 16x2 Zeichen aus. Auch der 4-Bit-Modus wird da genutzt.
> Am Arduino ist jetzt nur noch der PCF8574-Adapter dazwischen.

Dann guck doch hinter dem I2C-Adapter auf der Schnittstelle des 
Displays, ob die Signale dort in Ordnung sind, insbesondere ob der 
Display-Prozessor genügend Zeit für die Kommandoausführung bekommt.
Gast #5609129
Lesenswert?

Hallo Bernhard

Ersetze mal diesen Code
[c]
LiquidCrystal_I2C lcd(0x27,16,2);  // LCD address 0x27, 16 chars 2 line 
display

void setup()
{
  lcd.init();                      // initialize the lcd
  lcd.backlight();
[c]

durch diesen:
[c]
                      //(Addr  EN RW RS D4 D5 D6 D7 BL Backlight 
polarity)
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

void setup();

      lcd.begin(16,2);              //Digits und Zeilenzahl anpassen
[c]
Anmerkung: laut Dokumentation zum LCD-Library werden Digits und 
Zeilenzahl nicht in der Definition des LCD-Objektes, sonder mit
[c]lcd.begin(Digits, Zeilenzahl);[c]
definiert.

Gruss GroberKlotz
#5614743
Lesenswert?

Bernhard S. schrieb:
> Ein anderes Display funktioniert. Da war bei dem ersten Display
> scheinbar wirklich der Spaltentreiber für die 2. Displayhälfte defekt.

Bernhard S. schrieb:
> vor der
> Initialisierung sind alle 16 Zeichen der ersten Zeile grau...

Dann sollten die Treiber aber nicht defekt sein.
Ist das 2. LCD genau vom gleichen Typ?
Wenn nicht, vielleicht ist das 1. LCD als 8*4 anzusteuern.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren