LCD gibt keine String aus

OP #783963
Lesenswert?
• ▲
▼
Hallo,

Hab seit 2 Tagen ein myavr board 2 usb mit lcd add on zugelegt.

Folgendes Problem hab ich jetzt.
Das LCD hab ich dank eures Tutorial zum laufen bekommen, aber bei dem 
Punkt wo das LCD einen konstanten Text ausgeben soll scheitert es.
Macht einfach garnichts.

Vielleicht sieht jemand was ich da falsch mache.

Vielen Dank im Vorraus.

Gruss Alex
Angehängte Dateien:
#783976
Lesenswert?
• ▲
▼
Sorry, meine Glaskugel ist gerade im Wochenende, da muss ich wohl ein 
wenig raten:

Spannung eingeschaltet?

Programm geladen?

LCD mit Schraubenzieher gepeinigt?

Wenn die Antworten ja ja nein lauten, dann hilft uns nur noch ein 
bisschen Code oder bis Montag warten weil dann meine Glaskugel wieder 
zurück aus Wochenende.
#784142
Lesenswert?
• ▲
▼
@ Alexander E. (foley)

>LCD_Alex.asm(25): warning: .cseg .db misalignment - padding zero byte

>Weiss zufällig jemand was die bedeutet?

Unkritisch. In einer Datendefinition im Flash mit .db ist eine ungerade 
Anzahl Bytes gespeichert. Das mag der Assembler nicht und fügt ein 
Füllbytes (padding byte) an.

MFG
Falk
OP #784270
Lesenswert?
• ▲
▼
hm, jetzt wo es erwähnt wird.  ?

keine ahnung, hab das ganze mit der Ausgabe von einzelnen zeichen 
probiert, und da hats funktioniert. bin davon ausgegangen das ich das in 
dem fall nicht brauche.


Habs gerade mal eingefügt in die lcd-ini aber hat leider keine 
auswirkungen.

gruss alex
Gast #784290
Lesenswert?
• ▲
▼
Hi

>keine ahnung, hab das ganze mit der Ausgabe von einzelnen zeichen
>probiert, und da hats funktioniert. bin davon ausgegangen das ich das in
>dem fall nicht brauche.

Dann bist du der erste, der ein LCD mit Eingängen angesteuert hat.
Was hast du denn jetzt in deine LCD-Ini geschrieben?
An deiner Stelle wurde ich erst mal wieder testen, ob die Ausgabe 
einzelner Zeichen mit deinen Routinen funktioniert. Dann müsste auch die 
Stringausgabe funktionieren.

MfG Spess
OP #784300
Lesenswert?
• ▲
▼
die einzelausgabe funktioniert.

.include "m8def.inc"



; als zweites Stack initaliesieren
       ldi r16, LOW(RAMEND)
           out SPL, r16
       ldi r16, HIGH(RAMEND)
           out SPH, r16

; dann portD als Ausgang setzen
       ldi r16, 0xFF
           out DDRD, r16

; dann display initalisieren via lcd_init
           rcall lcd_init

; dann Display löschen via lcd_clear

           rcall lcd_clear

; danach Zeichen ausgeben, erst in r16 laden und dann mit lcd_data 
ausgeben


           ldi r16, 'H'
           rcall lcd_data

           ldi r16, 'I'
           rcall lcd_data

           ldi r16, ' '
           rcall lcd_data

           ldi r16, 'A'
           rcall lcd_data

     ldi r16, 'L'
           rcall lcd_data

           ldi r16, 'E'
           rcall lcd_data

           ldi r16, 'X'
           rcall lcd_data
loop:
           rjmp loop

       .include "selflcdroutines.asm"

jetzt hab ich folgendes:
.include "m8def.inc"

.def temp1 = r16
.def temp2 = r17
.def temp3 = r18


           ldi temp1, LOW(RAMEND)      ; LOW-Byte der obersten 
RAM-Adresse
           out SPL, temp1
           ldi temp1, HIGH(RAMEND)     ; HIGH-Byte der obersten 
RAM-Adresse
           out SPH, temp1

           rcall lcd_init              ; Display initialisieren
           rcall lcd_clear             ; Display löschen

           ldi ZL, LOW(text*2)         ; Adresse des Strings in den
           ldi ZH, HIGH(text*2)        ; Z-Pointer laden

           rcall lcd_flash_string      ; Unterprogramm gibt String aus 
der
                                       ; durch den Z-Pointer adressiert 
wird
loop:
           rjmp loop

text:
           .db "Test", 0                ; Stringkonstante, durch eine 0
                                       ; abgeschlossen


       .include "selflcdroutines.asm"

und das in die routinen eingefügt:
 ; Einen konstanten Text aus dem Flash Speicher
 ; ausgeben. Der Text wird mit einer 0 beendet
lcd_flash_string:
           push  temp1

lcd_flash_string_1:
           lpm   temp1, Z+
           cpi   temp1, 0
           breq  lcd_flash_string_2
           rcall  lcd_data
           rjmp  lcd_flash_string_1

lcd_flash_string_2:
           pop   temp1
           ret

und das funktioniert nicht.
Gast #784492
Lesenswert?
• ▲
▼
Hi Alex,

formell ist das Lesen mit "lpm" in Deinem Programm in Ordnung und müsste 
mit "lcd_data" funktionieren, vorausgestzt, dieses verwendet nicht Z. 
Das würde ich zunächst überprüfen. Die Lockbits (LB) und Bootlockbits 
(BLB)sind alle unprogrammiert?

Gruß

Fred
#784538
Lesenswert?
• ▲
▼
Hallo,

wenn er die Routinen aus der obigen selflcdroutines.asm benutzt, wird Z 
nicht anderweitig genutzt, sollte also gehen.

Ansonsten schließe ich mich Spess53 an, saubere Definitionen der 
Register, es ist sonst eine Strafe, Fehler zu suchen und andere brauchen 
viel Zeit, daß auseinander zu sortieren...

Gruß aus Berlin
Michael

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren