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
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.
z.B. http://homepage.hispeed.ch/peterfleury/ Oder ca. 248451 Varianten, die hier bereits im Forum herumgeistern.
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.
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...
Ich hatte bisher fast immer Timingprobleme, wenn ein LCD nicht lief. Versuchs mal mit Wartezyklen oder einen geringeren Systemtakt.
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.
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ß?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.