Forum: Mikrocontroller und Digitale Elektronik 16x2 Display Datenleitungen


von power (Gast)


Lesenswert?

Muss man den GPIO des µC für die 4 (8) Datenbits eines hd44789 Displays 
auf Ausgang stellen, verstehe ich das richtig?

Also kann ich Pins benutzen die NUR Ausgang können?

von Wolfgang (Gast)


Lesenswert?

power schrieb:
> Also kann ich Pins benutzen die NUR Ausgang können?

Das kommt drauf an, ob du irgendetwas über den Bus vom Display lesen 
möchtest. Nötig ist das nicht unbedingt.

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Meinst Du wirklich, man sollte das Display ohne Lesen des Busy-Flags mit 
geratenen Delay-Zeiten ansteuern?

OK. Nötig ist das nicht unbedingt. Stimmt.

von Wolfgang (Gast)


Lesenswert?

Torsten C. schrieb:
> Meinst Du wirklich, man sollte das Display ohne Lesen des Busy-Flags mit
> geratenen Delay-Zeiten ansteuern?

Wozu gibt es Datenblätter? Und es zwingt einen keiner, da an 
irgendwelche Limits zu gehen. So schnell kann das sowieso niemand 
ablesen.
Tausende von Anwendungen nutzen die Displays mit fest verdrahtetem 
R/!W-Pin.

von power (Gast)


Lesenswert?

Ich rede von den Datenleitungen. Nicht R/W.

von Wolfgang (Gast)


Lesenswert?

power schrieb:
> Ich rede von den Datenleitungen. Nicht R/W.

Ohne passenden Pegel auf der R/!W-Leitung kann man über die 
Datenleitungen versuchen zu lesen, wie man will. Das nützt einem 
herzlich wenig, weil das Display die Leitungen nicht auf Ausgang 
schaltet.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

power schrieb:
> Ich rede von den Datenleitungen. Nicht R/W.

 Wolfgang auch.
 Solange du nur schreiben willst ist es OK.

von power (Gast)


Lesenswert?

Achso, und welche pins vom Display reicht es NUR auf Ausgangspins des uC 
zu legen?
Habe nämmlich nicht genug pins die Ausgang und Eingang können, dafür 
aber handvoll die Nur Ausgang können.

von Stephan H. (stephan-)


Lesenswert?

Du hast genug Pins. Solange Du das Display nicht ansprichst kannst Du 
die Leitungen auch für andere Dinge benutzen. Was auf den Leitungen los 
ist, interessiert das Display nicht, solange es nicht adressiert wird.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

power schrieb:
> Achso, und welche pins vom Display reicht es NUR auf Ausgangspins des uC
> zu legen?

E, R/W und RS sind in jedem Fall nur Ausgänge vom MC zum Display. Wie 
oben schon geschrieben, kann man aber auf das Lesen des Displays auch 
komplett verzichten und auch die Datenleitungen nur als Ausgänge 
benutzen.
Allerdings muss man dann das Timing des relativ langsamen HD44780 
berücksichtigen, um den Contoller nicht zu überfahren.

von Ingo L. (corrtexx)


Lesenswert?

power schrieb:
> Habe nämmlich nicht genug pins die Ausgang und Eingang können
Darf man mal fragen welchen Controller du verwendest der das nicht kann?

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

power schrieb:
> Achso, und welche pins vom Display reicht es NUR auf Ausgangspins des uC
> zu legen?

 Alle.

> Habe nämmlich nicht genug pins die Ausgang und Eingang können, dafür
> aber handvoll die Nur Ausgang können.

 Nur Enable muss für Display reserviert werden.
 Die anderen Pins können in der Zwischenzeit auch andere Sachen
 machen :-)

von Wolfgang (Gast)


Lesenswert?

Matthias S. schrieb:
> E, R/W und RS sind in jedem Fall nur Ausgänge vom MC zum Display.

R/!W ist ein Eingang vom Display. Wenn man nur schreibend auf das 
Display zugreifen möchte, ist es sinnlos, den Pin an einen Ausgang vom 
µC zu hängen. So schwer ist das doch nicht.

von power (Gast)


Lesenswert?

Ingo L. schrieb:
> Darf man mal fragen welchen Controller du verwendest der das nicht kann?

