mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 4 Zeiliges LCD teilt falsch auf, kurze Verständnissfrage


Autor: Florian Glaser (suffix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich experimentiere gerade mit folgendem Display herum:

http://www.noritake-itron.com/Specs/CU-U/CU20049SC...

Das Display funktioniert auch, jedoch klappt die Zeilenaufteilung nicht 
so ganz. Ich habe das Display schon einmal am Parallelport mit 
LCDSmartie als HD44780 betrieben, was auch wunderbar funktioniert hat. 
Am AVR beschreibt das Display (4x20) die Reihen nicht wie normal 
(1-2-3-4) sondern 1-3-2-4.


Was kann ich dagegen machen? Ich schreibe mal alles, was an das LCD an 
Kommandos geschickt wird:

Zuerst wird lt. dem Wiki Eintrag 3mal hintereinander 0b00110000 
geschickt.

Hier meine Verständnisfrage: Laut Datenblatt des HD44780 sendet das den 
Befehl, um den 8Bit-Modus einzustellen. Warum muss man das 3mal 
hintereinander senden? Was hat das für einen Sinn?

Dann kommt 0b00111000 für ein Display mit 2/4 Zeilen und den 
8-Bit-Modus, 5mal7 Font.

Dann 0b00001111 für Display und Coursor blinkend an.

Und dann noch 0b00000100 für Cursorpos. dekrementiern und Displayinhalt 
fest.

Dann wird das Display noch mit 0b00000001 gecleared und fertig.

Wieso bockt mein Display da so rum?

Autor: Dirk Hofmann (arm-dran)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schick mal dein prog, ich hatte die Dinger schon im Einsatz

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das bockt nicht, es ist normal. Also füge deinem Programm die 
entsprechenden Cursorpositionen hinzu.

Autor: Manuel Wagesreither (manuel_wagesreither)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Ich hatte lang nichts mehr mit dem HD44780 zu tun, kann daher viele 
deiner Schritte nicht ganz nachvollziehen.

Trotzdem vermute ich, dass dieser Link dir vielleicht weiter helfen 
könnte:
http://sprut.de/electronic/lcd/

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
das liegt daran, dass 2 40-Zeichen-Controller verwendet werden. Das 
heißt, das Ende der 1. Zeile wird am Anfang der 3. Zeile fortgesetzt. 
Der 2. Controller fängt in Zeile 2 an und wird in Zeile 4 fortgesetzt.
Hatte das gleiche Problem, ist verwirrend, geht aber ganz gut.

Autor: Florian Glaser (suffix)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Sowas ähnliches habe ich mir scho gedacht und befürchtet. Also 
Cursorposition spätestens nach jedem 20ten Zeichen neu setzen? Ist 
wenigstens die von 0-80 linear durchnumeriert? Also oben links eben 0 
und unten rechts 80? Und wie kann ich die dann setzten?

Mein Programm habe ich angefügt. Alle, die meine Schritte nicht 
nachvollziehen können, sollen mir bitte sagen wo genau, ich erkläre das 
dann. Und wenn einer weiß, warum man diese 8Bit Anweisung 3mal am Anfang 
senden muss, soll er sich bitte melden.

WICHTIGE ANMERKUNG: Die Funktionen sind alles abgeänderte Versionen des 
LCD-Tutorials hier im Wiki. Ich verstehe eben diese Anweisung von dort 
auch nicht ganz, das könntet ihr euch ja auch nochmal durchlesen.

Autor: Michael U. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

die Zuordnung der internen Ram-Adressen hat a) der Controllerhersteller 
und b) teilweise der Displayhersteller getroffen.

"Und wenn einer weiß, warum man diese 8Bit Anweisung 3mal am Anfang
senden muss, soll er sich bitte melden."

Weil es der Hersteller so beschlossen hat (und sicher auch weiß, warum).

Ansonsten: Datenblatt des Display-Controllers nehmen, da steht alles 
wichtige drin.

Gruß aus Berlin
Michael

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also bei meinem Display ist die Startadresse von Zeile 1 0x80. Dann kann 
ich bis zum Ende der Zeile 3 durchschreiben. Anfang Zeile 2 ist 0xC0 und 
kann bis Ende Zeile 4 duchgeschrieben werden.
Wie mein Vorredner sagte: steht alles im Datenblatt.

