www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik uralt, trotzdem Probs > 8bit LCD mit AVR+Asm


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

Bewertung
0 lesenswert
nicht lesenswert
Hi, hab vor ein oder zwei Wochen mit einem 2313 (den 4433 hab ich aus 
versehen gegrillt) angefangen ein LCD im 8Bit-Modus anzusteuern. Kam mir 
relativ N00p-freundlich vor. Ich habs jetzt auch geschafft das Teil zum 
Laufen zu bringen, hab mich ein bisschen am Tutorial orientiert und 
Routinen geschrieben. Jetzt ist aber das problem, dass der Cursor (bzw. 
das ganze erste Feld) blinkt, aber sonst nichts passiert...Ich hab 
wahrscheinlich irgendwas bei der Initialisierung falsch gemacht, 
vielleicht könntet ihr euch das mal anschauen.
Hier noch ein paar Daten, die vielleicht ganz nützlich sind:
LCD: HD44780 20x4 von reichelt
Programmer: Sercon 2 Mini
Software: "AT-prog" + AVR Assembler 1.30
AVR: 2313
Belegung: PB0-PB7 (AVR) ist DB0-DB7 (LCD) // RS=PD0 // E=PD1

MFG
bearmann2k

Anbei die Routinen im nächsten Post dann das eigentliche Programm (weiß 
leider nich, wie man 2 dateien gleichzeitig anhängen kann, sry)

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

Bewertung
0 lesenswert
nicht lesenswert
Hier das eigentliche Programm...es soll zum test nur ein Buchstabe 
ausgegeben werden...

MFG
bearmann2k

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!
Was ist mit Stack-Init, bei call's brauchst du den doch.
Ein Port-Init(Ausgang) finde ich auch nicht?????
Oder habe habe ich das übersehen?
Gruss Uwe

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bin wohl doch etwas erblindet. Port-Init ist ok, aber Stack fehlt 
irgendwie.
Gruss Uwe

Autor: bearmann2k (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antwort, obwohl sichs schon 16 Leute gesaugt haben, hat 
wohl abgesehen von dir noch keiner ne Idee...aber zurück zum Stack.

Stimmt, hab ich vergessen, ich hab das einfach mal aus dem Tutorial 
kopiert:

ldi r23, RAMEND  ;Stackpointer initialisieren
   out SPL, r23

Geht aber trotzdem nicht...jetzt blinkt in der 4. Zeile das erste 
Feld...

MFG
bearmann2k

Autor: bearmann2k (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat denn sonst keiner ne Idee, was ich falsch mach...hab damit echt erst 
angefangen und hab keinen Plan warums nich läuft !!!

MFG
bearmann2k

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ldi data, 'T'           ;"S" auf dem Display ausgeben
rcall lcd_data    ;lcd_data aufrufen

;????????????????? UND WIE GEHTS WEITER ????????????????????

.include "lcdrout.asm"  ;lcdrout einfügen


Dein Programm läuft also in  "lcdrout.asm" rein, kriegt nen 
Stack-underflow und schmiert ab.

Das ist so, wie einen Zug weiterfahren zu lassen, auch wenn keine 
Schienen mehr da sind.
Du kannst ihn ja z.B. im Kreis fahren lassen:

rjmp PC


Peter

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

Bewertung
0 lesenswert
nicht lesenswert
Hi, hab jetzt den Stack initialisiert und den rjmp Befehl eingefügt, 
aber es funzt trotzdem noch nicht. Die Verkabelung stimmt und der 
programmer is auch richtig. Hat irgendeiner ne Ahnung, woran es liegen 
könnte, dass es immernoch nich geht ?

hier nun der überarbeitet Quellcode.

MFG
bearmann2k

PS: @ Uwe, vielen Dank für die Mail !!!

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

Bewertung
0 lesenswert
nicht lesenswert
Hier das Programm...

Autor: bearmann2k (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab ich vergessen, der Cursor blinkt in der 4. Zeile im ersten Feld...es 
ist kein Buchstabe oder ähnliches zu sehn.

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Da haben wir doch was übersehen

sbi portd,1        ; RS auf High für Daten

RS ist doch auf PD0!!

Also sbi portd,0 !!!

Ändere das mal schnell, Auch weiter unten ist es falsch.

Gruss Uwe

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wer keine ".equ" Anweisungen benutzt, den bestraft das Leben !

Ich habs bei mir z.B. so gemacht:

.equ    lcd_ddr         = ddrb
.equ    lcd_port        = portb
.equ    lcd_e           = PB3
.equ    lcd_rs          = PB4
.equ    lcd_ck          = PB0

Und dann im Code:

sbi     lcd_port, lcd_rs


Peter

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.