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
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
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
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!
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
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.
Ähh... Ignoriere meinen vorherigen Beitrag, ich glaube ich habe den Eröffnugnsbeitrag falsch verstanden! Kann nur nicht mehr Löschen... Gruß Carsten
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.
Was passiert wenn du es einzeilig initialisierst und mehr als 40 Zeichen schickst? Vielleicht sind es ja zwei einzeilige Displays mit 1x80 Zeichen...
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.
Zwischen einzeilig und zweizeilig muss man bei manchen Displays den Kontrast merklich ändern.
welcher Controller und 4 oder 8Bit Ansteuerung? Da ich aber ein -2 bekommen habe, bin ich raus.
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 ?
Peter L. schrieb: > welcher Controller und 4 oder 8Bit Ansteuerung? Standardcontroller HD44780, 2 Stück. Ist auf dem, nicht so guten Foto, zu erkennen.
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.
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
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.