Forum: Projekte & Code Standard LCD über nur 3 Drähte


von Peter D. (peda)


Angehängte Dateien:

Lesenswert?

Für die LCD-Ansteuerung werden normaler Weise 11 Signale benötigt.

Mit einem billigen 74HC164 kann man das auf nur 3 Drähte reduzieren.
Damit ist es leicht, einen AT89C4051 oder auch ATTINY12 zur Ansteuerung 
zu nehmen.

Anbei ein Beispiel für eine Uhr mit Datum für ein 2 * 16 Zeichen 
Display.

Das Testen des Busy-Signals kann man einsparen, wenn man nach jedem Byte 
die maximale Wartezeit abwartet. Die dadurch höhrere Abarbeitungszeit 
ist vernachlässigbar (32 Zeichen * 46us = 1,5ms).
Da ja ein Display auch abgelesen werden muß, sollten Texte je nach Länge 
auch mindestens 200ms ... 2s stehen bleiben.


Die Datenleitungen des Displays habe ich in der fürs Layout günstigsten 
Weise mit dem 74HCT164 verbunden. Die Software sorgt dann einfach mit 
einer Tabelle dafür, daß die Bits auch richtig sortiert am Display 
anliegen.

Bei den meisten Projekten verfahre ich in dieser Weise, d.h. zuerst wird 
das Layout angefertigt und dann in der Software die richtige Zuordnung 
definiert.
Das kann leicht den Unterschied zwischen einem 2- und 4-Ebenen-Layout 
bedeuten, d.h. eine erhebliche Kosteneinsparung in der Produktion 
bewirken. Der zusätzliche Softwareaufwand ist dagegen vernachlässigbar.


Die Initialisierungsroutine habe ich dem HD44780 Datenblatt entnommen 
und funktionierte auf Anhieb.

Die Beleuchtungs-LED habe ich über 39 Ohm mit 5V verbunden, das ergibt 
etwa 30mA Stromverbrauch. Das muß man aber je nach Display ausprobieren.



Peter

von Andreas Vogel (Gast)


Lesenswert?

Hallo !
Es geht auch einfacher (im Layout) ->
Man nehme einen 574 und verbinde IN 1 mit Out 0, In 2 mit Out 1.... In7 
mit Out 6.
Die Datenleitungen kommen an Out 0..7, In 0 ist der serielle 
Dateneingang, Clk ist Clock.
Zusätzlich werden noch LCD_Enable, LCD_C/D sowie Vcc und GND benötigt. 
(Lesen des Displays leider ausgeschlossen)

Das Layout ist trivial, da sich In und Out jeweils gegenüberliegen !

von Markus Burrer (Gast)


Lesenswert?

Es geht noch einfacher. Man nehme ein Display mit einem KS0073 
Controller, z.B. die DIP Module. Die kann man in einen seriellen Modus 
schalten. Dann kann man das Display direkt an die SPI Schnittstelle 
hängen

von Peter D. (peda)


Lesenswert?

Hallo Markus,

wo kriegt man die denn her (z.B. als 2*16 oder 2*20) und was kosten die 
im Vergleich zu den HD44780 kompatiblen ?

So ein 74HC164 kostet ja nur wenige Cent.


Peter

von Markus Burrer (Gast)


Lesenswert?

Zugegeben, die sind etwas teurer als normale, haben aber auch de 
deutlich kompaktere Bauform bei fast gleicher Anzeigefläche. Geben tuts 
die bei Reichelt in 1x8, 2x16 und 4x20 und als Grafik mit 122x32 Pixeln. 
Das 4x20 heißt glaub ich DIP204 und kostet 31 Euro
Oder kuckst du hier:
http://www.lcd-module.de/deu/doma/doma.htm
Einziger Nachteil ist vielleicht die Anschlußleiste im 2mm Raster, aber 
sonst sind die genial. Die Adressierung der Zeichen unterscheidet sich 
etwas. Wärend die bei HD44780 etwas durcheinander ist hat man hier eine 
lineare Adressierung. Das vereinfacht die Ansteuerung etwas.
Übrigens, die Bezeichnung 100% HD44780 kompatibel muß nicht immer 
heißen, das es auch wirklich 100% sind. Gerade die KSxxx machen das 
immer wieder deutlich

