www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCDAnzeige


Autor: Frank (Gast)
Datum:
Angehängte Dateien:

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

Autor: Hubert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin nicht gut genug in asm, aber hast du den Code schon mal im
Debugger vom AVR-Studio laufen lassen. Holt er sich auch wirklich den
nächsten Buchsteben zum ausgeben?

Autor: Lötnix (Gast)
Datum:

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

Autor: Andi (Gast)
Datum:

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

Autor: Andi (Gast)
Datum:

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

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Vielen Dank für die Antworten. Mit dem Code von Andi hats
geklappt. Habe tatsächlich immer wieder den ersten Buchstaben geladen
und angezeigt.
Gruss
Frank

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.