PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Grundsatzfragen zum LCD



Goblin
02.02.2006, 08:54
Moin..

Mir ist gerade ein Datenblatt von einem 16x2 Character-LCD in die Hände gefallen. So ein Standartteil halt. Und da hab ich mir ein paar Fragen übers Pinning gestellt: Es ist ja so dass die Zeichen einen 8-Bit-Code haben. Aber man kann das Display ja auch im 4-Bit-Modus ansteuern. Wie werden dann die zweiten 4 Bit übertragen? Hat Register Select damit was zu tun? Oder bestimmt der nur, wohin das Zeichen geschrieben wird? Dann gibts ja noch Enable, aber ich glaub das ist nur dazu da dass das Display nicht immer die Lauscher aufsperrt sondern nur wenns Daten gibt. R/W ist klar. Es ist jetzt halt nicht so dass ich Probleme mit meinem LCD hab, funktioniert bestens. Nur ich würds eben gerne genauer wissen. :)

Ach und kann es sein dass die Schwarz auf Grün-Displays schneller sind als die Weiss auf Blau (vom "Bildaufbau" her?)

argentan
02.02.2006, 09:40
Moin!

Ob das Display auch im 4 Bit Modus funktioniert hängt vom Kontroller ab.
Im 4 Bit Modus werden zweimal 4 Bit gesendet, statt einmal 8 Bit.
Also erst die Bits 7-4 an die LCD-Datenleitungen 7-4 anlegen, mit Enable einlesen. Enable zurücksetzen, Bits 3-0 an die LCD-Datenleitungen 7-4, Enable setzen, Enable zurücksetzen. Usw.
Das RS Bit ist bei den Standardcontrollern dazu da, um festzulegen ob der Inhalt des Datenspeichers (die Zeichen, die auf dem Display dargestellt werden) angesprochen werden soll, oder eine Controllerfunktion (Cursor an/aus, Cursor an Position setzen, Display an/aus usw.).

Argentan

steveLB
02.02.2006, 13:10
die schnelligkeit häng soweit ich weiß nur von der taktung, also wie schnell oder oft du dein befehl zum lcd schickst.
vom aufabu sind beide LCD´s gleich , ist nur ne andere folie dahinter bzw andere farbe für die hintergrundbeleuchtung.
außerdem dürfte auch kein unterschied da sein, da du bei beiden displays auch die selben warteschleifen und initialisierungen hast

edit : noch was zu R/W, den pin brauchst eigentlich auch nicht, wenn du etwas auf die zeiten achtest.

somit reichen 4 (daten) + 1 (Enable) + 1 (RS) = 6 Pins

SprinterSB
02.02.2006, 14:41
Bei HD44780-kompatiblen ö.ä. wird nach dem Reset ein Kommando geschickt, das die Breite der Schnittstelle festlegt (4 oder 8 Bit). Die Reaktionszeiten der LCDs sind teilweise recht hoch (also nicht die des LCD-Controllers) und deutlich höhrer als z.B. bei VFDs.

darwin.nuernberg
02.02.2006, 16:05
Man braucht sich deswegen eigentlich nicht groß den Kopf zerberechen.
Wenn das LCD den 4-Bit Modus erlaubt und Deine Programmiersprache (z.B. Bascom) entsprechend initialisiert, ist alles andere nur noch ein "Kinderspiel".
Wenn es nicht klappt, hat man entweder was falsch angeschlossen, oder das LCD unterstützt den 4-Bit Mode nicht.

Übrigens die nicht benutzen Dateineingänge sollte auf HI (über 10k gelegt werden) offen lassen ist nicht sehr elegant.

H.A.R.R.Y.
02.02.2006, 17:06
Bitte such im Netz mal nach dem Datenblatt vom HD44780 o.ä. da sind die Timings und Transfermodi genau beschrieben.

Nr.1: Das Tempo des Bildaufbaus hängt vom eigentlichen LCD ab, aber auch vom Takt des Contollerchips.