Pins an dennen LEDs dran sind, die kann ich nur auf Ausgang schalten

Also reicht es wenn ich die Datenleitungen und R/W am µC auf 
Ein-/Ausgang schalte.

E und RS auf nur Ausgänge des µC.

Damit ist dann gewährleistet das ich lesen und schrieben kann, verstehe 
ich das nun richtig?



Datenleitungen,R/W auf Ausgang/Eingang vom µC.
E, RS Ausgang.

von Alice (Gast)


Lesenswert?

Wenn du nur schreiben willst (RW auf Masse), brauchst du minimal RS, E 
und vier Datenpins, also minimal 6 Stück. Wenn du 6 frei hast, geht es 
also.

von power (Gast)


Lesenswert?

Nein ich will ja auch lesen. und benutze 4-bit modus, also andere 4 
Datenleitungen auf masse.

von spess53 (Gast)


Lesenswert?

Hi

>Nein ich will ja auch lesen.

Was willst du lesen?

>und benutze 4-bit modus, also andere 4 Datenleitungen auf masse.

Nicht auf Masse, sondern freilassen. Die Datenpins vom Display haben 
integrierte Pull-Up-Widerstände. Da ist Masse kontraproduktiv.

MfG Spess

von power (Gast)


Lesenswert?

spess53 schrieb:
> Nicht auf Masse, sondern freilassen. Die Datenpins vom Display haben
> integrierte Pull-Up-Widerstände. Da ist Masse kontraproduktiv.

Aber noch mal die Fragen für die anderen Pins, das verstehe ich nicht 
müssen die nun an Pins vom Mikrocontroller die Ein und Ausgang können? 
Also alle RS, R/W, E, 4xDaten.

von MaWin (Gast)


Lesenswert?

Wolfgang schrieb:

> Wozu gibt es Datenblätter? Und es zwingt einen keiner, da an
> irgendwelche Limits zu gehen. So schnell kann das sowieso niemand
> ablesen.
> Tausende von Anwendungen nutzen die Displays mit fest verdrahtetem
> R/!W-Pin.

Allerdings gehört das Problem "ich habe ein angeblich HD44780 
kompatibles Display angeschlossen und fertige Software benutzt, trotzdem 
funktioniert es nicht" wohl zu den Top 10 der im Web geschilderten 
Probleme, verursacht durch zu schnelles Beschreiben des Displays das 
langsamer ist als das Hitachi-Original.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

power schrieb:
> Aber noch mal die Fragen für die anderen Pins, das verstehe ich nicht
> müssen die nun an Pins vom Mikrocontroller die Ein und Ausgang können?
> Also alle RS, R/W, E, 4xDaten.
1
                    V  E  R  W  E  N  D  U  N  G
2
           Nur Schreiben   Lesen/Schreiben    Ausschliesslich für LCD
3
 4xDaten:    Ausgang         Ein/Ausgang               NEIN
4
 Enable      Ausgang         Ausgang                    JA
5
 RS          Ausgang         Ausgang                   NEIN
6
 R/W         Ausgang         Ausgang                   NEIN

 P.S.
 Ich habe früher immer die Pins für Tastatur und GLCD zusammen
 benutzt.

von Pandur S. (jetztnicht)


Lesenswert?

Vergiss das Lesen. Das bringt nichts. Das Schreiben macht man 
sinvollerweise eh mit einem Timer-interrupt. Ich schreib jeweils alle 
10ms ein Zeichen raus.
Dann genuegt es, wenn alle Leitungen nur schreiben koennen, also beim 
Controller Ausgang sind.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Angehängte Dateien:

Lesenswert?

Wolfgang schrieb:
> R/!W ist ein Eingang vom Display.

Nö ist es nicht, warum auch? Der MC tut damit dem LCD kund, ob er lesen 
oder schreiben will. Anbei mal die entsprechende Seite aus dem 
Datenblatt.

von Christian M. (Gast)


Lesenswert?

Matthias S. schrieb:
> Wolfgang schrieb:
>> R/!W ist ein Eingang vom Display.
>
> Nö ist es nicht, warum auch? Der MC tut damit dem LCD kund, ob er lesen
> oder schreiben will. Anbei mal die entsprechende Seite aus dem
> Datenblatt.

Ja ich musste es auch zweimal lesen. Aber er meint es schon richtig, 
Eingang am Display. Ausgang am MC!

