mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bits an LCD übertragen


Autor: Dennis Brenzel (danrulz81)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich würde gerne folgendes Byte an mein LCD senden:
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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erst oben, dann unten

Autor: Joachim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Was sagt denn das Datenblatt des LCD dazu?

Gruß
Joachim

Autor: Joachim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Z.B.:

http://elektronik.kai-uwe-schmidt.de/projekte/data...
Aber nachlesen mußte selber.

Nochmal Gruß
Joachim

Autor: Dennis Brenzel (danrulz81)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab ich schon. Dort wird beschrieben, dass das untere Nibble im 4 Bit 
Modus irrelevant ist. Meine Init-Routine sieht momentan so aus:
Waitms 500
 Config Portd = Output
 'Portd = &B00100000
 Portd = &B00100000
 Portd = &B10000000
 Waitms 10
 Portd = &B00000000
 Portd = &B11000000
 Waitms 10
 Portd = &B00000000
 Portd = &B00010000
 Waitms 30
 Portd = &B00000000
 Portd = &B01100000
 Waitms 500

Mir ist jetzt aber aufgefallen, dass ich ja nicht alle PortD Pins 
verwende, also heißt das doch: Nibbles schicken.

Autor: Dennis Brenzel (danrulz81)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Joachim schrieb:
> Z.B.:
>
> http://elektronik.kai-uwe-schmidt.de/projekte/data...
> Aber nachlesen mußte selber.
>
> Nochmal Gruß
> Joachim

Das ist schon wieder ein anderes Datenblatt. Ich hab die Routine nach 
dem Datasheet vom KS0066 geschrieben.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

Autor: Dennis Brenzel (danrulz81)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, aber was im unteren Nibble steht ist ja egal, also ob da &b0000 oder 
&b1111 steht.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Dennis Brenzel (danrulz81)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Dennis Brenzel (danrulz81)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich muss ja die Datenleitungen immer neu Beschreiben, um dass Display zu 
initialisieren.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Dennis Brenzel (danrulz81)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, dass ist mir ja passiert. Ich hab alles aufs obere Nibble 
geschrieben, welches ja anschlusstechnisch "in der Luft hängt".

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Dennis Brenzel (danrulz81)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah, o.k. Das mit wusst ich auch noch nicht. Man lernt halt nie aus, wenn 
man sich mit etwas beschäftigt.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Dennis Brenzel (danrulz81)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, die hab ich schon durch, auch auf anderen Seiten, nur hab ich 
irgendwie immer das mit dem "E"-Bit überlesen. Peinlich peinlich.

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.