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
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