Gruss Chregu

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Christian M. schrieb:
> Aber er meint es schon richtig,
> Eingang am Display. Ausgang am MC!

Er hatte mir hier widersprochen:

Wolfgang schrieb:
> Matthias S. schrieb:
>> E, R/W und RS sind in jedem Fall nur Ausgänge vom MC zum Display.
>
> R/!W ist ein Eingang vom Display.

Und das ist eben nicht richtig. E, R/W und RS sind in jedem Fall nur 
Ausgänge am MC und Eingänge am LCD - wenn man R/W überhaupt benutzen 
will. Sonst tut mans auf Masse und behält das Timing des LCD Controllers 
im Hinterkopf.

von Jobst M. (jobstens-de)


Lesenswert?

Wolfgang schrieb:
> R/!W ist ein Eingang vom Display.

Matthias S. schrieb:
> [...] R/W [...] sind in jedem Fall nur [...] Eingänge am LCD

Wo ist jetzt genau der Widerspruch, der Dich stört?
Ich sehe keinen Unterschied in den Aussagen.


@TO:

WENN Du wirklich unsinnigerweise vom Display lesen möchtest, dann 
benötigst Du am µC 3 Ausgänge zum Display hin (E, R/W und RS) sowie 4 
Port, welche bidirektional arbeiten für die Daten.

Wenn Du auf lesen vom Display verzichtest, benötigst Du 6 Ausgangsports 
am µC. R/W kann am Display dann direkt auf Masse gelegt werden.

Die unbenutzten 4 Datenleitungen am Display bleiben unbenutzt - also 
offen!



Gruß

Jobst

von power (Gast)


Lesenswert?

Ich will ja nur lesen um zu wissen ob ich das nächste Zeichen senden 
kann. So wie MsWin die problematik geschildert hst will ich das umgehen.

Ich denke es reicht doch auch nur das Busyflag zu lesen also brsuche ich 
nur ein Pin das auf Eingang umgestellt werden kann.

von spess53 (Gast)


Lesenswert?

Hi

>Ich denke es reicht doch auch nur das Busyflag zu lesen also brsuche ich
>nur ein Pin das auf Eingang umgestellt werden kann.

Nein. Wenn du RW auf Lesen (µC) stellst Schalten alle Datenleitungen des 
Displays auf Ausgang. Also musst du auch alle Datenleitungen des µCs auf 
Eingang schalten.

MfG Spess

von Georg (Gast)


Lesenswert?

spess53 schrieb:
> Also musst du auch alle Datenleitungen des µCs auf
> Eingang schalten.

Wenn er wirklich so arm an Pins ist könnte er auf den anderen 3 
Leitungen den Kurzschluss mit Widerständen verhindern, die Eingänge sind 
ja alle hochohmig.

Georg

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

spess53 schrieb:
> Nein. Wenn du RW auf Lesen (µC) stellst Schalten alle Datenleitungen des
> Displays auf Ausgang. Also musst du auch alle Datenleitungen des µCs auf
> Eingang schalten.

 Korrekt.
 Aber normalerweise braucht man doch das ganze überhaupt nicht. Laut
 DaBla sind es etwa 40us pro Befehl, also ist nach max. 80us bei
 jedem LCD jedes Befehl abgearbeitet, ausser CLS und HOME.
 Das sind, für 16x2 LCD zwischen 1,3ms und 2,6ms für 32 Zeichen und
 damit muss man beim schreiben auf LCD ganz einfach rechnen.

 Wenn es schneller gehen soll, nimmt man eben kein LCD...

 Und 50us pro Zeichen nur auf Busy warten und nichts anderes machen
 ist auch nicht gerade die effizienteste Methode, mal abgesehen davon,
 dass das eigene Routinen zum LCD Schreiben voraussetzt, was beim TO
 bestimmt nicht der Fall ist.

von Jobst M. (jobstens-de)


Lesenswert?

power schrieb:
> Ich will ja nur lesen um zu wissen ob ich das nächste Zeichen senden
> kann.

Ja, man kann durch auslesen des Busyflags feststellen, ob das Display 
bereit für den nächsten Befehl/Byte ist. Wirklich brauchen tut man das 
allerdings nicht, wenn man dem Display genug Zeit lässt. Und es benötigt 
Aufwand, Zeit und Ports, die Du nicht hast.

