LCD-Display Zeilen merkwürdig angeordnet

Hallo,

ich versuche gerade dieses Display (LCD DataVision DG-14032 online kaufen | Pollin.de) anzusteuern. Soweit ich weiß ist der Controller ein ST7290, dürfte aber mit dem HD44780 kompatibel sein, da eigentlich alle Funktionen der LiquidCrystal-lib laufen. Jedoch habe ich ein Problem mit den einzelnen Zeilen.
Und zwar beginnen Zeile 0 & 1 in der 1. Zeile ganz links, und Zeile 2 & 3 fangen in der 2. Zeile in der Mitte an... :astonished: Ich betreibe das Display übrigens im 4bit Modus, und es hat 140x32 Pixel (17.5 Spalten, 2 Reihen).

Ich habe die Verkabelung bereits zweimal neuaufgebaut, der Fehler ist aber immer der gleiche.

Vielleicht weiß ja jemand woran das liegen könnte.

Ich verstehe dich nicht so recht. Du sprichst von einem Display, dass 2 Reihen (=Zeilen) x 17,5 Zeichen (=Anzahl Spalten) darstellen kann, redest aber von Zeilennummer 0-3?
Wie initialisierst du das Display?

Gute Frage, vor allem sprichst Du auch von 140x32 Pixeln, steuerst aber anscheinend Zeilen und Zeichen an. Das passt irgendwie nicht ganz zusammen.

mkl0815:
Gute Frage, vor allem sprichst Du auch von 140x32 Pixeln, steuerst aber anscheinend Zeilen und Zeichen an. Das passt irgendwie nicht ganz zusammen.

Doch, das passt schon. Bei meiner Recherche stolperte ich über einen Beitrag im Mikrocontroller.net-Forum, wo ein ähnliches Display zu sehen war. Tatsächlich ist das eigentliche Display mit dieser Auflösung vorhanden, also ohne Zwischenräume zwischen den einzelnen Zeichen, wie es bei gängigen Text-Displays der Fall ist. Trotz alledem ist der Controller HD44780-kompatibel, und das letzte Zeichen wird abgeschnitten, daher die 17,5 Zeichen in der Breite.
In der Regel sind dann auch andere, größere Zeichensätze eingestellt, also mehr als die 5x7 Pixel.

Bei dem Display handelt es sich um das aus dem Mikrocontroller.net Forum (DataVision DG-14032).
Das Display scheint eine Art Mix aus Text- und Grafik-Display zu sein. Mit der Textausgabe habe ich kein Problem, ebenso kann ich den Cursor zeichenweise verschieben.
Jedoch schaffte ich es nicht, den Cursor Zeihlenweise zu verschieben.
Am Anfang bekam ich ihn garnicht in die zweite Zeile, Zeile 0 und 1 waren identisch. Dann habe ich das Display testweise mit 4 Zeilen initalisiert, da ich gelesen habe, dass manche Displays virtuell 4 Zeilen haben (die 1. Zeile ist oben links, die 2. oben in der Mitte, die 3. unten links, und die 4. unten in der Mitte). Damit hatte ich schon mehr Erfolg, jedoch bekomme ich den Cursor nicht nach unten links, sondern nur nach unten in die Mitte:

Also bei mir: Zeile 0 & 1 fangen oben links an; Zeile 2 & 3 unten in der Mitte.

Mein aktueller Code sieht so aus:

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  lcd.begin(16, 4);
  lcd.blink();
}

void loop() {
  for(int i=0; i < 4; i++) {
    lcd.setCursor(0, i);
    lcd.print(i); 
    delay(500);
  }
}

Der Cursor soll dabei jede halbe Sekunde eine Zeile weiterspringen, bei mir ist er also eine ganze Sekunde lang in der ersten Zeile links, und dann eine Sekunde in der zweiten Zeile in der Mitte...

Ich hoffe das ist verständlich. :slight_smile:

lcd.begin mit einer Vorgabe 17.5 geht schonmal nicht, da hier eine 8Bit-Zahl, unsigned, erwartet wird. Ich würde es wohl mit der 16 oder gleich 20 probieren, was ja quasi Standardbreiten sind.

Mit 16 habe ich es auch schon probiert, die 17.5 war nur einer meiner Versuche.

Einige Displays sind physisch 2x16 Zeichen und programmtechnisch 4x8 Zeichen organisiert. Das ist im Rahmen des üblichen.
Grüße Uwe

Das glaube ich. Das Problem ist aber, dass die erste und zweite bei mir in der ersten Zeile am Anfang anfangen, und Zeile drei und vier in der zweiten Zeile in der Mitte.

lcd.setCursor(0, 0);
----------------------------------------
|| x                                  ||
||                                    ||
----------------------------------------

lcd.setCursor(0, 1);
----------------------------------------
|| x                                  ||
||                                    ||
----------------------------------------

lcd.setCursor(0, 2);
----------------------------------------
||                                    ||
||                 x                  ||
----------------------------------------

lcd.setCursor(0, 3);
----------------------------------------
||                                    ||
||                 x                  ||
----------------------------------------

Das "x" steht für den Cursor.
Ich hoffe jetzt ist klar, was ich meine. :slight_smile:

und wo sind die Zeichen wenn Du mehr als die erste Zeile vollschreibst?
Grüße Uwe

Hast Du das Display denn schon mal mit lcd.begin(8, 4); initialisiert?

Ja, macht keinen Unterschied.

uwefed:
und wo sind die Zeichen wenn Du mehr als die erste Zeile vollschreibst?
Grüße Uwe

zB 012345678901234567890123456789 in die erste Zeile hineinschrieben.
Grüße Uwe

Dann ist die erste Zeile komplett gefüllt und die zweite "7" wird abgeschnitten.
In der zweiten Zeile erscheint nichts...

Hallo,

hast Du mal "lcd.setCursor(-4, 2);"
Das hat bei mir mit der negativen Zahl bei meinem LCD 20x4 geholfen.

Gruß G][Kar

Komischer Tipp, negative Zahlen zu verwenden. Wenn man sich die LCD-Library ansieht, sollen die übergebenen Werte vom Typ unsigned byte sein. Woher hast du diese Idee bzw. den Vorschlag, dass man da mal etwas weiter forschen kann?

GKar:
Hallo,

hast Du mal "lcd.setCursor(-4, 2);"
Das hat bei mir mit der negativen Zahl bei meinem LCD 20x4 geholfen.

Gruß G][Kar

Klappt tatsächlich! :slight_smile:

Danke, da wäre ich so schnell nicht drauf gekommen.