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
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.
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
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
Oh yeah. Den E-Pin habe ich voll vergessen. SChon lange her, daß ich den Display-Treiber geschrieben habe :)
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.