Markus

von Peter D. (peda)


Lesenswert?

Danke,

wenn ich das jetzt richtig sehe, ist leider nur das 4*20 seriell, alle 
anderen aber nicht.


Lustig ist die Formulierung "nahezu 100% kompatibel".
Also sinds doch nicht 100% sondern nur 99% oder so.


Peter

von Markus Burrer (Gast)


Lesenswert?

Muß gestehen das ich mir nur das 4x20 angeschaut habe. Bin davon 
ausgegangen, das alle mit dem gleichen Controller arbeiten. Die "nahezu 
100%" liegen zum Teil an der besagten abweichenden Adressierung. Der 
Befehlssatz ist, soweit ich das gesehen hab, identisch, aber erweitert. 
Der Zeichensatz stimmt auch nicht 100% überein
Es gibt also schon einige Unterschiede. Trotzdem finde ich es vor allem 
wegen seinen Abmessungen ziemlich genial

Und nochwas: Wenn man ein Display portsparend anschließen will gibt es 
noch eine Möglichkeit. Der AVRco hat eine Lib mit der man bis zu 8 
Displays am I2C Bus betreiben kann. Hierzu benötigt man den PCA9555. Ist 
zwar teurer als ein 74HCxxx, aber man kann halt an 2 Portpins bis zu 8 
(identische) Displays betreiben. Und man kann den I2C Bus natürlich noch 
weiter verwenden. Besser gehts eigentlich nicht.

Markus

von Andreas (Gast)


Lesenswert?

Hallo!

Was müsste man ändern, damit ich das HD44780 LCD über einen 74HC595
ansteuern kann? Natürlich auch mit möglichst wenigen I/O Pins. Weil ja
bei einem normalen Schieberegister (74HC164) die Daten durchgeschoben
werden und erst nach 8 clocks am richtigen pin anliegen. Sehe ich das
richtig?

Hat jemand eine Idee/C-Code für mich wie ich das am besten machen
kann?

Danke!

von Peter D. (peda)


Lesenswert?

Das Latch im 595 bringt hierbei nichts.

Du kannst z.B. den Latch-Clock mit dem Schiebe-Clock verbinden und dann
immer 9 Pulse reinschieben. Mit dem 9. Puls übernimmt dann das Latch
die vorherigen 8 Bits.


Peter

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?


von Peter D. (peda)


Lesenswert?

@Andreas,

solange E=0 ist, ist es dem HD44780 völlig wurscht, was an den
Datenpins anliegt.
Ob 164 oder 595 ist daher egal.
Aber der 595 braucht noch einen Impuls extra, um die Daten zu latchen.


Peter

von andreas k (Gast)


Lesenswert?

@Peter,

Danke, jetzt ist es mir klar! Da ich aber einen Seriell-Parallelwandler
mit Latch für andere Zwecke noch brauche werde ich es mit dem Verbinden
von Latch-clock und Schiebe-clock versuchen.

von Dominik S. Herwald (Gast)


Lesenswert?

Am besten finde ich persöhnlich Lösungen über dem I2C Bus. Das braucht
auch nur zwei Pins und hat den Vorteil, dass man mit diesem Bus ja dann
nicht nur dass Display ansteuern kann sondern noch massig andere
Hardware... Spart dann ne menge Pins wenn man sowieso I2C einsetzt.
Falls man dass nicht tut - OK, dann lohnt sich vielleicht doch eher nen
Schieberegister.

Für die Ansteuerung im 4Bit Modus reicht jedenfalls ein PCF8574 8Bit
Portexpander.

MfG,
Dominik S. Herwald

http://www.dsh-elektronik.de/

von Peter D. (peda)


Lesenswert?

@Dominik,

Z.B. Segor:

74HC164: 0,45€
74HC595: 0,60€
PCF8574: 3,30€ !

Wenn man da also noch weitere Aus- oder Eingänge ranpappen will, gehts
mit dem PCF8574 ganz schön ins Geld.


Peter

von Dominik S. Herwald (Gast)


Lesenswert?

PCF8574 Kessler: 2,44 Euro

Sicher ist der teurer als ein Schiberegister aber wenn man sowieso nen
I2C Bus verwendet und einen µC wie einen PIC12xxx oder die
entsprechenden Atmel versionen (haben ja nur 6 I/Os) ist es damit dann
wohl die bessere Lösung.

MfG,
DSH

von Steffen (Gast)


Lesenswert?

Wenn ich die Preise für die I²C Portexpander sehe, dann nehme ich aber
lieber einen zweiten Controller, den ich dann (auch mehrere) über nur
einen I/O-pin ansteuern kann. Der PIC16F628A kostet mich z.B. aktuell
1,40€ (bei Reichelt bestimmt das doppelte). Da sehe ich keinen Grund
einen teueren I²C Expander zu verwenden.

Das Projekt mit dem Nokia 3310 LCD-Display (siehe Codesammlung) wollte
ich eigentlich auch erst mit einem einfachen 4x16 Display und zwei
PCF8574 aufbauen aber wo ich dann den Preis gesehen hab ... nein
danke.

Komischerweise ist der Preis für einen recht leistungsfähigen MC
wesentlich geringer als so ein einfaches Peripherie-Bausteinchen. Da
ist es manchmal sinvoller lieber noch einen zweiten, dritten oder gar
vierten MC mit auf die Platine zu packen.

Steffen

von Dominik S. Herwald (Gast)


Lesenswert?

@Steffen:

OK. So kann mans natürlich auch machen. Dann kann man die komplette
Ansteuerung des Displays auch gleich nem eigenen Controller überlassen
- so mach ich dass bei größeren Sachen ja auch.
Aber evtl. hat man ja noch nen paar PCFs als Samples rumliegen und von
daher ;)

Zum Preis: Naja kommt eben auf die Stückzahl und die Produktionskosten
an. Stell dir mal vor, die Preise würden sich nach der
Leisungsfähigkeit richten :)
Nen PCF8574 würde dann 10 Cent kosten, aber nen Pentium 4
10000 Euro... ;)

MfG,
DSH

