www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD Initialisierung


Autor: Alex (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich versuche gerade das LCD 161 A zu initialisieren und bin dabei der 
Anleitung aus dem Tutorial gefolgt. Nur ist meine Pinbelegung etwas 
anders:
RS:  PD0
E:   PD1
DB4: PD4
DB5: PD5
DB6: PD6
DB7: PD7
und habe die LCD Routine entsprechend abgeändert (s. u.). Nun sende ich 
das Programm an den µC und die vormals 8 dunklen Kästchen verschwinden 
und das gesamte Display füllt sich mit helleren Kästchen. Zwar ist das 
Forum voll mit Beiträgen zu dieser Art Fehler, auch bei gleichem 
Display, aber leider hat mir keiner der Beiträge helfen können.
Ich nehme mal an, dass ich beim Umschreiben irgendetwas vertauscht habe. 
Ich kann aber leider nicht finden was, obwohl ich schon einige Male das 
Programm durchgelesen habe. Im Datenblatt finde ich leider nichts zur 
4bit Initialisierung, die Anweisung auf S. 6 ( 
http://www.microcontroller-online.de/microcontroll... 
) scheinen nur für den 8bit Modus zu gelten.

Hier ist das Test-Programm, die LCD Routine ist im Anhang:
.include "m8def.inc"

.def tmp1 = r16
.def tmp2 = r17
.def tmp3 = r18

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

           ldi tmp1, 0xFF    ; Port D = Ausgang
           out DDRD, tmp1

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

           ldi tmp1, 'T'     ; Zeichen anzeigen
           rcall lcd_data

           ldi tmp1, 'e'     ; Zeichen anzeigen
           rcall lcd_data

           ldi tmp1, 's'     ; Zeichen anzeigen
           rcall lcd_data

           ldi tmp1, 't'     ; Zeichen anzeigen
           rcall lcd_data

loop:
           rjmp loop

.include "LCD_routines.asm"            ; LCD-Routinen werden hier 
eingefügt

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alles klar, habe meinen Fehler gefunden, habe an den Stellen in der LCD 
Routine an denen ein Unterprogramm aufgerufen wurde, auch die Bits 
vertauscht, als wenn sie auf das PortD ausgegeben werden....

Ic hätte aber noch eine andere Frage, in der LCD_Test.asm Datei aus dem 
Tutorial werden oben die Stackpointer definiert:
 ldi tmp1, LOW(RAMEND)      ; LOW-Byte der obersten RAM-Adresse
 out SPL, tmp1
 ldi tmp1, HIGH(RAMEND)     ; HIGH-Byte der obersten RAM-Adresse
 out SPH, tmp1

Nach dem ich den Artikel Stack gelesen habe, ist dieses wohl notwendig, 
damit das Programm weiß, wo es nach den "rcall" aufrufen im 
Hauptprogramm weiter geht. Läßt man die Pointer weg, erscheint auf dem 
Display: TEST||||
(wobei | für einen Balken steht). Müsst das Display nicht eigentlich 
leer sein, da das Programm nicht über das "rcall lcd_init" hinweg kommt?
Vielleicht könnt mir jemand erklären, wie das Programm ohne den 
Stackpointer abläuft.
Danke schon mal.

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.