Ich mache es so, dass ich im TimerIRQ z.B. alle 500µs ein Zeichen aus 
dem RAM ausgeben lasse. Anfragen an das Display gibt es nicht. Es hat 
genug Zeit gehabt. Für den Home-Befehl, welcher einmal pro Bildaufbau 
gesendet wird, werden ein paar IRQs ohne Aktion mit dem Display 
getätigt.
Im Hauptprogramm schreibe ich nur noch ins RAM. Dabei entspricht eine 
feste Speicherstelle einer festen Position auf dem Display. Um die 
Displayausgabe kümmere ich mich dann nicht mehr. Und irgendwelche 
Cursorpositionierungsgeschickten entfallen damit auch.

Ein Display mit HD44780 hat maximal 80 Zeichen. Das ist damit in 40ms 
komplett beschrieben. Du kannst damit wie wild Daten aus Deiner SW 
ausgeben, ohne auf Dein Display warten zu müssen.


Gruß

Jobst

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Jobst M. schrieb:
> Für den Home-Befehl, welcher einmal pro Bildaufbau
> gesendet wird, werden ein paar IRQs ohne Aktion mit dem Display
> getätigt.

 Normalerweise braucht man HOME nur mit Cursor. Cursor wiederum braucht
 man nur wenn irgendwelche Eingaben zu machen sind.
 Bei normaler Ausgabe braucht man Cursor und HOME nicht, einfaches
 überschreiben der alten Werte genügt.
 Beim CLS kommt es (zeitlich gesehen) beim direkten senden auf
 dasselbe hinaus - ob man 32 mal SPACE schickt oder 1,3ms nach CLS
 Befehl wartet, ist egal.
 Schreiben ins RAM dagegen ist eine ganz andere Liga bezüglich
 Geschwindigkeit.

> Ich mache es so, dass ich im TimerIRQ z.B. alle 500µs ein Zeichen aus
> dem RAM ausgeben lasse. Anfragen an das Display gibt es nicht. Es hat

 Das ist auch am besten so. Animationen auf Text-LCD macht sowieso
 keiner.

von Jobst M. (jobstens-de)


Lesenswert?

Marc V. schrieb:
> Normalerweise braucht man HOME nur mit Cursor.

Du musst aber schon wissen, wo Du auf Deinem Display schreibst ;-)
Ich bevorzuge es, oben links zu beginnen. Und dafür setze ich den Cursor 
-also die Schreibposition- an diese Stelle. Der sichtbare Cursor ist 
abgeschaltet.


Gruß

Jobst

von Georg (Gast)


Lesenswert?

Marc V. schrieb:
> Animationen auf Text-LCD macht sowieso
>  keiner.

Und man muss auch keinen Messwert 100mal pro Sekunde ausgeben, mehr als 
5 Werte erfasst das menschliche Gehirn garnicht (das ist schon 
optimistisch).

Georg

von Jobst M. (jobstens-de)


Lesenswert?

Georg schrieb:
> Und man muss auch keinen Messwert 100mal pro Sekunde ausgeben

Da wird den Kristallen ja auch schlecht ...


Gruß

Jobst

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Jobst M. schrieb:
> Du musst aber schon wissen, wo Du auf Deinem Display schreibst ;-)

 Dafür gibt es Comand Set DDRAM Address, dauert gerade 40us.
 HOME dagegen dauert zwischen 1,4-4,5ms und wird meistens genutzt, um
 nach der evtl. Displayschieberei (z. B. Korrekturen bei der Eingabe)
 wieder von 1,1 anzufangen.

von Jobst M. (jobstens-de)


Lesenswert?

Marc V. schrieb:
> Jobst M. schrieb:
>> Du musst aber schon wissen, wo Du auf Deinem Display schreibst ;-)
>
>  Dafür gibt es Comand Set DDRAM Address, dauert gerade 40us.
>  HOME dagegen dauert zwischen 1,4-4,5ms und wird meistens genutzt, um
>  nach der evtl. Displayschieberei (z. B. Korrekturen bei der Eingabe)
>  wieder von 1,1 anzufangen.

Ich bevorzuge den kleinen Reset. Kostet mich nichts. Ich warte dadurch 
nicht länger.


Gruß

Jobst

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.