Forum: Mikrocontroller und Digitale Elektronik LCD mit KS0066 Controller Ansteuerung


von R. S. (torxx)



Lesenswert?

Hallo,

ich versuche mittlerweile schon den ganzen Tag ein LCD Display mit einem 
Atmega 88 anzusteuern. Funktioniert leider nicht wie ich mir das 
vorstelle, würde mich freuen wenn mal jemand über den Code drüberschauen 
könnte (siehe Anhang).

Das Display hängt an Port D. R/W ist auf GND. Auf Seite 4 in dem pdf 
findet sich die Initialisierungsbeschreibung.

Ich bin mittlerweile mit meinem Latein am Ende. Das Display zeigt 
während der Initialisierung kurzzeitig die erste Zeile komplett an, 
danach ist wieder dunkel. In jedem Fall werden aber keine Zeichen 
ausgegeben, obwohl ich keinen Fehler finden kann.

Grüße
von Klaus W. (mfgkw)


Lesenswert?

R. S. schrieb:
> Funktioniert leider nicht

1. das ist die SAU (schlechteste anzunehmende Umschreibung eines 
Fehlers).

2. Warum probierst du es nicht erst mit funktionierendem Code, z.B. aus 
dem Tutorial? Wenn das geht und du übermütig bist, kannst du doch immer 
noch stückweise zu deiner Variante umschwenken.
von Klaus W. (mfgkw)


Lesenswert?

z.B. http://homepage.hispeed.ch/peterfleury/

Oder ca. 248451 Varianten, die hier bereits im Forum herumgeistern.
von ... (Gast)


Lesenswert?

R. S. schrieb:
> Das Display hängt an Port D.

Geht's ein bisschen genauer?
Oder soll man sich das jetzt aus deinem Sourcecode raussuchen, nur damit 
sich hinterher rausstellt, dass das Display doch anders angeschlossen 
ist.
von R. S. (torxx)


Lesenswert?

Ich habe den Code von Peter Fleury bereits ausprobiert und auch die 
entsprechenden Änderungen in der Header Datei vorgenommen. Allerdings 
konnte ich das LCD so nicht zum Laufen bringen, sodass ich einen 
einfacheren Code gewählt und angepasst habe, der für mich etwas 
übersichtlicher, da kürzer, ist.

R/W ist dauerhaft mit GND verschaltet, DB4-DB7 sind an den Pins 0-3 von 
Port D, RS an Pin 4 und EN an Pin 5, ebenfalls jeweils an Port D.

Zum Thema SAU, ich will nochmal versuchen den Fehler genauer zu 
beschreiben: Während der Initialisierung leuchtet die erste Zeile des 
Displays (2*8 Zeichen) kurz auf, anschließend bleibt das Display dunkel. 
Ich gehe davon aus, dass der Fehler in der Initialiserung liegen muss.

Selbstverständlich erwarte ich nicht, dass hier jemand den gesamten 
Sourcecode auseinander nimmt. Ich hatte gehofft, dass sich vielleicht 
jemand mit mehr LCD Erfahrung mal die Initialisierung anschauen 
könnte...
von Jens A. (nepi)


Lesenswert?

Ich hatte bisher fast immer Timingprobleme, wenn ein LCD nicht lief. 
Versuchs mal mit Wartezyklen oder einen geringeren Systemtakt.
von Klaus W. (mfgkw)


Lesenswert?

R. S. schrieb:
> Ich habe den Code von Peter Fleury bereits ausprobiert und auch die
> entsprechenden Änderungen in der Header Datei vorgenommen. Allerdings
> konnte ich das LCD so nicht zum Laufen bringen, sodass ich einen
> einfacheren Code gewählt und angepasst habe, der für mich etwas
> übersichtlicher, da kürzer, ist.

Dann drängt sich der Verdacht auf, daß es auch an etwas anderem liegen 
könnte.

- Schaltung?
- Wie sicher bist du dir mit dem Takt?

In deiner lcd_init steht das hier:
1
  LCD_PORT=((1<<LCD_DB5)|(1<<LCD_DB5));
Es könnte vielleicht helfen, aus einer der Fünfen eine Vier zu machen?



BTW: die Definition von LCD_DB... in deinem Header ist für die Katz, 
weil du eh festverdrahtet die untersten Bits des Ports nutzst. Nicht das 
Problem hier, nur zur Sicherheit.
von Klaus W. (mfgkw)


Lesenswert?

R. S. schrieb:
> Ich gehe davon aus, dass der Fehler in der Initialiserung liegen muss.

Wenn es dann immer noch nicht läuft, kann man nach der Initialisierung 
ein paar Sekunden warten, bevor man etwas ausgibt - dann sieht man ob 
der Umschlag der Anzeige noch in der lcd_init kommt oder erst beim 
Schreiben.

Warum gibt man eigentlich 0b00110000 statt '0' aus? Damit jeder erst in 
der ASCII-Tabelle nachschlagen muß?
von R. S. (torxx)


Lesenswert?

Danke Leute!! Funktioniert :-) Besonders dir, Klaus, herzlichen Dank. 
Hilft immens, wenn nochmal jemand anderes drüber schaut.

Habe den Fehler mit LCD_DB5 behoben, die Delayzeiten verlängert und nach 
der Init noch eine Wartezeit eingefügt.

Dank und Gruß
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.