mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit LCD - Tutorial


Autor: Stefan T. (_distance_07)
Datum:

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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
.def temp2 = r17
.def temp3 = r18
einfach
.def temp2 = r22
.def temp3 = r23
machen.

Autor: Stefan T. (_distance_07)
Datum:

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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann schmeiß die .defs von "temp2" und "temp3" doch einfach ganz aus dem 
Code raus!

Autor: Stefan T. (_distance_07)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Stefan T. (_distance_07)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Stefan T. (_distance_07)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was, bitte schön, soll das für einen Unterschied machen?

Autor: Stefan T. (_distance_07)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo K. H. Buchegger,

ich habe leider deine Frage nicht verstanden.

MfG

Stefan

Autor: Niels Hüsken (monarch35)
Datum:

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

Autor: Stefan T. (_distance_07)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Stefan T. (_distance_07)
Datum:

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

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.