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
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.
Mist das wichtigste vor lauter Lästern vergessen schäm Bei mir zeigt die RAR einen Fehler und ich sehe nichts.
das .rar archiv ist total in Ordnung gewesen...Der Schelm hatte wohl nur ein Problem damit
ausserdem bring mir das avr studio immer diese warnung: LCD_Alex.asm(25): warning: .cseg .db misalignment - padding zero byte Weiss zufällig jemand was die bedeutet? Gruss Alex
@ 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
ok. danke. aber leider kann ich immer noch nicht richtig erkennen warum der Text nicht ausgegeben wird. War schon froh das ich mithilfe dieverser Codesammlungen, das gerät schonmal zum laufen bekommen habe, aber hier hackt es dann aus. gruss alex
Hast Du es mal mit einem anderen Quellcode der in C geschrieben ist versucht? Gibt hier im Forum ja Beispiele :) Hab leider keines für Textdisplays, sonst würde ich es Dir anhängen...
Hi Habe ich etwas übersehen, oder wo wird dein Port initialisiert? MfG Spess
Hi Ich meinte die Stelle wo der Port auf Ausgang gesetzt wird. Also ldi tempx,xy out DDRD,tempx MfG Spess
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
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
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.
Hi Bitte entscheide dich für die Benutzung von Registerbezeichnungen (rxy) oder für dieses tempX. Das Vermischen ist tödlich. MfG Spess
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
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
ok. ich werde es mal sauber schreiben. vielleicht ergibt sich daraus ja schon der Fehler. Danke erstmal. Gruss Alex
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.