Forum: Mikrocontroller und Digitale Elektronik Probleme bei LCD Display Darstellung


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Daniel B. (daniel10)


Angehängte Dateien:

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


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


Bewertung
1 lesenswert
nicht lesenswert
so gewollt?

Busy:
  push  Temp0      ; Temp0 auf Stapel legen
  push  Temp1

...

        pop  Temp0
  pop  Temp1
  ret                ; zurück

von Daniel B. (daniel10)


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


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


Bewertung
1 lesenswert
nicht 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. (martinbe)


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


Bewertung
2 lesenswert
nicht 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 :-)

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]
  • [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.