LCD Pins einzeln Ansteuern?

Gast #48468
Lesenswert?
• ▲
▼
Hi,

hab ein Prob mit meinem LCD. Ist ein 2x16 mit HD44780 im 4-Bit-Mode.
Und zwar ist es bei mir nicht möglich dem LCD einen eigenen Port zu
spendieren. Also, ich kann´s nicht an PortA Bit0..5 hängen sondern muss
es über die Ports verteilen (Data an PortA 0..3; RS an PortC 0; E an
PortD 0; oder so).

Testweise hab ich es erstmal an einen Port gehängt, um die Ansteuerung
klar zu kriegen.

Problem: Wenn ich die Daten in einem Rutsch mit "out" an den Port
gebe funzt alles wunderbar. Aber wenn ich die Portpins einzeln setze
kommt nur Müll raus.

Den SourceCode hab ich mal drangehängt.

MfG
marco
Angehängte Dateien:
Gast #48469
Lesenswert?
• ▲
▼
Hm, 2 Möglichkeiten. Entweder Du versuchst Dein Datennibble erst mit
0x0f zu verunden, dann den Porta mit 0xf0 zu verunden und dann noch das
Datenbyte mit dem Port zu verunden. In diesem Fall liegen die 4
Datenleitungen ganz kurz gemeinsam auf 0. Sollte das nicht gehen kannst
Du noch ein Latch dazwischenschalten, mußt dann aber einen weiteren Pin
für die Latch-Freigabe opfern. Dummerweise gibt es beim LCD keine
Clock-Leitung, CS-Leitung oder dergleichen. Soweit ich weiß ist die
Busy-Leitung ReadOnly.
#48470
Lesenswert?
• ▲
▼
Das LCD ist quasi ein Latch, welches mit E die Daten übernimmt.

Alle anderen Pins müssen stabil bleiben, während E = 1 ist.

Oder anders gesagt, der Pin E muß als letztes auf 1 gesetzt werden,
dann min 1µs warten und E als erstes auf 0 setzen.

Solange E = 0 ist, kannst du die anderen Pins setzen wie Du lustig
bist.


Peter
Gast #48471
Lesenswert?
• ▲
▼
Eben so sieht es aus. Dein E-Pin am LCD verändert seinen Status nicht
und ist anscheinend immer HI. (oder immer LO)

Müsste so aussehen

Init: E= Low

Zeugs ans LCD senden:
-RS und RW setzen wie du sie brauchst
-4bit Daten anlegen
-5ns Pause
-E = HI
-5ns Pause
-E = LO
-zweite 4bit Daten anlegen
-5ns Pause
-E = HI
-2-5ns Pause
-E = LO

Gruss Malte
Gast #48473
Lesenswert?
• ▲
▼
das Enable kommt schon rüber so wie´s aussieht. Zumindest hüpft der
Cursor ab und zu durchs Display ( hab im Programm ne
Display-Shift-Schleife).

Ich denke mit der "LcdSet"-Routine muss irgendwas nicht stimmen.
Wenn ich die Schieberei überspringe und die Daten mit

;  out LcdPort,lcd ; Byte auf Ausgabeport

rüberschicke funzt es ja. Nur wenn ich mein Register "lcd" bitweise
nach links schiebe und jeweils entsprchend das Lcd-Bit setze (oder halt
nicht) gibt´s porbleme.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.