Problem beim ansprechen eines LCDs über MEGA8

Gast #237259
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.
Angehängte Dateien:
Gast #237260
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.
Gast #237261
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 ?-)
#237262
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
Gast #237263
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.
#237264
..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
Gast #237265
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 :)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.