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
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
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
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...