Hallo,
ich weiß, Trivialfrage, aber ich möchte für ein PRIVATES kleines µC
Projekt eine simple Anzeige. Mir würde genügen 1 oder 2 Reihen mit etwa
16 ASCII Zeichen.
Bei Conrad findet man solche Displays. Diese haben alle einen 8 Bit
Datenbus, über den das Display programmiert wird.
Mir würde eigentlich besser eine SPI oder I²C Lösung gefallen. Gibt es
sowas, und falls ja, welches Display kann man empfehlen? Bei Conrad sind
teilweise sehr "dünne" Datenblätter dabei, die in mir Zweifel aufkommen
lassen, so ein Display ohne intensive Zusatzrecherche zum Laufen zu
bringen. Mir wäre ein ordentliches Benutzermanual wichtig.
Beispiel:
http://www.produktinfo.conrad.com/datenblaetter/175000-199999/181863-da-01-de-LCD_Modul_EA_DIP204_4NLED.pdf
Ich wüsste nicht, wie ich hier ein konkretes Zeichen schreibe. Ich will
z.B. ein "A" in die erste Reihe, dritte Spalte setzen. Wo lese ich
heraus, wie das geht? Ich kann zwar RAM Adressen setzen und schreiben,
aber wo steht die Antwort, auf meine simple Frage?
Alternative wäre ein 7 Segment Display. Das ist zwar trivial
anzusteuern, ist aber nicht gerade "State of the Art".
Danke und frohe Weihnachten!
Diese Textanzeigen mit 4/8Bit Bus haben fast alle eine Controller der
zum HD44780 kompatibel ist. Der ist so verbreitet, daß man vom
Beispielen überhäuft wird, bevor man überhaupt anfängt zu suchen.
Für die bekommt man auch fertige I2C/SPI Adapter.
Ich wüste nur keinen Grund die bei Conrad zu bestellen, schau mal bei
Ebay, da gibt es die 2x16 ab einem Euro plus Porto.
Wenn Du eine besonders gute Ablesbarkeit willst bekommst Du die z.B. bei
Reichelt auch als OLED:
http://www.reichelt.de/LCD-Module-organisch/2/index.html?&ACTION=2&LA=2&GROUPID=3012
Die DOG-Serie von EA mit ST7036 Controller kannst Du auch direkt an den
SPI hängen:
http://www.reichelt.de/DOG-LCD-Module/2/index.html?&ACTION=2&LA=2&OFFSET=500&GROUPID=3007&SORT=preis&SHOW=1
Mechanisch sind die allerdings etwa empfindlicher.
Eine Alternative währen kleine Grafikdisplays um 1" wie sie bei Ebay
grad für Arduinos zu Hauf angeboten werden, da sollte man aber schon
eine Lupe zum ablesen mitliefern.
Danke für die Antwort!
Ich bin nun etwas desillusioniert...
Wenn ich das hier lese
https://cdn-reichelt.de/documents/datenblatt/A500/dog-me.pdf
wüsste ich nicht, was ich konkret tun soll.
Heißt das dass sich bei diesen Displays mit dem integrierten Controller
beschäftigen muss? Wie lange dauert da eine Einarbeitung?
Ich dachte (bitte nicht lachen, ich mach das zum ersten mal), es gäbe
eine "einfache" Schnittstelle, wo man sagt ich will ein "A" in die 3.
Spalte setzen. So etwas wäre ja zumindest denkbar, wenn man die
Internals des LCD Controllers für den Anwender abstrahiert. Scheinbar
ist das aber nicht so...Da wird die Ansteuerung der Anzeige zum
Hauptknackpunkt - ich dachte es wäre ein Nebenschauplatz ;-)
Klar ist da ein Controller drauf, was denkst du denn, wandelt die
ankommenden Daten in lesbare Zeichen auf dem Display?
Schau dir mal die Informationen und das Datenbaltt des HD44780 an. Diese
sind ausführlich und einfach verständlich. Alle anderen Displays und
deren Controller sind ähnlich oder sogar kompatibel.
Einarbeitung und erste erfolgreiche Tests sollten in unter einem Tag
möglich sein.
Christian
Oder :
https://cdn-reichelt.de/documents/datenblatt/A400/DS_OLED_EA.pdf
Wie finde ich nun heraus, wie man hier ein Zeichen anzeigt? Scheinbar
muss ich eine bestimmte RAM Zelle ansprechen? ABER WO IST DOKUMENTIERT,
WELCHE UND WAS ICH HINEINSCHREIBE ? Bin ich hier blind oder was? ;-)
Christian Kreuzer schrieb:> Klar ist da ein Controller drauf, was denkst du denn, wandelt die> ankommenden Daten in lesbare Zeichen auf dem Display?> Schau dir mal die Informationen und das Datenbaltt des HD44780 an. Diese> sind ausführlich und einfach verständlich. Alle anderen Displays und> deren Controller sind ähnlich oder sogar kompatibel.> Einarbeitung und erste erfolgreiche Tests sollten in unter einem Tag> möglich sein.>> Christian
OK, ich werde mir das mal anschauen, vielleicht kann ich es mir nur noch
nicht vorstellen. Wenn du sagst 1 Tag reicht aus, kann es ja nicht so
komplex sein. Braucht man einen spezielle Toolchain, um diesen
Controller zu programmieren, oder geht das alles über die
Steuerleitungen?
Hi
>ABER WO IST DOKUMENTIERT,>WELCHE UND WAS ICH HINEINSCHREIBE ? Bin ich hier blind oder was? ;-)
Einfach im Datenblatt des Displaycontrollers nachsehen,
MfG Spess
Christian Kreuzer schrieb:> Michael W. schrieb:>> Wie finde ich nun heraus, wie man hier ein Zeichen anzeigt?>> In dem man sich nicht alles zum Ars** tragen lässt und mal beim> Hersteller nach Informationen sucht! Da gibt es dann zum Beispiel> Application Notes zu den Displays:> http://www.lcd-module.de/fileadmin/downloads/development%20service/OLED_Char/OLED%20application%20note.pdf> und sogar fertigen Code.>> Christian_RX7
Ich bin nicht jemand, der keine Dokumente liest - ganz im Gegenteil! Ich
weiß nur nicht, wo ich anfangen soll. Ich befürchte nur
"steckenzubleiben", wenn ich mir ein x-beliebiges Display kaufe. Ich
habe keine Lust wochenlang in irgendwelchen Foren herumzulungern um mir
jene Infos bei Hackern zusammenzusuchen, die eigentlich in einem
Datenblatt drinstehen sollten.
Aber ich habe verstanden, dass man sich zuerst mit dem Controller
beschäftigen muss, und das Datenblatt des Herstellers eigentlich
voraussetzt, dass man diesen bereits kennt.
Michael W. schrieb:> Ich> habe keine Lust wochenlang in irgendwelchen Foren herumzulungern um mir> jene Infos bei Hackern zusammenzusuchen, die eigentlich in einem> Datenblatt drinstehen sollten.>
Das Lustige ist, dass in dem von dir bei Conrad verlinkten Datenblatt
alle Information drinnen ist, die man benötigt um dieses LCD
anzusteuern. D.h. wenn man weiß, wie die Ansteuerung grundsätzlich
funktioniert. Und die ist gar nicht mal schwer zu verstehen. Es gibt
einen Kommando-Modus und einen Datenmodus. Unterschieden werden diese
Modi durch die R/S Leitung. Im Kommando-Modus wird jedes Byte eben als
Kommando aufgefasst, im Datenmodus werden die Bytes einfach in das RAM
geschrieben, aus dem dann die Anzeige generiert wird. Welche Kommandos
es gibt, steht im Datenblatt (auch in dem von dir verlinkten) und welche
Datenbytes es gibt, steht in der Zeichensatztabelle. Jetzt braucht man
nur noch die Angab, welche Adresse im RAM der Startspalte jeder Zeile
zugeordnet ist und im Grunde hat man damit (bis auf Timing-Angaben)
damit alles was man braucht.
> Aber ich habe verstanden, dass man sich zuerst mit dem Controller> beschäftigen muss, und das Datenblatt des Herstellers eigentlich> voraussetzt, dass man diesen bereits kennt.
Das ist schon mal nicht schlecht. Man kann auch ganz einfach nach
Beispielcode im Web suchen, bzw. nach Tutorien, wie solche Text-LCD
prinzipiell angesteuert werden. Der logische Ablauf ist bei Ansteuerung
über ein paralleles Interface auch nicht anders, als über I2C bzw. SPI.
Lediglich der Transportmechanismus ist ein anderer, aber das Prinzip ist
bei der HD44780-Familie bzw. Kompatiblen immer gleich. Tutorien und
Beispielcode gibt es wie Sand am Meer.
Karl Heinz schrieb:> Jetzt braucht man> nur noch die Angab, welche Adresse im RAM der Startspalte jeder Zeile> zugeordnet ist
Ist das das? :
Adressierung:
1. Zeile $00..$13
2. Zeile $20..$33
3. Zeile $40..$53
4. Zeile $60..$73
D.h. wenn ich in der zweiten Zeile das dritte Zeichen ansprechen will,
muss ich die Adresse $22 ansprechen und dort den Zeichencode
reinschreiben?
Es ist da immer von einem Cursor die Rede...
Ich habe dieses Modul gefunden:
https://www.sparkfun.com/datasheets/LCD/SerLCD_V2_5.PDF
wo die Ansteuerung über einen UART erfolgt.
Wenn ich es richtig verstehe, ist da schon ein PIC drin, der den HD44780
für mich ansteuert. Kann man sowas empfehlen oder ist das "Schrott" ?
Jedenfalls wäre das aus jetziger Sicht für mich der schnellste Einstieg.
Michael W. schrieb:> D.h. wenn ich in der zweiten Zeile das dritte Zeichen ansprechen will,> muss ich die Adresse $22 ansprechen und dort den Zeichencode> reinschreiben?
Jep.
> Es ist da immer von einem Cursor die Rede...
So funktioniert ein Cursor. Du setzt ihn an eine Position und alles was
weiter ausgegeben wird geht an die Cursorposition und der Cursor dann 1
Stelle weiter. Das funktioniert beim LCD auch nicht anders als in deinem
Texteditor. Nur dass du im Texteditor Cursortasten hast und am LCD musst
du den Cursor dann eben an eine bestimmte POsition setzen, indem du eine
Speicheradresse angibst, wobei eine Speicheradresse mit einer physischen
Anzeigeposition korrespondiert.
> Jedenfalls wäre das aus jetziger Sicht für mich der schnellste Einstieg.
Das einzige was du dir sparst ist, dass du die Hürde 'initialisierung'
abgenommen bekommst. Dafür musst du dich auf deinem Prozessor wieder
damit rumschlagen eine UART zum laufen zu bekommen.
Du kannst dich drehen und wenden wie du willst. Ohne Arbeit und
Initiative wird das nichts mit der Programmierung und umsonst ist nur
der Tod.
Und welches Modul kann jemand konkret empfehlen? Das sind ja meistens
alles irgendwelche Dinger aus Fernost ohne Gewährleistung. Ich habe hier
schon schlechte Erfahrungen gemacht. Ich will mir über Weihnachten eines
bestellen, will aber keines, das nur über Umwege zum Laufen gebracht
werden kann. Wenn es reicht, die HD44780 Spec zu studieren, schreckt
mich das ja nicht ab.
Ein UART wäre aus meiner Sicht viel einfacher, als 8 Datenleitungen + 2
Steuerleitungen, für die ich ein genaues Timing einhalten muss. Aber ich
probier halt einmal die "nackte" Variante.
Michael W. schrieb:> Und welches Modul kann jemand konkret empfehlen?
Ist ziemlich egal.
Solange es nicht defekt ist, hängt es nur von deiner Vorliebe für Farbe
und Größe ab. Im Regelfall sind sie nicht defekt.
> Das sind ja meistens> alles irgendwelche Dinger aus Fernost ohne Gewährleistung. Ich habe hier> schon schlechte Erfahrungen gemacht.
Na dann kauf es halt bei Conrad am Tresen.
> Ich will mir über Weihnachten eines> bestellen, will aber keines, das nur über Umwege zum Laufen gebracht> werden kann.
Es liegt normalerweise nicht an den Umwegen, sondern daran, dass der
Verwender nicht sorgfältig genug vorgeht. Das reicht von falscher
Pinzuordnung bis zu völliger Ignoranz, dass so ein LCD nach einem Befehl
auch seine Zeit braucht um den Befehl auszuführen.
> Ein UART wäre aus meiner Sicht viel einfacher, als 8 Datenleitungen + 2> Steuerleitungen, für die ich ein genaues Timing einhalten muss.
Die Timings sind Mindestzeiten.
Du darfst nicht kürzer gehen aber du darfst beliebig länger gehen. Wenn
du nach Anlegen des Datenbytes eine halbe Stunde wartest, bis du am E
Pin den Puls nachschiebst und dessen High-Pegel 2 Stunden anliegen
lässt, dann kratzt das das LCD nicht die Bohne. Aber du darfst halt
nicht schneller als ein paar µs sein.
Und imi übrigen hast du auch bei UART Timing Anforderungen.
Wenn dir UART lieber ist, dann nimm halt UART. Die Ansteuerung ist
deswegen auch nicht grossartig anders.
Ob du jetzt in der Verwendung
1
uart_write('x');
oder
1
lcd_data('x');
schreibst, nimmt sich wirklich nicht viel. Die darüber liegenden
Funktionen, die dann einen String ausgeben, sind sowieso davon nicht
wirklich betroffen, da konzeptionell identisch.
> umsonst ist nur der Tod.
Und der kostet das Leben.
Ansich ist das sehr einfach. Man braucht halt vier, fünf Kommandobytes,
die im exakt so im Datenblatt stehen. Wenn man Leitungen sparen will,
kann man auch den 4bit-Modus nutzen, dann muss man halt jedes Byte in
zwei Schritten schreiben.
Nachdem das Display initialisiert ist, sendet man "Set DD RAM Address",
also setze "Display Data RAM"-Adresse, so dass man an der passenden
Stelle schreibt und pumpt dann einfach stur die ASCII-Zeichen rein. Bei
Sonderzeichen muss man im Datenblatt nachsehen, was die für Codes haben,
aber das ist ansich auch alles, was man tun muss. Wenn man den HD44780
ansprechen kann, ist man immerhin schon mal soweit, dass man die
Grundlagen hat, die man auch für andere Controller braucht.
Das Display mit PIC oder wasauchimmer drauf, das man an die serielle
hängen kann, bringt einem eigentlich nur was, wenn man schon ein
fertiges Gerät hat, wo man nachträglich noch ein LCD einbaun will; einen
UART hat man oft noch frei.
Die Ansteuerung ist (insbesondere im 8Bit-Modus) innerhalb von Minuten
runtergeschrieben:
RW-Leitung des Displays auf Write festlegen (wann liest man schonmal was
davon zurück?), Kontrastpoti dran und so einstellen, dass die Hälfte der
Digits dunkel, die andere gerade nicht sichtbar ist. Dann hat man
schonmal fast alle Grundlagen gelegt.
Im Programm dann einfach Daten auf 8Bit-Port, R/S-Leitung (Befehl oder
Daten) setzen und kurz den Enable-Pin pulsen.
Das dann für jedes zu sendende Byte.
Wenn man den SPI-Mode nutzen will, muss man gucken, was da zu beachten
ist (Controller-Datenblatt www.lcd-module.de/eng/pdf/zubehoer/ks0073.pdf
ab Seite 50).
Hallo,
am besten ist, Du kaufst Dir ein Display, und probierst es einfach aus,
ist ja keine Millioneninvestition. Wenn man mal dran ist klären sich
viele Fragen recht schnell. Wenns unklar ist muß man halt mal mehrere
Varianten durchspielen. Wenn der elektrische Anschluss stimmt, macht
man, durch falsche Programmierung auch nichts kaputt. Nur die
Datenleitungen, von parallel angesteuerten Displays, sind bidirektional,
da könnten Ausgänge gegeneinander arbeiten, da kann man aber
Schutzwiderstände (470 - 1k Ohm) einbauen. Bei SPI hat man nur klare
Zuordnung von Ein- und Ausgängen. Displays mit UART gibt es auch, sind
aber sehr teuer, würde ich nicht nehmen.
Also ein bisschen Mut, etwas Begeisterung für die Sache, und ran an den
Speck ...
Mit freundlichem Gruß - Martin
Martin Schlüter schrieb:> Displays mit UART gibt es auch, sind> aber sehr teuer, würde ich nicht nehmen.
...und man läuft Gefahr, dass nicht alle Tricks am Display ausgereizt
werden können.
Michael W. schrieb:> Ich wüsste nicht, wie ich hier ein konkretes Zeichen schreibe. Ich will> z.B. ein "A" in die erste Reihe, dritte Spalte setzen.
Hier kannst Du üben:
http://www.dinceraydin.com/djlcdsim/djlcdsim.html
Ob Du die Daten seriell oder parallel zum Display sendest, spielt keine
Rolle. Es sind die gleichen Daten. Eventuell unterscheidet sich aber die
Initialisierung.
Ich wuerde ja behaupten:
Hol dir einfach mal so einen Möppel hier:
http://www.reichelt.de/?ARTICLE=31653
Die Software fuer acht oder vier Bit-Ansteuerung ist, wenn man schonmal
irgendwas gemacht hat mit Mikrocontrollern, in vielleicht zwei Stunden
runtergeschrieben. Ich wuerde sagen, einmal sollte man es von Hand
gemacht haben, danach nimmt man eine der gefuehlt tausend fertigen
Bibliotheken.
Ich hab oefters mal eigene Routinen geschrieben fuer LCDs, weil ich
spezifische Anforderungen hatte, aber normalerweise nimmt man da
irgendwas fertiges (entweder den eigenen Code vom letzten Mal oder eine
fertige Bibliothek)
OK, ich sehe dass die Kommunikation mit dem Controller wirklich keine
Hexerei ist. Beim Wort "Controller" dachte anfangs an etwas nach außen
sehr komplexes, und das hat mich gleich mal entmutigt.
Ist der KS0066U kompatibel zum HD44780. Scheinbar ja, aber ich würde mir
das nochmal gerne bestätigen lassen.
Vielen Dank für die Antworten!
Danke nochmal. Mir ist noch unklar, weshalb man bei der Initialisierung
des hd44780 drei mal "Funktion set" aufrufen sollte. Laut Datenblatt
wird der Befehl mehrmals gesendet - wozu?
Ich bekomme mein display erst und bereite alles schon mal vor...
Michael W. schrieb:> Mir ist noch unklar, weshalb man bei der Initialisierung> des hd44780 drei mal "Funktion set" aufrufen sollte
Das Display befindet sich nach dem Anschalten in einem undefinierten
Zustand. Um es auf jeden Fall in den gewünschten Modus zu bringen,
schickt man dreimal Function Set, und ist damit auf jeden Fall auf der
sicheren Seite. Das ist beim HD44780 einfach so, unter anderem auch
deswegen, weil der Chip ja 4-bit und 8-bit Kommunikation unterstützt.
Die DOGM (ich nehme gerne das 132-5) sind mittlerweile bei Frau Reichelt
billiger geworden und benötigen nur 3 Leitungen (plus Reset). Die sind
recht interessant, haben aber keine Zeichensätze onboard. Da werden nur
spaltenweise Pixel geschrieben und der MC muss die Zweichensätze selber
generieren. Ausserdem brauchen sie eine Reihe externer Kondensatoren,
sind dafür aber voll grafikfähig. Doppelte Zeichenhöhe und -breite sowie
eigene Symbole so viel man will sind damit machbar.
Danke für die vielen Tipps,
es ist einfacher als ich ursprünglich dachte und hat bis auf
Kleinigkeiten auf Anhieb funktioniert - und das ist bei mir selten ;-)
hallo,
ich suche auch ein geeignetes LCD. Jedoch mit 3 oder 4 Zeilen. Um Pins
am Controller zu sparen (ATmega324a), vorzugsweise mit SPI oder I2C. Der
Controller wird mit 5V betrieben.
Habt ihr mit gewissen Modellen gute Erfahrungen gemacht und könnt es
deshalb empfehlen? Manche LCDs haben mit wegen derer mageren
Datenblätter abgeschreckt.
Wäre für mich das erste Display, dass ich in Betrieb nehme...
Danke soweit
Rufus Τ. Firefly schrieb:> Von Electroni Assembly gibt es derartige Displays, das EA DOGM204-A> beispielsweise ist ein 4x20-Display, das auch SPI und I2C kennt:>> http://www.lcd-module.de/fileadmin/pdf/doma/dogm204.pdf
Danke es sieht sehr verständlich aus und wäre wohl sehr gut geeignet.
Leider wird es mit einer Spannung von 3,3V betrieben.
@ Peter Ullrich (pulli00)
>> http://www.lcd-module.de/fileadmin/pdf/doma/dogm204.pdf>Danke es sieht sehr verständlich aus und wäre wohl sehr gut geeignet.>Leider wird es mit einer Spannung von 3,3V betrieben.
Dann nimm halt ein paar einfache Pegelwandler, bei 3 Pins für SPI
ist das wohl kaum ein Problem.
Peter Ullrich schrieb:> Danke es sieht sehr verständlich aus und wäre wohl sehr gut geeignet.> Leider wird es mit einer Spannung von 3,3V betrieben.
Du kannst aber auch ein Standard-LCD 20x4 nehmen und per Schieberegister
(4094) die Daten im 4-Bit Modus ins Display schreiben. Dafür braucht man
drei Steuerleitungen: DATA, CLOCK, STROBE, wobei STROBE auch das
E-Signal fürs Display ist.
Die oberen vier Bit des 4094 kann man für einen einfachen 4-Bit DAC
verwenden, mit dem der Kontrast der Anzeige eingestellt werden kann.
Falk Brunner schrieb:> @ Peter Ullrich (pulli00)>>>> http://www.lcd-module.de/fileadmin/pdf/doma/dogm204.pdf>>>Danke es sieht sehr verständlich aus und wäre wohl sehr gut geeignet.>>Leider wird es mit einer Spannung von 3,3V betrieben.>> Dann nimm halt ein paar einfache Pegelwandler, bei 3 Pins für SPI> ist das wohl kaum ein Problem.
das wäre eine variante. sollte jemand aber ein LCD kennen, dass in etwa
so aufgebaut ist wie das dogm204 und mit 5V betrieben werden kann, wäre
das deutlich eleganter.