Forum: Mikrocontroller und Digitale Elektronik altes 40x4 LCD - Zeile 2 und 4 ohne Ausgabe


von Andy W. (gastandy)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich teste gerade -nur mit Teilerfolg- ein altes LCD 40x4. Das Display 
hat zwei HD44780 drauf und verfügt über zwei separate Enable-Pins, d.h. 
ein HD bedient Zeile 1+2 mit 40x2 Zeichen, der andere Zeile 3+4.

Leider bekomme ich bei beiden nur die erste Zeile angesteuert, also 
Zeile 1 und 3 des Displays, Zeile 2 und 4 bleiben immer leer.
Seltsamerweise bekomme ich generell auch nur eine Displayausgabe, wenn 
mit 0x30 (einzeilig) initialisiert wird. Initialisiere ich mit 0x38 
(zweizeilig), so wie ich es eigentlich erwarten würde, bleiben auch 
Zeile 1 und 3 leer.

Meine Adressen zum Setzen des Cursors vorm Schreiben sind 0x80 für Zeile 
1(3) und 0xC0 für Zeile 2(4). Ich habe aber auch schon mit anderen 
Werten getestet - alles ohne Erfolg.

Ich bin jetzt echt ratlos. Habt Ihr noch eine Idee?

MFG
Andy

von Jörg R. (solar77)


Lesenswert?

Andy W. schrieb:
> ich teste gerade -nur mit Teilerfolg- ein altes LCD 40x4. Das Display
> hat zwei HD44780 drauf und verfügt über zwei separate Enable-Pins, d.h.
> ein HD bedient Zeile 1+2 mit 40x2 Zeichen, der andere Zeile 3+4.
>
> Leider bekomme ich bei beiden nur die erste Zeile angesteuert, also
> Zeile 1 und 3 des Displays, Zeile 2 und 4 bleiben immer leer.

> Ich bin jetzt echt ratlos. Habt Ihr noch eine Idee?

Als erstes würde ich mal die 2 Enable-Anschlüsse für die Ansteuerung 
vertauschen und schauen ob es eine Veränderung gibt.

Ansonsten würde ich einen Logic Analyzer verwenden und die 
Initialisierung prüfen.

Oder hast du ggf. ein 2tes baugleiches Display um die Initialisierung zu 
testen?

: Bearbeitet durch User
von Michael B. (laberkopp)


Lesenswert?

Andy W. schrieb:
> Meine Adressen zum Setzen des Cursors vorm Schreiben sind 0x80 für Zeile
> 1(3) und 0xC0 für Zeile 2(4). Ich

Die Cursoradresse sollte 0 und 0x40 sein, die 0x80 und 0xC0 ergeben sich 
nur durch das Kommando Set_CURSOR 0x80 verodert mit der Adresse.

Im FUNCTION_SET Kommando muss halt N auf 1 sein damit es 2-zeilig wird.

: Bearbeitet durch User
von Andy W. (gastandy)


Angehängte Dateien:

Lesenswert?

Jörg R. schrieb:
> Als erstes würde ich mal die 2 Enable-Anschlüsse für die Ansteuerung
> vertauschen und schauen ob es eine Veränderung gibt.

Ich habe beim Test immer nur einen Enable-Pin angeschlossen. Nach dem 
Umlöten habe ich bei den anderen beiden Zeilen dann das gleiche 
Verhalten.

Michael B. schrieb:
> Im FUNCTION_SET Kommando muss halt N auf 1 sein damit es 2-zeilig wird.

Genau, dieses Bit entscheidet ob einzeilig (Init mit 0x30) oder 
zweizeilig (Init mit 0x38).

ABER: Bei 0x38 bleibt das Display komlett leer, das ist mein Problem!

von Carsten S. (dg3ycs)


Lesenswert?

Hi,

