mikrocontroller.net

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


Autor: Peter Dannegger (peda)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas Vogel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 !

Autor: Markus Burrer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Markus Burrer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Markus Burrer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso bringt das Latch im HC595 nichts?

http://www.mikrocontroller.net/attachment.php/3085...

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: andreas k (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dominik S. Herwald (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dominik S. Herwald (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dominik S. Herwald (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gerhard (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

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

Gruss,
Gerhard

Autor: Carsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Uqzze (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Uqzze (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ingo Stahl (ingo-s)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ingo Stahl (ingo-s)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Volker (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sunny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Info (Gast)
Datum:

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

: Bearbeitet durch Admin

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.