Hallo zusammen,
ich würde gerne folgendes Byte an mein LCD senden:
1
PORTD = &b01010000
Da ich aber nur PORT D.0 bis D.3 verwende, da ich es im 4 Bit Modus
betreiben will, wie muss ich dass Byte dann zerlegen?
Erst das ober Nibble(0101) und dann das untere(0000), oder andersrum?
btw.: Meine Daten
µC = ATmega 8515L
LCD = AV1624
Bascom
Dennis Brenzel schrieb:> Hab ich schon. Dort wird beschrieben, dass das untere Nibble im 4 Bit> Modus irrelevant ist.
Moment.
Das ist aus Sicht des LCD.
Das LCD holt sich von seinen 8 Datenleitungen die Bits dann nur noch von
den oberen 4 Leitung.
Das bedeutet für dich erst mal: Die 4 Datenleitungen, auf denen du Daten
schickst, kommen am LCD an D4-D7
Das hat für deine Programmierung erst mal keine Bedeutung. Die 4
angeschlossenen Leitungen musst du trotzdem mit den Nibbles in der
Reihenfolge 'oberes Nibble' / 'unteres Nibble' (gemeint sind die Nibbles
des zu übertragenen Datenbytes) beschicken.
> Da ich aber nur PORT D.0 bis D.3 verwende
Warum steuerst du dann nur die oberen Portleitungen an?
> Meine Init-Routine sieht momentan so aus:
Wo wird hier die Enable-LKeitung angesteuert?
Nur mal zur Verdeutlichung: Wie ist jetzt denn eigentlich jede Leitung
des LCDs wo am Controller angeschlossen?
Dennis Brenzel schrieb:> Ja, aber was im unteren Nibble steht ist ja egal, also ob da &b0000 oder> &b1111 steht.
Das kann man so nicht sagen.
Dazu muss man wissen, wie genau deine Leitungen angeschlossen sind.
Lothar Miller schrieb:>> Da ich aber nur PORT D.0 bis D.3 verwende> Warum steuerst du dann nur die oberen Portleitungen an?
Das ist mir ja jetzt aufgefallen.
>> Meine Init-Routine sieht momentan so aus:> Wo wird hier die Enable-LKeitung angesteuert?
Am PD5 angeschlossen
> Nur mal zur Verdeutlichung: Wie ist jetzt denn eigentlich jede Leitung> des LCDs wo am Controller angeschlossen?
PD.0 = DB4
PD.1 = DB5
PD.2 = DB6
PD.3 = DB7
PD.4 = RS
PD.5 = E
GND = RW, DB0 - DB3
Waitms 500
Config Portd = Output
'Portd = &B00100000
Portd = &B00100000
Portd = &B10000000
Kannst du das nicht so formulieren, dass man das auch verstehen kann?
In BASCOM kann man doch jedem Bit an jedem Port mittels Alias einen
Namen gaben. Das würde schon mal helfen, wenn da
LCD_E = 1
bzw.
LCD_E = 0
stehen würde, anstatt da ständig den Port komplett neu zu beschreiben
(was wahrscheinlich sowieso falsch ist, denn dadurch veränderst du ja
auch den Zustand der Datenleitungen)
Dennis Brenzel schrieb:> Ich muss ja die Datenleitungen immer neu Beschreiben, um dass Display zu> initialisieren.
Von deinem Ausgabeport
Portd = &B00100000
Portd = &B10000000
||||
||||
sind das hier -++++
die Datenbits, die am LCD auf den Datenleitungen D4-D7 landen.
Jetzt schau dir die geforderte Initialisierung an. Da steht sicher
nicht, dass du lauter 0-en anlegen musst
Ich kann dir nur empfehlen, die einzelnen Leitungen am Port per Namen
aufzudröseln. Du legst dir nur selber Fallen mit den ganzen 0-en und
1-an die an den richtigen Bitpositionen auftauchen müssen
Dennis Brenzel schrieb:> Ja, dass ist mir ja passiert. Ich hab alles aufs obere Nibble> geschrieben, welches ja anschlusstechnisch "in der Luft hängt".
Den Satz versteh ich jetzt nicht.
Für dich ist doch nur relevant, welche Leitung vom LCD wo in deinem Port
auftaucht.
Sobald dir das klar ist
7 6 5 4 3 2 1 0
+---+---+---+---+---+---+---+---+
| | | E | RS| D7| D6| D5| D4|
+---+---+---+---+---+---+---+---+
ist auch klar, welches Bit im Port in welcher Reihenfolge welchen Pegel
einnehmen muss
Portd = &B00000011 eine 3 an die Datenpins, E auf Low
Portd = &B00100011 weiterhin die 3 an den Datenpins, E auf High
Portd = &B00000011 die 3 bleiben, aber E geht wieder auf Low
Damit hast du:
An den Datenpins lag die ganze Zeit eine 3 an. Aber an E wurde ein 0-1-0
Puls erzeugt, der dafür sorgt, dass das LCD die an den Datenpins
anstehende 3 übernimmt. RS war zum Zeitpunkt des E-Pulses die ganze Zeit
Low -> Controlbyte, ebenso wie R/W
Das deine Datenleitungen am LCD D7-D4 sind, ist bei der Programmierung
ziemlich irrelevant. Für dich ist nur wichtig, dass du hier ein Nibble
aus den zu übertragenden Daten anlegen musst, und zwar in der
Reihenfolge: zuerst High-Nibble, dann Low-Nibble. (jetzt mal von den
ersten zu übertragenden Controlworten abgesehen, mit denen man das LCD
in den 4-Bit Modus bringt)
Dann solltest du eventuell mal die Tutorien auf dieser Seite studieren.
Die sind zwar für Assembler bzw. C gedacht, aber die zugrundeliegenden
Prinzipien sind überall gleich. Ob man einen Port in Assembler, in C
oder in BASCOM bedient, ist für das Programm nur eine syntaktische
Feinheit. Entscheidend ist, welche Pegel die Pins am µC nacheinander
annehmen müssen. Und das hängt nicht von der Programmiersprache ab,
sondern von der Reihenfolge, in der die entsprechenden Aktionen gemacht
werden.