LCDAnzeige

Gast #151208
Lesenswert?
• ▲
▼
Hallo
Nicht meckern, aber ich habe Probleme mit dem LCD (hd44780 16
Characters 2lines).Mit dem ASM Programm im Anhang, was ich aus dem
Tuto. kopiert und etwas abgeändert habe, zeigt das LCD nur den Anfangs
Buchstaben den ich in den Flash geladen habe an. Ich wollte natürlich
den ganzen Text auf dem LCD haben. Kann mir jemand einen Tipp gheben
was im Code falsch ist.
Danke Gruss
Frank

AVR Atmega8 mit (8MHZ)
Angehängte Dateien:
Gast #151210
Lesenswert?
• ▲
▼
Hallo Frank,

mit dem Befehl rjmp Start lädtst Du ja wieder den ertsen Buchstaben.

Du musst vor dem lpm Befehl einspringen

So sollte es klappen.

Allerdinmgs fehlt dann immer noch die Erkennung, wann die 0 aus dem
String kommt (also der String endet.

In der momentanen Variante, schreibst Du die weiteren FF auch raus.


        ldi ZL, LOW(text*2)
        ldi ZH, HIGH(text*2)
start:
        lpm
        mov temp1, R0
        rcall pause
        rcall lcd_data
        adiw ZL, 1
        rcall pause
  rjmp start
Gast #151211
Lesenswert?
• ▲
▼
In Deiner "Start-Schleife" setzt Du Z immer auf das erste Zeichen
zurück.
Desweiteren hast Du eine Abfrage auf das "0-Byte" vergessen.
Das ganze muss so aussehen, damit es alle Zeichen ausgibt:

start:
        ldi ZL, LOW(text*2)
        ldi ZH, HIGH(text*2)
start1:
        lpm
        tst R0               ;Text-Ende erreicht?
        breq Ende            ;Dann Ende.
        mov temp1, R0
        rcall pause
        rcall lcd_data
        adiw ZL, 1
        rcall pause
  rjmp start1
Ende:
        rjmp Ende

Mach es doch lieber gleich als Unterprogramm:

start:
        ldi ZL, LOW(text*2)
        ldi ZH, HIGH(text*2)
        rcall Print
Stop:
        rjmp Stop
        ....
        ....
Print:
        lpm temp1,Z+         ;Zeichen von Adresse Z in temp1 und Z+1
        tst temp1            ;Text-Ende erreicht?
        breq PrintEnde       ;Dann Ende.
        rcall pause
        rcall lcd_data
        rcall pause
  rjmp start1

2 mal eine Pause wird eigentlich nicht benötigt.
Normalerweise Gibt man ein Zeichen aus und dann kommt EINE Pause.
Man kann das natürlich auch umdrehen, also zuerst ne Pause und dann die
Ausgabe. Aber nicht unbedingt vorher und nachher.

Gruß
Andi
Gast #151212
Lesenswert?
• ▲
▼
Habe mal wieder was vergessen!
Das 2. Beispile als UP muss so aussehen:

start:
        ldi ZL, LOW(text*2)
        ldi ZH, HIGH(text*2)
        rcall Print
Stop:
        rjmp Stop
        ....
        ....
Print:
        lpm temp1,Z+         ;Zeichen von Adresse Z in temp1 und Z+1
        tst temp1            ;Text-Ende erreicht?
        breq PrintEnde       ;Dann Ende.
        rcall pause
        rcall lcd_data
        rcall pause
        rjmp Print
PrintEnde:
        ret

Gruß
Andi

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.