von Gerhard (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

habe im Anhang eine serielle LCD Ansteuerung fuer HD44780 die mit zwei
HC164 arbeitet. (CLK, DATA, und E)

Gruss,
Gerhard

von Carsten (Gast)


Lesenswert?

@Markus...
Hallo, ich hab auch besagtes 4x20 Display, bisher aber mit 4 Bit
Ansteuerung.
Hast Du vielleicht ein Programmbeispiel mit SPI-Ansteuerung ?

@Steffen...
wo bekommt man eigentlich ein 3310-Display her ?

von Uqzze (Gast)


Lesenswert?

Eine Frage, kann man alle PINs des LCD-Controllers an den 
Schieberegister anschließen?
EN, RS, R/W und 4 Datapins (4-Bit mode) alle an Ausgang des 74HC595.
Geht das?

von Peter D. (peda)


Lesenswert?

Uqzze wrote:
> Eine Frage, kann man alle PINs des LCD-Controllers an den
> Schieberegister anschließen?
> EN, RS, R/W und 4 Datapins (4-Bit mode) alle an Ausgang des 74HC595.
> Geht das?

Ja.

Bloß es macht keinen Sinn, man braucht trotzdem 3 Drähte und die 
Software wird umständlicher.


Peter

von Uqzze (Gast)


Lesenswert?

Ja, also eine Data-Out-Pin, Clock-Pin und ein 
Schieberegister-Ausgabepin, stimmt?

Wenn man aber es über SPI betreibt, dann braucht man nur einen einzigen 
extra Pin!

von Peter D. (peda)


Lesenswert?

Uqzze wrote:
> Ja, also eine Data-Out-Pin, Clock-Pin und ein
> Schieberegister-Ausgabepin, stimmt?
>
> Wenn man aber es über SPI betreibt, dann braucht man nur einen einzigen
> extra Pin!

Genau, wie mit dem 74HC164 im 8Bit-Modus.

Ob Du nun den RCK des 595 latcht oder gleich den E-Pin pulst, beides 
braucht nur einen extra Pin.


Peter

von Ingo S. (ingo-s)


Lesenswert?

Hi,

es geht sogar mit nur 2 Signalleitungen mittels CD4013 + CD4015
1 FF + CD4015 als 9bit SR für R/W + 8 Databits und das restliche FF
für den Enable Input. Der Trick besteht im Ablauf von Clock und Data
ähnlich I2C.
Realisiert ca. 1998, wobei noch 3 Tasten eine Analogspannung auf die 
Datenleitung für die Bedienung aufgeprägt haben. War die ansteckbare 
Bedieneinheit eines Elektroflug Datenloggers mit ST6220.

Umsetzung auf Atmel steht demnächst an.

Gruss
Ingo

von Ingo S. (ingo-s)


Angehängte Dateien:

Lesenswert?

habe als Nachschlag noch den Schaltplan der alten 2wire LCD Lösung von 
1998 eingescannt.

Mit heutigen Mitteln würde ich wohl eher zu einem kleinem Attiny(24) 
greifen. Als Schnittstelle kann man dann I2C, seriell oder was eigenes 
realisieren.

Gruss
Ingo

von Peter D. (peda)


Lesenswert?

Ingo Stahl wrote:
> Mit heutigen Mitteln würde ich wohl eher zu einem kleinem Attiny(24)
> greifen. Als Schnittstelle kann man dann I2C, seriell oder was eigenes
> realisieren.

Ja.
Z.B. mit ATTiny25, dann reicht ein Draht:

Beitrag "LCD über nur einen IO-Pin ansteuern"


Peter

von Volker (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Ja.
> Z.B. mit ATTiny25, dann reicht ein Draht:
>
> Beitrag "LCD über nur einen IO-Pin ansteuern"

Es geht hier doch nur ums Geldsparen gegenüber einem seriellen Display, 
oder? ;-) Also ein paralleles LCD-Modul für rund 5 Euro mit einem 8-Pin 
ATtiny als seriellem Controller statt einem seriellen LCD-Modul für rund 
15 Euro.

Das bedeutet aber, dass man zwei MCs in seiner Schaltung braucht. Das 
ist deutlich teurer, als wenn ich gleich einen etwas größeren MC nehme 
(z.B. ATtiny 2313 oder ATmega 8 - beide kaum über 2 Euro). Die haben 
genug Leitungen für die direkte Ansteuerung des Parallel-Displays und 
gleichzeitig noch viele weitere Ports für andere Aufgaben übrig. 
Außerdem ist das Layout platzsparender, als wenn ich zwei Controller 
einsetze.

Der Sinn dieser Lösung erschließt sich mir deshalb nicht so ganz...

Gruß, Volker

von Peter D. (peda)


Lesenswert?

Volker schrieb:
> Es geht hier doch nur ums Geldsparen

Nö. Die reinen Materialkosten haben nur bei riesen Stückzahlen eine 
Bedeutung.

Es geht darum, Verdrahtungs- und Layoutaufwand zu sparen, wenn man mal 
schnell ne Testschaltung aufbauen will.
Oder wenn die Leitung zum LCD etwas länger ist.
Oder wenn man nur zeitweise ein LCD braucht zu Testausgaben.

Man kann sich natürlich auch ein universelles Modul bauen mit ATtiny, 
LCD und 3-poligem Steckanschluß.


Peter

von Sunny (Gast)


Lesenswert?

Ich habe sowas änliches versucht mit dem 74hc595, aber es geht nur wenn 
der EN pin direkt am Mikro angesclossen ist und nicht am 74hc595.
Was ist der Trick?

von Info (Gast)


Lesenswert?

Hier mal der "Schaltplan" aus Peters Code mit Leerzeichen eingerückt:
1
/* connections:
2
89C2051     74HCT164    LCD
3
----------------------------------------
4
P1.5        8
5
P1.6                    E
6
P1.7        1, 2        RS
7
VCC         9, 14       VDD
8
GND         7           VSS, R/W
9
            3           D1
10
            4           D3
11
            5           D5
12
            6           D7
13
            10          D6
14
            11          D4
15
            12          D2
16
            13          D0
17
*/

: Bearbeitet durch Admin
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.