Forum: Mikrocontroller und Digitale Elektronik Probleme bei LCD Display Darstellung


von Daniel B. (daniel10)


Angehängte Dateien:

Lesenswert?

Hallo liebe Forengemeinde.
Ich schreibe hier, in der Hoffnung, das sich hier jemand finden lässt, 
der mir kurz erklären kann, was in meinem Programm in die Hose geht.

Ich möchte gern ein EA-204-4 Dip Display mit einem Atmega8 ansteuern.
Die LCD-Datenleitungen habe ich an Pins PC0-3 angeschlossen.
Ebenso frage ich das Busy-Flag ab.
Ich bin der Meinung, das meine Display-Initialisierung funktioniert, da 
es die gleiche ist, wie ich sie auch schon auf einem ATtiny24 laufen 
hatte. Da gab es keine Probleme. Die Probleme fingen damit an, das ich 
die LCD-Routinen aus dem Tutorial dieser Seite verwenden wollte.

Ich bin ja schon glücklich, auf dem Display jetzt endlich überhaupt 
etwas lesen zu können. Aber hier hört es auch schon auf.

Es gibt mehrere Probleme:
1. Der angezeigte Text ist immer um eine Spalte nach rechts versetzt und 
das letzte Zeichen fehlt.
2. In meinem Programm gibt es einen Punkt "posi", damit wollte ich 
ausprobieren, ob ich einzelne Zeilen beschreiben kann.
Wenn ich nun die Zeilen Adresse in Temp0 lade, kann ich keine Zeile 
wechseln und ich habe an der ersten Spalte das dem Binärcode im Register 
entsprechende ASCII-Zeichen vor meinem Text stehen.
Ändere ich nun das Register in Temp1, kann ich die Zeile wechseln, 
allerdings wieder mit komischen Zeichen vor dem Text.
Das verstehe ich nicht, weil ich Temp1 garnicht in der 
LCD-Befehlsroutine verwende.
3. Dann habe ich in meinen LCD Routinen auskommentierte Befehle stehen, 
damit wollte ich bezwecken, das ich die anderen Pins an Port C nicht 
beeinflusse, wenn ich das Display beschreibe. Von meinem jetztigen 
Standpunkt kann ich da aber keinen Fehler feststellen, funktioniert 
trotzdem nicht.

Evtl. Weiß jemand Rat, wäre ihm sehr dankbar, doktore schon seit zwei 
tagen daran rum :-(

Mit freundlichen Grüßen Daniel

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Datenblatt:
http://www.lcd-module.de/eng/pdf/doma/dip204-4e.pdf

Auf Seite 3 steht eine Beispiel-Initialisierung, allerdings 8bit.
Sollte aber kein Problem sein, Diese in 4bit umzuarbeiten.

Denke, Dir fehlt, daß Dein Display Mehrzeilig ist, habe Deinen Code aber 
nur überflogen.

MfG

PS: Da Du 'was lesen kannst', gehe ich davon aus, daß die zwei Balken 
(nur Power am Display) verschwunden sind und Du Text lesen kannst.
Sonst: Kontrast-Spannung anpassen

: Bearbeitet durch User
von Martin B. (Gast)


Lesenswert?

so gewollt?

Busy:
  push  Temp0      ; Temp0 auf Stapel legen
  push  Temp1

...

        pop  Temp0
  pop  Temp1
  ret                ; zurück

von Daniel B. (daniel10)


Lesenswert?

Martin B. schrieb:
> so gewollt?
>
> Busy:
>   push  Temp0      ; Temp0 auf Stapel legen
>   push  Temp1
>
> ...
>
>         pop  Temp0
>   pop  Temp1
>   ret                ; zurück


Wenn ich die pushs und pops lösche, zeigt mir das display komischerweise 
nichts mehr an.
Irgendwo muss ein Wurm drin sein, oder mehrere. Verzweifle langsam 
daran.

von Heinz V. (heinz_v)


Lesenswert?

Daniel B. schrieb:
> Wenn ich die pushs und pops lösche, zeigt mir das display komischerweise
> nichts mehr an.
> Irgendwo muss ein Wurm drin sein, oder mehrere. Verzweifle langsam
> daran.

Nein nicht löschen, nur Du vertauschst Temp1 und Temp0

push Temp0  ;legt den Inhalt von Temp0 oben auf den Stapel
push Temp1  ;legt den Inhalt von Temp1 darüber
....
pop Temp0  ;schreibt den Inhalt des obersten Stapelelements in Temp0
(Das war aber vorher der Inhalt von Temp1)
pop Temp1  ; nimmt das nächste Element vom Stapel und schreibt es in 
Temp1
(Das war aber Vorher der Inhalt von Temp0)

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Wenn Du in der Reihenfolge pusht:
push Temp0
push Temp1

Dann musst Du in UMGEKEHRTER Reihenfolger wieder vom Stack runter holen, 
also

pop Temp1
pop Temp0

Da Du sonst die Werte vertauscht.

Ist, wie der Name vermuten lässt, ein Stapel-Speicher.
Alles wird einzeln oben drauf gelegt und ebenso von oben wieder runter 
genommen.

MfG

PS: pöh ... dann eben nicht :P (nächstes Mal beeile ich mich mehr)

: Bearbeitet durch User
von Martin B. (Gast)


Lesenswert?

Entschuldige mich für die knappe Antwort.
Ich dachte, es ist ein Flüchtigkeitsfehler und der Grad der Verzeiflung 
war mir leider nicht bewusst.

von Daniel B. (daniel10)


Lesenswert?

Patrick J. schrieb:
> Hi
>
> Wenn Du in der Reihenfolge pusht:
> push Temp0
> push Temp1
>
> Dann musst Du in UMGEKEHRTER Reihenfolger wieder vom Stack runter holen,
> also
>
> pop Temp1
> pop Temp0
>
> Da Du sonst die Werte vertauscht.
>
> Ist, wie der Name vermuten lässt, ein Stapel-Speicher.
> Alles wird einzeln oben drauf gelegt und ebenso von oben wieder runter
> genommen.
>
> MfG
>
> PS: pöh ... dann eben nicht :P (nächstes Mal beeile ich mich mehr)


Oh man. Darauf wäre ich nie gekommen. Wäre der Meinung, der Mega8 weiß, 
wo er was hinlegt. Jetzt geht alles. Es wird ab er ersten Spalte 
beschrieben, ich kann die oberen 4 Pins von Port C ausmaskieren und kann 
problemlos Zeilen wechseln.
Hab mir das gerade mit Legosteinen im Kopf nachgebaut und es macht sehr 
viel Sinn.

Danke :-) :-) Ihr seit die bessten :-)

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
Noch kein Account? Hier anmelden.