Guten Morgen, ich arbeite grade das AVR Tutorial "LCD" ab und bin soeben auf ein Problem gestoßen. Und zwar beim Thema "Ausgabe eines konstanten Textes"... wenn ich das Beispielprogramm in den Controller lade, zeigt er nur dne schwarzen Balken an, jedoch keinen Text. Der Assembler weißt auf 3 Dinge hin: D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\LCD2.asm(1): Including file 'F:\Programme\Atmel\AVR Tools\AvrAssembler2\Appnotes\m8def.inc' D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\LCD2.asm(28): Including file 'D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\Routine1.asm' D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\Routine1.asm(12): warning: .def: 'temp2' redefinition (r17->r22) <--------- !!! D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\LCD2.asm(28): info: 'D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\Routine1.asm' included from here D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\LCD2.asm(4): info: previous definition of 'temp2' D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\Routine1.asm(13): warning: .def: 'temp3' redefinition (r18->r23) <--------- !!! D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\LCD2.asm(28): info: 'D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\Routine1.asm' included from here D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\LCD2.asm(5): info: previous definition of 'temp3' D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\LCD2.asm(25): warning: .cseg .db misalignment - padding zero byte <--------- !!! D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\LCD2.asm(29): No EEPROM data, deleting D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\LCD2.eep Wird es daran liegen ? Wenn ja, wie ändere ich die Registerbezeichnung, so dass alles funktioniert ? MfG Stefan
Die letzte Warnmeldung besagt lediglich, dass eine ungerade Anzahl von Bytes mit .db in ein Codesegment gelegt wurden und so automatisch ein Padding-Byte eingfügt wird, um auf eine gerade Anzahl zu kommen (Flash ist wortorientiert -> immer zwei Bytes pro Flash-Adresse). Die Meldung besagt also, dass Du ein Byte Programmspeicher "verschwendest". Die beiden anderen Meldungen erzählen Dir, dass in der lcd_routines.asm die Bezeichnungen "temp2" und "temp3" ebenfalls definiert sind, und zwar mit anderen Registern. Da die Register so wie ich das sehe in den Funktionen in der lcd_routines.asm korrekt gepusht und gepopt werden, sollte es helfen, die .defs im Hauptprogramm entsprechend zu ändern, also aus
1 | .def temp2 = r17 |
2 | .def temp3 = r18 |
einfach
1 | .def temp2 = r22 |
2 | .def temp3 = r23 |
machen.
Danke für den Beitrag, jedoch hab ichs versucht und es kommen zwei weitere Fehlermeldungen. D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\LCD2.asm(1): Including file 'F:\Programme\Atmel\AVR Tools\AvrAssembler2\Appnotes\m8515def.inc' D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\LCD2.asm(28): Including file 'D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\lcd-routines.asm' D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\lcd-routines.asm(12): warning: .def: 'temp2' redefinition (r22->r22) <--------- !!! D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\LCD2.asm(28): info: 'D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\lcd-routines.asm' included from here D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\LCD2.asm(4): info: previous definition of 'temp2' D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\lcd-routines.asm(12): warning: Register r22 already defined by the .DEF directive <--------- !!! D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\LCD2.asm(28): info: 'D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\lcd-routines.asm' included from here D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\lcd-routines.asm(13): warning: .def: 'temp3' redefinition (r23->r23) <--------- !!! D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\LCD2.asm(28): info: 'D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\lcd-routines.asm' included from here D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\LCD2.asm(5): info: previous definition of 'temp3' D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\lcd-routines.asm(13): warning: Register r23 already defined by the .DEF directive <--------- !!! D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\LCD2.asm(28): info: 'D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\lcd-routines.asm' included from here D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\LCD2.asm(25): warning: .cseg .db misalignment - padding zero byte <--------- !!! D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\LCD2.asm(29): No EEPROM data, deleting D:\Dokumente und Einstellungen\Stefan Schule\Eigene Dateien\LCD2\LCD2.eep
Dann schmeiß die .defs von "temp2" und "temp3" doch einfach ganz aus dem Code raus!
Hi, hab die Definitionen der Register r22 und r23 im Hauptprogramm entfernt. Nun zeigt er mir nur noch das padding zero Byte an... Aber trozdem wird der Text "Test" leider nicht angezeigt. Hab shcon mehrmals nen neues Projekt angelegt. Hat noch wer ne Idee ? MfG Stefan
Stefan T. wrote:
> Hat noch wer ne Idee ?
Ja.
Wenn dein Display ausser dem schwarzen Balken nichts weiter anzeigt,
dann liegt dein Problem nicht an Registerdefinitionen sondern
schlicht une ergreifend daran, dass dein Display nicht korrekt
initialisiert wird.
Durchsuch das Forum. Genau dieses Problem tritt mittlerweile
jeden Tag mindestens 5 mal auf.
... mach ich, aber wenn das display nciht richtig initialisiert wird, müsste es doch auch bei der Übertragun der eunzelnen Zeichen, nichts anzeigen... Oder liege ich da falsch ? MfG Stefan
Stefan T. wrote: > ... mach ich, aber wenn das display nciht richtig initialisiert wird, > müsste es doch auch bei der Übertragun der eunzelnen Zeichen, nichts > anzeigen... Oder liege ich da falsch ? > Wenn das Display richtig initialisiert ist, dann verschwinden erst mal die schwarzen Balken. Daran erkennt man, dass die Initialisierungssequenz korrekt abgearbeitet wurde und dass die Hardware korrekt verdrahtet ist, bzw. das Programm auch die richtigen Pins bedient.
Hab herumgesucht, doch nichts gefunden ! Daraufhin habe ich mir einmal die Codes ausgedruckt und nachgesehen... Kann es sein, dass der Fehler hier liegt `? ; Initialisierung: muss ganz am Anfang des Programms aufgerufen werden lcd_init: <------------------------------------\ push temp1 \ in temp1, LCD_DDR \ ori temp1, (1<<PIN_E) | (1<<PIN_RW) | (1<<PIN_RS) | 0x0F > out LCD_DDR, temp1 / / ldi temp3,6 <------------------------------------/ powerupwait: rcall delay5ms MfG Stefan
Hallo K. H. Buchegger, ich habe leider deine Frage nicht verstanden. MfG Stefan
Stefan T. wrote:
> ich habe leider deine Frage nicht verstanden.
Ich glaube, du verstehst gerade so vieles nicht. Durch Zeilen tauschen
und code-raten wirst du jedenfalls nicht weiterkommen.
Vieleicht hälst du dich erstmal an dem, was dir gesagt wird: Wird das
Display richtig initialisiert, verschwinden die Balken.
Zeigt dein Display schwarze Balken?
Ja, das hatte ich doch bereits erwähnt. Er zeigt lediglich den Schwarzen Balken an, was darauf hinweist, dass das Display nicht oder nicht richtig initialisiert wurde.... Deshalb dachte ich ja, dass in den oben geposteten Zeilen vielelicht der Fehler der Initialisierung vorliegt. Denn die darauffolgenden Zeilen habe ich mit Hilfe der Erklärungen aus dem Tutorial bereits einmal überprüft und konnte nichts feststellen. MfG Stefan
Stefan T. wrote: > Hallo K. H. Buchegger, > > ich habe leider deine Frage nicht verstanden. Ev. hab ich dich missverstanden. Für mich sieht es so aus, als ob du den ldi temp3, 6 vorziehen willst. Aber ich seh gerade, dass deine Grafik wahrscheinlich so was wie eine Klammer sein soll. in temp1, LCD_DDR \ ori temp1, (1<<PIN_E) | (1<<PIN_RW) | (1<<PIN_RS) | 0x0F > out LCD_DDR, temp1 / Wenn du LCD_DDR richtig eingetragen hast; PIN_E, PIN_RS auch dem entsprechen was du verdrahtet hast, dann gibt es keinen Grund warum das fehlerhaft sein soll. Achtung: PIN_E, PIN_RW, PIN_RS können nur im Bereich 4 bis 7 sein, da dir Port Bits 0 bis 3 bereits für die Datenleitungen benutzt werden und auch nicht geändert werden können ohne den Code massiv umzubauen. Checkliste: *********** Mit welcher Taktfrequenz arbeitet der Prozessor? Tut er das auch wirklich, oder vermutest du das nur? a) Ist die Taktfrequenz richtig eingetragen (falls der Assembler aus der Taktfrequenz die Verzögerungsschleifen berechnet) b) Wurden die Delay-Konstante entsprechend der Taktfrequenz angepasst (falls der Assembler das nicht von alleine machen soll) Wie und wo ist das LCD angeschlossen? Hast du auch die richtigen Eintragungen für die Anschlusspins im Code vorgenommen?
Ja, haha.. es sollte eine Klammer sein, welche den Bereich des Codes markiert, inwelchem ich den Fehler vermutete. Dann verstehe ich auch deine Frage ! Nun denn werde ich nochmal ganz genau die Verdrahtung überprüfen udn hoffen, dass ich dort etwas finde. Mit freundlchen Grüßen und großes Dank an alle Beitragleistenden Stefan Re Checkliste: ... Ich arbeite mit dem AMEGA8515 mit 4 MHZ ... Pins waren wie zuvor verbunden(Ausgabe eines Textes anhand einzelner Zeichen) ... Taktfrequenz wurd nicht den Delays angepasst, werd mal nachsehen, ob sie angepasst werden muss. LCD ist an PortD angeschlossen, so wie an Anfang des LCD-Tutorials beschrieben...
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.