mikrocontroller.net

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


Autor: Thomas Frosch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi ich habe dieses Display:
http://www.pollin.de/shop/shop.php?cf=produkt.php&...

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

Autor: Moritz E (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.