Nr.2: Der 4-Bitmodus ist im Datenblatt erwähnt und funktioniert normalerweise auch, aber der eigentliche Transfer dauert nun doppelt so lange und das kann manchmal sichtbar werden.

Nr.3: Der Vorteil vom 4-bit-Modus ist, das er nur 7 Signale braucht, sonst sind 11 fällig.

Nr. 4: Der Nachteil vom 4-bit-Modus ist, das er nach einem Display-Reset erst aktiviert werden muß. Das Display hat keinen Reset-Anschluß, der steuernde µC üblicherweise keine Ahnung ob das Display vorher schonmal initialisiert war (Reset-Taste oder kurzer Vcc-Einbruch, von dem das Display nix mitbekommen hat). Da hängt sich die Sache dann meist auf, weil der µC den einen Befehl schickt (guck im Datenblatt, wieso), der auf 4-bit umschalten soll, das Display aber noch auf 4-bit eingestellt ist und die zweite Hälfte des Transfers erwartet. Den nächsten Befehl schickt der µC also in zwei Hälften, von denen das Display nun aber die erste Hälfte als Abschluß des vorherigen Transfers ansieht...
Das läßt sich mit einer komplexeren Init-Sequenz aber beheben (das Display ist dabei für den 4-Bit-Modus angeschlossen und der Ablauf recht trickreich, aber es funktioniert in der Praxis 100% zuverlässig!):
a) Display für 8-bit konfigurieren (einmal 4bit senden -> siehe Datenblatt!)
b) Maximalzeit plus 10% Zuschlag abwarten (NICHT das busy-flag lesen!)
c) Display für 8-bit konfigurieren (einmal 4bit senden -> siehe Datenblatt!)
d) Maximalzeit plus 10% Zuschlag abwarten (NICHT das busy-flag lesen!)
e) Display für 8-bit konfigurieren (einmal 4bit senden -> siehe Datenblatt!)
f) Maximalzeit plus 10% Zuschlag abwarten (NICHT das busy-flag lesen!)
g) Display für 4-bit konfigurieren (einmal 4bit senden -> siehe Datenblatt!)
h) Maximalzeit plus 10% Zuschlag abwarten (NICHT das busy-flag lesen!)
i) jetzt ist das Display garantiert im 4bit-Modus und wartet auf die erste Hälfte eines Transfers!

Eventuell kann Schritt h) entfallen, aber ohne habe ich es noch nie probiert. Wichtig ist , das bei jedem dieser Transfers (a, c, e, g) nur 4 bit transferiert werden und danach NICHT das Busy-flag des LCD gelesen wird. Die vier unbenutzten Anschlüsse (D3 bis D0) sind für dieses spezielle Kommando nicht relevant und damit sieht das Display tatsächlich erstmal anständige 8-bit-Transfers. Die beschriebene Init-Sequenz "holt" das Display auch bei einem RESET des steuernden µC zwischen zwei halben Transfers garantiert zurück auf Anfang!!

Wer meint, ich spinne, kann es ja mal selbst ausprobieren. Zumindest spart diese SW-Lösung den extra Transistor samt Portpin um das LCD gewollt "vom Netz" zu nehmen.

Vitis
02.02.2006, 17:09
Salut Darwin,

d0 - d3 auf 1 kommt nicht unbedingt hin.
ich verwende n hd44780 "kompatibles" das
die auf 0 haben will

darwin.nuernberg
02.02.2006, 17:15
@H.A.R.R.Y.
Deine Signatur enthält:

a) Es gibt keine dummen Fragen, nur dumme Antworten
b) Fehler macht man um aus ihnen zu lernen
c) Jeder IO-Port kennt drei mögliche Zustände: Input, Output, Kaputt


Seit wann sind Input und Output Zustände?

High, Low evtl. auch Tristate und meinetwegen auch KaPut :-b

