4 Zeiliges LCD teilt falsch auf, kurze Verständnissfrage

OP #516911
Lesenswert?
• ▲
▼
Hallo,

ich experimentiere gerade mit folgendem Display herum:

http://www.noritake-itron.com/Specs/CU-U/CU20049SCPB-W2J-01.pdf

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?
Gast #516948
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.
OP #516984
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.
Angehängte Dateien:
Gast #516991
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
Gast #516998
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.
Gast #517008
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
#517704
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.

...
Gast #517707
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.
#517711
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.

...
Gast #517731
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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.