Forum: Compiler & IDEs Problem beim ansprechen eines LCDs über MEGA8


von David Zacharias (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen!

Steige gerade in die C Programmierung von Mikrokontrollern ein und habe
da ein Problem mit dem Ansprechen eines LCDs. Es werden immer nur
schwarze Balken ausgegeben... ist in meinem Quellcode etwas falsch oder
bin ich einfach nur zu dumm?

Habe mir folgendes Board besorgt:
http://www.e-lab.de/components/lcd_and_keyboard.html   und davon das
"Mega8 Terminal Board CAN"
und verwende den WinAVR zum programmieren.

von Kiwi (Gast)


Lesenswert?

Du musst mal in Datenblatt nachschlagen. In der Regel kann man den
Kontrast eines Displays mit Hilfe eines Potis einstellen. Es könnt
sein, dass durch das auf GND legen dieses Pins, der Kontrast immer
maximal ist und somit jede Ausgabe als schwarzer Balken erscheint.

von David Zacharias (Gast)


Lesenswert?

den verdacht habe ich mittlerweile auch. Es gibt zwar ein Poti auf dem
oard aber egal wie man das dreht, am Kontrast ändert sich nix :(
Obwohl laut Messgerät verschiedene SPannungen am Display ankommen ?-)

von Klaus K. (leo9)


Lesenswert?

Hallo David,
ich habe zwar den source und die Schaltung nur diagonal gelesen aber
ich denke der Fehler liegt in der SW. In der init_display gehen alle
Befehle ins Leere (das LCD ist ja wohl nur mit vier Bit Bus
angeschlossen) bzw. gibst du vier mal "0000" aus. Ich finde auch
keine Ausgabe um das LCD in 4 Bit Modus zu setzen (0010xxxx).

grüsse leo9

von David Zacharias (Gast)


Lesenswert?

tjo, hätte vielleicht die verkabelung angeben sollen :)

Die 4 Datenbits liegen an PD0-PD3 an
Das Enable-Bit liegt an PD4 an
Das RS-Bit geht über PD5
R/W läuft über PD6

Bei der Verkabelung sollte das ganze eigentlich klappen oder mach ich
da nen grundlegenden Fehler??
die Initalisierung hab ich aus dem Datenblatt des Displaycontrollers.

von Klaus K. (leo9)


Lesenswert?

..auch so herum klappts nicht:
Du schickst erst 00000011 (->4Bit Mode) an das LCD (welches zu diesem
Zeitpunkt noch 8 Bit "spricht"). Sind D0..D3 am LCD mit GND
verbunden, sonst könnte es sein dass das LCD xxxx0011 "sieht". Sprich
der erste Befehl könnte undefiniert sein.

Danach schickst du nochmals 00000011 (kommentierst es aber als Disp
on/off statt wie vorher Function set) mit einem Enable Puls an das
(falls der vorherige Befehl geklappt hat) nun 4Bit sprechende LCD. Dies
wartet nun auf den nächsten Enable Puls um einen ganzen Befehl zu
bekommen. Zusammen mit 00000001 (Disp clear) hat das LCD nun
00110001 "gelesen". -> was sicher Unsinn ergiebt.

Entry Mode Set ist dann wieder ein "erster" Enable Puls und das LCD
wartet wieder auf einen zweiten. Und ab nun sendest du mit daten_senden
und das LCD setzt jedes Byte aus vier Bit der letzten und vier Bit der
aktuellen Daten zusammen.

Ich hoffe das war einigermaßen verständlich?

grüsse leo9

von David Zacharias (Gast)


Lesenswert?

ok, ich verstehe was du meinst. werde das mit dem Ground und die ganze
initialisierung nochmal prüfen.
Die Kommentare können unter umständen nicht ganz dem entsprechen was
tatsächlich dort geschieht, hab da relativ viel dran rumgebastelt...

Werde mich Melden was die analyse ergeben hat :)

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
Noch kein Account? Hier anmelden.