H.A.R.R.Y.
02.02.2006, 17:17
Nachtrag:
nach Schritt i) den Transfer für 4-bit-Modus nochmal ausführen, jetzt aber auch die vorher "festgeklemmten" Bits D3 bis D0 sauber hinterherschicken. Damit kannst Du das LCD komplett per Software initialisieren und entweder D3 bis D0 offen lassen oder auf Vcc oder auf Gnd legen:
also:
j) Display für 4-bit konfigurieren (bits 7 bis 4)
k) Display für 4-bit konfigureiren (bits 3 bis 0)
l) auf BUSY-Flags warten (oder die Timeout-Methode)
alles weitere (Init und Datentransfer) läuft im 4-bit-Modus ab.

Hoffe das hilft Dir und all den anderen 4-Bit-Modus-Probleme-habende!

H.A.R.R.Y.
02.02.2006, 17:19
Seit wann sind Input und Output Zustände?

Na da frag mal den nächsten µC: Für den sind die Datenrichtungen auch Zustände (Input = tristate, Output=low impedance), oder?

Goblin
02.02.2006, 19:20
Danke für eure Erklärungen. Ich will nur nochmal betonen: Es handelt sich hier nicht um ein Problem sondern um die Schließung einer Wissenslücke meinerseits! :) Und dass ist imho geschehen!

darwin.nuernberg
02.02.2006, 21:12
Seit wann sind Input und Output Zustände?

Na da frag mal den nächsten µC: Für den sind die Datenrichtungen auch Zustände (Input = tristate, Output=low impedance), oder?

Tristate = 3. Zustand eigentlich nur für Output bestimmer Bausteine/Gatter (OE oder Output Enable)

Der Port verhält sich so als ob er nicht beschaltet wäre (sehr hochohming) um so Signale von anderen Quelle möglicht nicht zu beeinflussen.
Früher hat man schon mal ein Gatter durch zwei oder mehre Ausgänge angesteuert, blos wenn der eine einen definierten Pgenl hat (z.B. LOW) und der andere will ein HI abgeben, dann kommt da nicht mehr viel beim Empfänger an, also hat man einen Tristate erfunden um den einen Baustein sozusagen inaktiv zu machen.z.B. wenn zwei TTL oder CMOS -Gatter an einen dritten baustein angeschlossen werden sollen.

Natürlich sollte ein Input eine gewisse hochohmigkeit besitzen (sonst könnten die Endstufen /Treiber der Vorstufe zu stark belastet/geschädigt werden)
aber der Tristate ist/sollte eben noch ein gutes Stück hochohmiger sein. Die Annahme das Input = Tristate ist, finde ich schlichtweg FALSCH.

Bei Output gebe ich Dir Recht, der sollte eine möglichst niederohmige Impedanz haben um möglicht viel Stom liefern zu können,
was aber auch nicht der Fall ist (Fan-Out), sonst würde der Chip bei einem klassischen GND am Port (un einer idealen Stromquelle) schnell zum leuchten oder Indianner-Spielen anfangen.

{Indianer-Spielen = Nachrichten via Rauchzeichen versenden}

Ganz davon abgesehen, in der Digitaltechnik gibt es nur zwei Zustände:
Hi/Low oder An/Aus oder 0/1 alles andere dazwischen ist nicht erlaubt oder wird je nach Bauchtein entstprechend interpretiert.

Wenn ich mich recht erinnere gibt es zwar Bestrebungen mit mehren Zuständen zu arbeiten, aber in dieser unser Digitaltechnik gibt es nur binare Zustände basta. Und Dein dritter Zustand KaPut definiert werder Hi noch Low und auch nicht die Richtung In oder Out, sondern defniniert lediglich das 100% versagen der Funktion.


Was man alles aus so einer lapidaten Anmerkung machen kann
Nix für ungut. ;-)

darwin.nuernberg
02.02.2006, 21:16
Salut Darwin,

d0 - d3 auf 1 kommt nicht unbedingt hin.
ich verwende n hd44780 "kompatibles" das
die auf 0 haben will

Tja, Außnahmen bestätigen die Regel.
Und in der Regel hatten die Wickinger rote Bärte.

Im Zweifen essen Sie die Packungsbeilage (Datenblatt)
und erschlagen Sie Ärzte und Apotheker.