Andy W. schrieb:
> ich teste gerade -nur mit Teilerfolg- ein altes LCD 40x4. Das Display
> hat zwei HD44780 drauf und verfügt über zwei separate Enable-Pins, d.h.
> ein HD bedient Zeile 1+2 mit 40x2 Zeichen, der andere Zeile 3+4.

Andy W. schrieb:
> Ich habe beim Test immer nur einen Enable-Pin angeschlossen. Nach dem
> Umlöten habe ich bei den anderen beiden Zeilen dann das gleiche
> Verhalten.

Also du hast die Enable Pins Vertauscht und nun sind die Zeilen aktiv 
die vorher Leer waren und umgekehrt?

Wenn ja, dann würde ich einfach mal davon ausgehen das deine Vermutung 
das 1 HD für die Zeilen 1+2 und der andere 3+4 macht falsch ist.
Dann wird es eher so sein das der erste HD die Zeilen 1+3 bedient und 
und der zweite dann die Zeilen 2+4.

So eine Zuordnung ist im übrigen gar nicht mal so unüblich wenn zwei 
Treiber/Steuerungen/was auch immer auf vier Einheiten verteilt wirken.
Auch Abseits von LCD.

Das heisst du musst das LCD wie zwei getrennte zweizeilige LCD 
Behandeln. Die Auswahl auf welches "Zweizeilige" LCD du schreibst machst 
du mit der Enable Leitung

Gruß
Carsten

von Peter L. (pelikan)


Lesenswert?

gans einfach!
Du kannst 20x4 initialisieren?
Also z.B. mit

  RS  = 0;

  Set( 0x38 );

  Set( 0x38 );

  Set( 0x38 );

  Set( 0x08 ); // Display off

  Set( 0x01 ); // löschen

  Set( 0x06 ); // Entry Mode Set cursor right DDRAM+1

  Set( 0x0C ); // Display on

  RS  = 1;

Das wird auf LCD_EN ausgegeben.

Bei 40x4 wird das auf LCD_EN1 UND LCD_EN2 gleichzeitig ( in der Function 
Set ) ausgegeben.

Bei der Zeichenausgabe werden die ersten 80 Zeichen an LCD_EN1 und die
zweiten 80 Zeichen an LCD_EN2 ausgegeben.

von Carsten S. (dg3ycs)


Lesenswert?

Ähh...

Ignoriere meinen vorherigen Beitrag, ich glaube ich habe den 
Eröffnugnsbeitrag falsch verstanden!
Kann nur nicht mehr Löschen...

Gruß
Carsten

von Andy W. (gastandy)


Lesenswert?

Nur um Missverständnisse auszuschließen, versuche ich nochmal 
zusammenzufassen, was ich bisher gemacht habe:

1) Die verwendete Routine zur Initialisierung ist eine bereits 
funktionierende von einem  doppelzeiligen Display  (wie von Peter L im 
Prinzip beschrieben).

2) Mir ist bewusst, daß ich das 4x40 LCD durch die zwei Enable-Pins wie 
zwei getrennte 2x40 handeln muss.

3) Mit Enable 1 angeschlossen und der funktionierenden Routine von 1) 
kann ich mit 0x30 beim Init Zeile 1 ansteuern, Zeile 2+3+4 bleiben leer. 
Initialisiere ich mit 0x38 bleibt das ganze LCD leer.

4) Mit Enable 2 angeschlossen und der funktionierenden Routine von 1) 
kann ich mit 0x30 beim Init Zeile 3 ansteuern, Zeile 1+2+4 bleiben leer. 
Initialisiere ich mit 0x38 bleibt das ganze LCD leer.

Ich ändere also nur den Wert beim Init, alles andere bleibt gleich.
Das Setzen der Cursorposition bei 3) und 4) immer 0x80 für erste Zeile 
und 0xC0 für zweite, wobei ich da, wie bereits erwähnt, schon 
verschiedene Werte getestet habe.

von Daniel S. (supernova01)


Lesenswert?

Was passiert wenn du es einzeilig initialisierst und mehr als 40 Zeichen 
schickst?

