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 ?
Die 4x40 Displays, die ich bisher in der Hand hatte, wollten die 80 Zeichen direkt hintereinander für die beiden Zeilen haben. Meine init: 0x30 0x30 ; 3x natürlich - ich hoffe, dass machst Du auch! 0x30 0x20 ; -> 4Bit (entfällt bei 8 Bit) 0x28 ; 2 Zeilen, 5x7 Pixel (0x38 im 8 Bit Mode) 0x0C ; Display an 0x04 ; Nicht schieben 0x01 ; Tafeldienst Michael B. schrieb: > 4-bit mode ? Ich hatte kurz auch die Idee, dass Leitungen vertauscht sind. Aber beides kann nicht sein, wenn er es schafft Text darzustellen. Andy W. schrieb: > Ich bin jetzt echt ratlos. Habt Ihr noch eine Idee? Ja! Zeig Deinen Code! (Wieso hat noch niemand danach gefragt?) Gruß Jobst
Jobst M. schrieb: > wollten die 80 > Zeichen direkt hintereinander für die beiden Zeilen haben. Deswegen: Daniel S. schrieb: > Was passiert wenn du es einzeilig initialisierst und mehr als 40 Zeichen > schickst? Andy W. schrieb: > 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. Jobst M. schrieb: > Ja! Zeig Deinen Code! > (Wieso hat noch niemand danach gefragt?) Wahrscheinlich weil: Jobst M. schrieb: > er es schafft Text darzustellen.
Andy W. schrieb: > 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. Wie viele Zeichen hast du denn probiert? Ohne Code ist das alles etwas schwammig. Was passiert, wenn du mehr als 64 Zeichen schickst?
Das Problem hatte ich auch schonmal, es waren im Endeffekt nur die Adressen der Zeilen.
Guck doch mal, wie es Arduino macht. Die LiquidCrystalFast Lib kann mit 40 x 4 umgehen. Runterladen und unter die "Haube" gucken ;-) Hab ich selber schon mal genutzt.
Andy W. schrieb: > Ich habe beim Test immer nur einen Enable-Pin angeschlossen. Was hast du eigentlich mit dem anderen Enable Pin gemacht? offen gelassen? Wenn ja, Pins beim LCD nie offen lassen...sprich, wenn ungenutzt dann auf GND oder Vcc legen. Gilt bei 4-Bit betrieb für die anderen vier Bits und natürlich auch für unbenutzte Enable Pins. Ist nach vor der Kontrastthematik Fehlerklassiker Nummer eins bei diesem Thema...
:
Bearbeitet durch User
Rainer W. schrieb: > Wie viele Zeichen hast du denn probiert? Ohne Code ist das alles etwas > schwammig. > Was passiert, wenn du mehr als 64 Zeichen schickst? Ganz genau. Es gibt etliche Displays mit vier Zeilen und zwei Controllern, die aber jeweils im Einzeilen-Modus betrieben werden wollen. Die RAM-Adressen der (physischen) zweiten Zeile beginnen dann oft bei 0x40, also 64 dezimal. Er hat allerdings nach eigener Aussage schon erfolglos versucht, den Cursor dorthin zu setzen. Dann mus man halt etwas kreativ sein. Cursor auf 0 setzen und dann Zeichen rausballern bis zum Wrap-Around, bis also das erste Zeichen im Display überschrieben wird. Dann sollte auch in der zweite Zeile was erschienen sein. Wenn man das Schema der auszugebenden Zeichen sinnvoll wählt, kann man aus der Ausgabe direkt die Adresse der zweiten Zeile ablesen. Spannend wird es, wenn der Wrap-Around zwar erfolgt, die zweite Zeile aber trotzdem leer bleibt. Dann liegt wahrscheinlich der Fall vor, dass die Controller zweizeilig zu initialisieren wären. Das sollte man dann tuen, und erneut die Ausgabe wie oben laufen lassen. Dann halt von beiden Zeilen die Startadressen ablesen, denn die erste beginnt ja dann offensichtlich nicht bei 0. Auch solche Displays gibt's tatsächlich. Allerdings eher nur bei kürzeren Zeilen mit 16 Zeichen oder noch weniger.
Hallo zusammen, das Problem ist gelöst: Das Display braucht am Kontrastpin eine negative Spannung von ca. -1,5V. Es reicht also nicht das Poti zwischen 5V und GND zu hängen, wie bei neueren LCDs. Macht man das trotzdem, bleibt das Display bei korrektem 2-Zeilen-Init leer und man denkt natürlich gleich, daß es irgendwo einen Fehler in der Ansteuerung gibt... DANKE an alle Poster und natürlich speziell an den/die Hinweisgeber bezüglich der Kontrastspannung! MFG Andy
Jobst M. schrieb: > Zeig Deinen Code! > (Wieso hat noch niemand danach gefragt?) Weils ziemlich offensichtlich an der Kontrastspannung lag.
Die Programmfehler-Fraktion war ihrer Sache so sicher, dass meine erste vorsichtige Erwähnung der Kontrastspannung gleich ein Minus kassiert hat - typisch für dieses Forum.
H. H. schrieb: > Jobst M. schrieb: >> Zeig Deinen Code! >> (Wieso hat noch niemand danach gefragt?) > > Weils ziemlich offensichtlich an der Kontrastspannung lag. Also so offensichtlich fand ich das jetzt nicht. Offensichtlich wäre es gewesen, wenn der TO mal ein Foto mit nicht initialisierten Controllern gepostet hätte. Dann wäre die Sache sofort klar gewesen.
Ob S. schrieb: > wenn der TO mal ein Foto mit nicht initialisierten Controllern > gepostet hätte. Den sieht man das auf einem Foto aber nicht an, bleibt eine schwarze Box. Zudem hat er sie ja initialisiert bekommen... Dieter W. schrieb: > gleich ein Minus kassiert hat Warum lässt man sich dadurch so beeinflussen dass es dafür reicht es hier noch mal extra zu thematisieren - ich habe schon Antworten mit 10 x Plus gesehen die sich als völlig falsch herausgestellt haben... Das mit den Bewertungen ist doch völlig überflüssig und ebenfalls hirnrissig und die Beachtung überhaupt nicht wert.
Dieter W. schrieb: > Die Programmfehler-Fraktion war ihrer Sache so sicher, dass meine erste > vorsichtige Erwähnung der Kontrastspannung gleich ein Minus kassiert hat > - typisch für dieses Forum. Du nimmst dir das zu sehr zu Herzen. Ich hab den Eindruck dass es hier einen Bot gibt der allen neuen Posts eine -1 gibt, und wenn es keine Reaktion von echten Menschen gibt bleibt es dabei.
Georg S. schrieb: > Ich hab den Eindruck dass es hier > einen Bot gibt der allen neuen Posts eine -1 gibt, und wenn es keine > Reaktion von echten Menschen gibt bleibt es dabei. Den Eindruck habe ich allerdings auch! Aber es ist eh Schall und Rauch...
Daniel S. schrieb: > ich habe schon Antworten mit 10 x > Plus gesehen die sich als völlig falsch herausgestellt haben. Da steht ja auch "lesenswert?", nicht "richtig?"
Daniel S. schrieb: > Gilt bei 4-Bit betrieb für die anderen vier Bits ... Tut es nicht. Im Datenblatt (Hitachi HD44780) ist angegeben, dass an den DB0..DB7 interne Pull-Ups sitzt. Oder von was für einem Controller sprichst du? > Ist nach vor der Kontrastthematik Fehlerklassiker Nummer eins bei diesem > Thema... Da ist wohl viel Halbwissen unterwegs - RTFM ;-)
:
Bearbeitet durch User
Daniel S. schrieb: > Ob S. schrieb: >> wenn der TO mal ein Foto mit nicht initialisierten Controllern >> gepostet hätte. > > Den sieht man das auf einem Foto aber nicht an, bleibt eine schwarze > Box. Zudem hat er sie ja initialisiert bekommen... Nö. Man hätte dann entweder zwei oder vier Zeilen mit schwarzen Boxen. (Im konkreten Fall natürlich zwei Zeilen) Softwarefehler wären von vornherein ausgeschlossen, da keine Software involviert. Sprich: das "Rätsel" wäre sofort gelöst gewesen.
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.