Forum: Mikrocontroller und Digitale Elektronik LCD mit wenig µC IOs versorgen


von Henrik (Gast)


Lesenswert?

Moin leute!

Ich suche eine Möglichkeit ein 8 Bit parallel LCD mit µC anzusteuern.
Ich habe allerdings keine Lust 8 Datensins + die R/W Bits und so weiter
vom µC zu verschwenden. Gibts da nicht andere Bausteine, die sowas
multiplexen?

Mir fiel spontan ein 74HC164 SIPO Chip ein. Dann bräuchte ich nur 2
statt 8 Pins. Damit kann ich allerdings das Busy Flag nicht auslesen,
da das nur Ausgänge sind.

Oder ein I²C Erweiterungsbaustein. Aber da brauche ich ja auch schon
wieder 3 Pins fürs muxen. Hatte den PCF 8574 gefunden.

Noch andere Ideen?

von Sebastian Eckert (Gast)


Lesenswert?

Also: Erstens gibt es den 4 Bit-Modus, in der einschlägigen
Dokumentation ausreichend besprochen. Kostet natürlich noch immer 7
Leitungen, 4x Daten + 3 Steuersignale.
Zweitens: Die Lösung mit dem 74(HC/LS)164 gibt es tatsächlich, zu
finden in einem Klassiker der Internet-Dokumentation zum Thema:
http://www.mil.ufl.edu/imdl/handouts/lcd-faq.htm
Siehe Punkt 3.5 - Hier wird auch eine Alternativlösung mit HC595
vorgestellt.
Auf das Einlesen des Busy-Flags wird hier verzichtet - wenn man lange
genug wartet, ist das nicht unbedingt erforderlich. Die
Befehlsausführungszeit beträgt im ungünstigsten Fall etwa 41 ms, wenn
ich mich richtig erinnere, für die meisten Befehle weniger. Zugegeben,
in dieser Zeit könnte der Mikrocontroller auch andere Dinge tun. Ich
weiß ja nicht, wie zeitkritisch die Applikation ist.

I²C ist meiner Ansicht nach zuviel Aufwand für diese Aufgabe. Mehr
Overhead als Funktion, außer natürlich wenn man sowieso schon
I²C-Funktionen hat.

von Henrik (Gast)


Lesenswert?

Es gibt auch Displays von Electronic Assembly, die sich über SPI
ansteuern lassen, das wären allerdings 4 Pins vom MC, die du dafür
brauchst.
Dafür ist das SPI-Interface meist schon inder Hardware des MC
vorhanden, also ressourcensparend nutzbar.

Wenn du das Schieberegister oder den PCF verwenden willst, musst du dir
die Lib zum Ansteuern selber schreiben (ich kenne jedenfalls keine
fertige dafür).

Die Idee mit dem PCF5474 halte ich für am geeignesten; da er
quasi-bidirektionale Ausgänge hat, ist das Auslesen auch kein Problem.
Warum aber 3 Pins? Du brauchst doch nur SDA und SCL, da du jedem eine
eigene Adresse geben kannst.

Gruss (ebenfalls) Henrik

von Peter D. (peda)


Lesenswert?

Jau, der 74HC164 ist ideal.

Man braucht allerdings 3 Drähte, 2 für Takt und Daten und den 3. für
das E-Signal, damit das LCD die Daten parallel übernimmt.

Hier ein Beispiel:

http://www.mikrocontroller.net/forum/read-4-22246.html#new


Peter

von grad nicht eingeloggt (Gast)


Lesenswert?

Was spricht gegen den PCF8574?

Bin gerade dabei (beruflich) genau den zwischen µC und LCD
zu pflanzen, um Leitungen zu sparen.

Das bissl I2C "Bitgebange", falls der µC das nicht in Hardware
kann, ist doch lächerlich.

von Peter D. (peda)


Lesenswert?

@grad,

naja, der ist wesentlich teurer als ein SRG und viel langsamer (max
100kHz).
Wenn Du also den E-Pin nicht extra führst, sind da schnell einige 100µs
verbraten für die Ausgabe nur eines Zeichens.


Mit dem SRG kann man dagegen die ~40µs Delay des Displays zum
Einschieben des nächsten Zeichens nutzen. Man ist also genau so
schnell, wie bei paralleler Ansteuerung.


Peter

von Henrik (Gast)


Lesenswert?

Da bin ich wieder. Entschuldigt die späte Antwort.

Den HC164 finde ich auch echt gut. Der PCF ist wirklich teuer. Aber für
ne Kleinserie und Unikat Produktion sicher OK. ;)

Das Ding ist, dass ich echt keine Lust habe 41ms zu warten für die
Ausgabe eines einzelnen Zeichens. Das kann im Extremfall echt lange
dauern. Da kann ich ja am schlimmsten Falle beim Erstellen des Bildes
richtig zugucken. 0_o

Nichtsdestotrotz frage ich mich, wie ich das Busy Flag überhaupt
auslese. Muss ich dazu im Code meinen Ausgang kurz wieder als Eingang
umdrehen? Sobald das Busy Flag dann abgelaufen ist, wieder Ausgang und
Inhalt setzen?!

Und Display über SPI ist eigentlich ne gute Idee. Aber da so ein 8-Bit
Datenbus ja quasi Standard ist und ich nen Großteil der Teile bei
Reichelt beziehen will, ist der 8-Bit Datenbus schon OK. Nur bissel
verschwenderisch halt...

von inoffizieller WM-Rahul (Gast)


Lesenswert?

>Muss ich dazu im Code meinen Ausgang kurz wieder als Eingang
>umdrehen?

Ja.

>Sobald das Busy Flag dann abgelaufen ist, wieder Ausgang und
>Inhalt setzen?!

Das brauchst du erst machen, wenn du neue Daten schreiben willst.

Wie oben schon erwähnt: Man kann die Displays auch hervorragend in
4Bit-Modus betreiben. Dann kommt man mit insgesamt 8 Bit (Daten und
Steuerleitungen) aus.
Da das Display relativ langsam ist, bietet es sich an, die
Kommunikation mit dem Ding an einen Timer zu koppeln.
In der Codesammlung sollten entsprechende Lösungen zu finde sein.

von Egon (Gast)


Lesenswert?

"Das Ding ist, dass ich echt keine Lust habe 41ms zu warten für die
Ausgabe eines einzelnen Zeichens. Das kann im Extremfall echt lange
dauern. Da kann ich ja am schlimmsten Falle beim Erstellen des Bildes
richtig zugucken. 0_o"

Du mußt weder 40ms noch 40µs warten. Die Controller sind etwa so
schnell, wie die Ausgabe eines Zeichens seriell benötigt (Ausgabe per
Software Pinwackeln).
Bei Grafik hält man sich am besten eine Kopie im Prozessor-(nahen)RAM,
macht dort die RMW-Aktionen und gibt nur die geänderten Bytes ans
Display.

von Stephan H. (stephan-)


Lesenswert?

Hallo Leute,

es geht auch mit 2 Leitungen.
http://www.rentron.com/Myke1.htm

Habe ich mal mit Proteus für 8051 simuliert, und es geht wunderbar.
Den Code müßte ich noch haben, falls Bedarf.

So dann

von Peter D. (peda)


Lesenswert?

@Stephan,


"Habe ich mal mit Proteus für 8051 simuliert"

Simulieren kann man vieles, was dann in der Praxis nicht funktiont.


Die 8051 haben nämlich keine sonderlich hohe High-Treiberleistung.
Der 1k wird also den Datenpin als Pull-Down auf Low halten, wenn der
8051 High ausgeben will.


Peter

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.