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?
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?
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.
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
Nur um Missverständnisse auszuschließen, versuche ich nochmal zusammenzufassen, was ich bisher gemacht habe:
Die verwendete Routine zur Initialisierung ist eine bereits funktionierende von einem doppelzeiligen Display (wie von Peter L im Prinzip beschrieben).
Mir ist bewusst, daß ich das 4x40 LCD durch die zwei Enable-Pins wie zwei getrennte 2x40 handeln muss.
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.
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...
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.
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 ?
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.
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?
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.
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...
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.
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!
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.
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.
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.
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.
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...
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...
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.