Vielleicht sind es ja zwei einzeilige Displays mit 1x80 Zeichen...

von Andy W. (gastandy)


Lesenswert?

Daniel S. schrieb:
> Was passiert wenn du es einzeilig initialisierst und mehr als 40 Zeichen
> schickst?
>
> Vielleicht sind es ja zwei einzeilige Displays mit 1x80 Zeichen...

Das habe ich auch schon probiert, in der Hoffnung irgendwann auch in die 
andere Zeile zu schreiben - leider auch erfolglos, d.h. ab Zeichen 41 
wird nichts angezeigt.

von Dieter W. (dds5)


Lesenswert?

Zwischen einzeilig und zweizeilig muss man bei manchen Displays den 
Kontrast merklich ändern.

von Peter L. (pelikan)


Lesenswert?

welcher Controller  und 4 oder 8Bit Ansteuerung?
Da ich aber ein -2 bekommen habe, bin ich raus.

von Andy W. (gastandy)


Lesenswert?

Dieter W. schrieb:
> Zwischen einzeilig und zweizeilig muss man bei manchen Displays den
> Kontrast merklich ändern.

Interessanter Punkt: Bei diesem Display muss ich das Kontrastpoti fast 
auf Anschlag stellen, damit die Schrift der einen Zeile sichtbar wird. 
Die Einstellung "alles schwarz" bekomme ich überhaupt nicht hin. Die 
Ansteuerung des Displays läuft mit 5V, Kontrast am Schleifer, Poti 
zwischen 5V und GND.

Muss an den Kontrastpin evtl. eine andere Spannung angelegt werden, d.h. 
>5V oder <0V ?

von Jörg R. (solar77)


Lesenswert?

Peter L. schrieb:
> welcher Controller  und 4 oder 8Bit Ansteuerung?

Standardcontroller HD44780, 2 Stück. Ist auf dem, nicht so guten Foto, 
zu erkennen.

von H. H. (hhinz)


Lesenswert?

Andy W. schrieb:
> Muss an den Kontrastpin evtl. eine andere Spannung angelegt werden, d.h.
>>5V oder <0V ?

Durchaus -8V gegen Vcc, also bei 5V Versorgung -3V gegen GND.

von Andy W. (gastandy)


Lesenswert?

H. H. schrieb:
> Durchaus -8V gegen Vcc, also bei 5V Versorgung -3V gegen GND.

Das ist vielleicht die Lösung. Ich teste das morgen. Heute isses etwas 
zu spät dafür. Melde mich dann wieder nach dem Test!

MFG
Andy

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Andy W. schrieb:
> Muss an den Kontrastpin evtl. eine andere Spannung angelegt werden,
> d.h. >5V oder <0V ?
Die Kontrastspannung ist auf Vcc spezifiziert und kann bei alten 
Displays locker mal -7V und bei Weittemperaturdisplays bis zu -9V 
betragen.

Dazu 5V Versorgungsspannung dazuaddiert ergibt -2V..-4V gegen GND.

: Bearbeitet durch Moderator
von H. H. (hhinz)


Lesenswert?

Lothar M. schrieb:
> Andy W. schrieb:
>> Muss an den Kontrastpin evtl. eine andere Spannung angelegt werden,
>> d.h. >5V oder <0V ?
> Die Kontrastspannung ist auf Vcc spezifiziert und kann bei alten
> Displays locker mal -7V und bei Weittemperaturdisplays bis zu -9V
> betragen.
>
> Dazu 5V Versorgungsspannung dazuaddiert ergibt -2V..-4V gegen GND.

Der HD44780 verträgt sogar -13V gegen Vcc.

von Michael B. (laberkopp)


Lesenswert?

Andy W. schrieb:
> ABER: Bei 0x38 bleibt das Display komlett leer, das ist mein Problem!

Aha, also nimmt er das Kommando nicht an, 4-bit mode ?

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.