Forum: Mikrocontroller und Digitale Elektronik LCD mit zwei I/O-Pins ansteuern


von Ulf R. (roolf)


Lesenswert?

Eine kleine Überlegung zur Ansteuerung eines HP44780-LCDs mit nur zwei 
I/O-Pins.

Wir kaskadieren zwei Schieberegister 74HC164. Die Q-Ausgänge werden mit 
den Eingängen des Displays wie folgt verbunden (Tabelle Spalte 1 und 2):
1
Ausgang       Eingang         Übertragung nach
2
Schiebereg.   Display         11   12   13   14 bits
3
----------------------------------------------------------
4
Q0            D4               Y    Z    Z    0
5
Q1 n.c.                        Y    Y    Z    Z
6
Q2            D5               X    Y    Y    Z
7
Q3 n.c.                        X    X    Y    Y
8
Q4            D6               W    X    X    Y
9
Q5 n.c.                        W    W    X    X
10
Q6            D7               R    W    W    X
11
Q7 n.c.                        R    R    W    W
12
Q8            RS               0    R    R    W
13
Q9 n.c.                        0    0    R    R
14
Q10 n.c.                       1    0    0    R
15
Q11           E                0    1    0    0
16
Q12 n.c.                       0    0    1    0
17
Q13                            0    0    0    1

Um die Daten RWXYZ auf die Pins RS, D7, ... D4 zu bringen, übertragen 
wir das Wort 100R RWWX XYYZ Z0.  Was passiert?

Bis zum 11. Bit ist E low und das Display taub.  Beim 12. Bit wird E 
high und die Daten liegen an RS, D7..4 korrekt an.  Beim Bit 13 bleiben 
die Daten an RS und D7..4, aber E wird low - die Daten werden an der 
fallenden Flanke übernommen.

Beim Bit 14 bleibt zunächst E low, sodass weiter nichts übernommen wird. 
Außerdem wird Q13 zum ersten Mal high.  Wir bauen aus einem Transistor 
und einem Pullup einen Inverter und legen das invertierte Signal von Q13 
auf  die Reseteingänge beider Schieberegister: die Register werden 
wieder gelöscht.

Kann so etwas in der Praxis funktionieren?  Es steht und fällt mit der 
Annahme, dass beim Shift von 12 nach 13 die Daten ohne Wackeln anliegen.

von Peter D. (peda)


Lesenswert?

Nimm einen HC164 und zwischen Clock und Datenpin ein RC-Glied.

Wenn der Clock nur einen kurzen low-Puls macht, bleibt der C geladen und 
Du schiebst ne 1 rein.
Macht der Clock einen langen low-Puls, entlädt sich der C und Du 
schiebst ne 0 rein.
Für RS = 0, muß am Ende der Clock noch auf low gehen.
D.h. ein Pin für Clock+Daten+RS und der andere als E.


Peter

von MagIO (Gast)


Lesenswert?


von Ulf R. (roolf)


Lesenswert?

Interessanter Ansatz. Dein Clock-Signal hat stets scharfe Flanken, und 
weil Data ein bisschen verschleift, kann man durch die Länge beide 
Data-Zustände erzeugen. Außerdem erzeugst Du RS außerhalb des 
Schieberegisters und kannst somit im 8bit-Modus bleiben.

Wenn man nun beide Ansätze kombiniert, käme man mit einem Portpin und 
zwei HC164 aus?

Man könnte ja jetzt auch mutig zwei RC-Glieder verschiedener Länge 
basteln, das schnelle für das Data des Schieberegisters und das langsame 
(über einen Transistor als Inverter) für Enable des Displays.  Dann 
hätten wir: ein Schieberegister für 4 Datenbits und RS, und ein 
abschließender besonders langer Low-Impuls auf derselben Leitung 
übernimmt die Daten ins Display.

von Ulf R. (roolf)


Lesenswert?

MagIO schrieb:
> http://www.romanblack.com/shift1.htm

Sehr schöne Beschreibung. Es hätte mich auch gewundert, wenn die Idee, 
zwei RC-Glieder zu verwenden, neu gewesen wäre :-)

von Gast (Gast)


Lesenswert?


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.