Forum: Mikrocontroller und Digitale Elektronik 2x20 Zeiliges LCD. zeile 2 funktioniert nicht


von Thomas Frosch (Gast)


Lesenswert?

Hi ich habe dieses Display:
http://www.pollin.de/shop/shop.php?cf=produkt.php&ts=0&p=OTg4OTk4

funktioniert bisher alles super hab alles so gemacht wie im Tutorial 
allerdings funktionert die Zweite Zeile nicht! bin mir aber auch nicht 
sicher wie man in die zweite zeile schreibt! Muss ich dazu den Cursor in 
die Zweite zeile stellen? Oder kann ich auch einfach meine Zeichen 
weiter schreiben also dass das 21. Zeichen automatisch in der zweiten 
Zeile angezeigt wird? weil dass funktioniert nicht?

HAb auch schon die Zeiten für die Initialisierung etwas erhöht
bzw. wie in einem ähnlichen Beitrag beschrieben einfach den Befehl für 
die Initialisierung von 2 Zeilen drei mal geschickt. Jedoch ohne erfolg!

Hat jemand sonst noch ne ahnung an was dass liegen kann?

ich benutze einfach die lcd routine.asm nur etwas angepasst da ich 8MHz 
verwende

und so schreibe ich

LCDschreiben:

rcall lcd_clear    ; Display löschen

ldi temp1, '0'     ; Zeichen laden
sbrc Geraeteadresse,7
ldi temp1, '1'
rcall lcd_data


ldi temp1, '0'     ; Zeichen laden
sbrc Geraeteadresse,6
ldi temp1, '1'
rcall lcd_data


ldi temp1, '0'     ; Zeichen laden
sbrc Geraeteadresse,5
ldi temp1, '1'
rcall lcd_data

ldi temp1, '0'     ; Zeichen laden
sbrc Geraeteadresse,4
ldi temp1, '1'
rcall lcd_data

ldi temp1, '0'     ; Zeichen laden
sbrc Geraeteadresse,3
ldi temp1, '1'
rcall lcd_data

ldi temp1, '0'     ; Zeichen laden
sbrc Geraeteadresse,2
ldi temp1, '1'
rcall lcd_data

ldi temp1, '0'     ; Zeichen laden
sbrc Geraeteadresse,1
ldi temp1, '1'
rcall lcd_data

ldi temp1, '0'     ; Zeichen laden
sbrc Geraeteadresse,0
ldi temp1, '1'
rcall lcd_data


ldi temp1, ' '
rcall lcd_data
ldi temp1, 'G'
rcall lcd_data
ldi temp1, '='
rcall lcd_data
mov temp1, Geraeteadresse
rcall lcd_data



ldi temp1, '0'     ; Zeichen laden
sbrc Kommando,7
ldi temp1, '1'
rcall lcd_data


ldi temp1, '0'     ; Zeichen laden
sbrc Kommando,6
ldi temp1, '1'
rcall lcd_data


ldi temp1, '0'     ; Zeichen laden
sbrc Kommando,5
ldi temp1, '1'
rcall lcd_data

ldi temp1, '0'     ; Zeichen laden
sbrc Kommando,4
ldi temp1, '1'
rcall lcd_data

ldi temp1, '0'     ; Zeichen laden
sbrc Kommando,3
ldi temp1, '1'
rcall lcd_data

ldi temp1, '0'     ; Zeichen laden
sbrc Kommando,2
ldi temp1, '1'
rcall lcd_data

ldi temp1, '0'     ; Zeichen laden
sbrc Kommando,1
ldi temp1, '1'
rcall lcd_data

ldi temp1, '0'     ; Zeichen laden
sbrc Kommando,0
ldi temp1, '1'
rcall lcd_data


ldi temp1, ' '
rcall lcd_data
ldi temp1, 'K'
rcall lcd_data
ldi temp1, '='
rcall lcd_data
mov temp1, Kommando
rcall lcd_data

ret

von Moritz E (Gast)


Lesenswert?

Hallo Thomas,
Das mit der zweiten Zeile kann bei dir zwei Ursachen haben:

- Entweder du adressierst nicht richtig, die zweite Zeile erreicht man 
in dem man einfach in den dazugehörigen Adressbereich des 
LCDController-Rams schreibt, welcher i.R. NICHT direkt an das Ende der 
ersten Zeile anschließt. (Beim Standart-Controller 44780 ist es z.b. 
irgendwas mit 0-39 Zeile 1, 40-79 Zeile 2, etc, wobei bei 16 
Zeichen-Anzeige dann nur Adressen 0-15 angezeigt werden (den angezeigten 
Ausschnitt kann man dann mit dem Cursor verschieben, so das Texte 
gescrollt werden können).
Da dein Code nicht offenbart was denn lcd-data tut, lässt sich leider 
nicht erkennen ob deine Adressierung richtig ist.

- Oder, womit ich auch Anfangs zu kämpfen hatte, deine Initialisierung 
wird vom Controller nicht verstanden. Ohne Initialisierung ist er 
nämlich defaultmäßig auf nur eine Zeile eingestellt. Die Initialisierung 
besteht aus zwei Teilen: Die Reset-Anweisung, die ihn zurücksetzt und 
die Konfigurationsanweisung, mit der du 4/8bit Busmodus, Zeilenzahl etc 
einstellst. Normalerweise wird der Reset von Kontroller automatisch 
durchgeführt, wenn die Spannungsversorgung nicht zu langsam ansteigt. 
Als ich Anfangs dann immer versuchte, ihn explizit laut Datenblatt zu 
Resetten hatte das auch irgendwie nie geklappt. Als ich die 
Reset-Anweisung dann rausnahm, und gleich den Konfigurationsteil 
schickte, klappte es erst. Und das Timing der einzelnen Anweisungen muss 
dann natürlich auch stimmen, damit er die Konfigurationsanweisung 
versteht. Die Zeiten wie im Datenblatt angegeben können je nach Befehl 
varieren, und sind natürlich unbedingt nicht zu unterschreiten.

- Und eine dritte Möglichkeit, woran man anfangs gerne scheitert, könnte 
sein, dass die Kontrastspannung nicht niedrig genug ist, in welchem Fall 
selbst bei ordnungsgemäßen Anweisungen die Zeichen von der Logik 
dargestellt werden, aber mangels Kontrast "unsichtbar" bleiben. Ob der 
Konfigurationsteil aber klappt, lässt sich einfach herausfinden, in dem 
man den Kontrast sehr hoch (also Spannung nahe 0V, evtl auch leicht 
negativ) stellt. Unreseted ist er noch im 1 Zeilen Modus, wodurch sich 
auch nur die obere Zeile dunkel verfärbt. Wenn sich beide Zeilen 
dunkelverfärben hat der Init geklappt, und es ist vermutlich ein 
Adress-Problem.

Gruß,
Moritz

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.