Autor: Florian Glaser (suffix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also gut, dann werde ich mir jetzt das Datenblatt besorgen, dachte immer 
die Infos im Wiki wären ausreichend. Danke für eure Hilfe.

Autor: Michael U. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ja, die x*20-Zeichen-Dosplay sind üblicherweise so.
Bei x*16 fehlen dann hinten die 4 Zeichen, die Anfänge bleiben 
identisch.

Mir sind aber auch schon Exoten begegnet, ich habe ein 2x16, das ist als 
4x8 organisiert...

Durchgehenden Text über mehr als eine Zeile mußte ich noch nie ausgeben, 
so richtig stört es mich also nicht. ;)

Gruß aus Berlin
Michael

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>dachte immer die Infos im Wiki wären ausreichend.
Da wäre ich vorsichtig. Wiki ist auch nur ein Forum, da jeder dran 
ändern kann, also keine 100%ige Informationsquelle.

Autor: Florian Glaser (suffix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja ich hab die Adressen jetzt herausgefunden, war nicht ganz einfach 
ist auch nicht ganz logisch, aber funktioniert.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Florian Glaser wrote:
> Naja ich hab die Adressen jetzt herausgefunden, war nicht ganz einfach
> ist auch nicht ganz logisch, aber funktioniert.

Muss ich das jetzt verstehen?

Bei den Text-LCDs, die mir bisher in die Finger kamen, war die Zuordnung 
der Adressen zu den Ausgabepositionen immer im Datenblatt angegeben.

Nur einmal stimmte es nicht, das war ein 8x24-LCD mit Controller 
MS50530, da war die korrekte Zuordnung aber schnell gefunden.

...

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oft liegt's auch daran, wenn der Busy-Pin nicht ausgewertet wird, dass 
die Pausenzeiten zwischen den Befehlen zu kurz sind. Dann werden Zeichen 
'verschluckt' und die Positionierung stimmt nicht mehr. Die LCDs sind 
auch sehr Temperaturempfindlich, wenn's kalt wird werden die sehr Träge.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sonic wrote:
> Oft liegt's auch daran, wenn der Busy-Pin nicht ausgewertet wird, dass
> die Pausenzeiten zwischen den Befehlen zu kurz sind. Dann werden Zeichen
> 'verschluckt' und die Positionierung stimmt nicht mehr.

Das ist wahr.
Ich betreibe Text-LCDs inzwischen nur noch ohne Busy-Abfrage (einen 
"Busy-Pin" haben die von mir verwendeten LCDs nicht). Die Ausgabe des 
nächsten Zeichens erfolgt in der Mainloop nur dann, wenn ein sowiso 
laufender Timer das entsprechende Flag gesetzt hat. Da ich nicht so 
schnell lesen kann, passiert das alle zwei Millisekunden. Das normale 
Benutzerprogramm merkt davon nichts, denn es schreibt (mit LCD_DATA) 
nicht auf das LCD, sondern in einen "Bildschirmspeicher" im SRAM. Das 
geht sehr schnell und erfordert keine Wartezeiten. Das zyklisch 
aufgerufene LCD_UPDATE liest die Zeichen aus dem Bildschirmspeicher und 
gibt sie an das LCD aus. Dabei überprüft es die Zeilengrenzen im 
Bildschirmspeicher und positioniert bei Zeilenwechsel das LCD auf die 
neue Ausgabeposition (SET DD-RAM-ADRESS). Der Bildschirmspeicher ist 
somit ein Abbild der tatsächlichen Anordnung der Zeichen und ist anders 
organisiert als das LCD. Das geht hervorragend und ist recht effizient, 
geht also recht sparsam mit Rechenzeit um.

> Die LCDs sind
> auch sehr Temperaturempfindlich, wenn's kalt wird werden die sehr Träge.

Auch das stimmt.
Wenn man (bei Verzicht auf Busy-Abfrage) in der Zwischenzeit zwischen 
den Zeichenausgaben nicht in einer Warteschleife hängt (WAIT_MS xyz), 
sondern die anderen anstehenden Aufgaben erledigt, dann kostet es 
nichts, die Zeichenausgabe zu verlangsamen.

...

Autor: Suffix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das ist ganz einfach: es war deshalb nicht ganz einfach, da der 
hersteller meines displays, noritake itron, nur eine art beipackzettel 
herausrückt ein vollständiges datenblatt muss man beantragen und ich 
bekam bis jetzt nie eine antwort. nur dort stehen auch die adressen 
drin.

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.