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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Bernhard S. (b_spitzer)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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. (achs)


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

von GroberKlotz (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Beide Displays sind aus der selben Charge.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.