Forum: Mikrocontroller und Digitale Elektronik LCD 16x2 zeigt nur 8 Zeichen pro Zeile, I2C-Interface


von Bernhard S. (b_spitzer)


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.

von Karl M. (Gast)


Lesenswert?

Hallo,

es ist halt anders organisiert; ich habe selbst ~4 Stück im Einsatz.

Es ist als 2x16 Zeichen Display zu initialisieren und entsprechend an zu 
sprechen.

Ok?

Bei mir steht diese Info im Datenblatt.

von Jörg R. (solar77)


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.

von Bernhard S. (b_spitzer)


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
}

von Wolfgang (Gast)


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.

von A. S. (Gast)


Lesenswert?

Schreib ein Zeichen direkt an jede Kombination von Zeile/Spalte, die die 
Datenfeldbreiten hergeben.

von GroberKlotz (Gast)


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

von Bernhard S. (b_spitzer)


Lesenswert?

Ein anderes Display funktioniert. Da war bei dem ersten Display 
scheinbar wirklich der Spaltentreiber für die 2. Displayhälfte defekt. 
Hatte ich bei >30 verbauten Diplays auch noch nicht...

von Peter D. (peda)


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.

von Bernhard S. (b_spitzer)


Lesenswert?

Beide Displays sind aus der selben Charge.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.