Hi zusammen, bevor mich jemand steinigt: Ja ich weiß, dass es schon etliche Threads zu HD44780 Displays gibt und sehr viele davon habe ich auch schon gelesen und die Ergebnisse daraus mehr oder weniger kombiniert. Trotzdem läuft mein Treiber immer noch nicht, obwohl er sich inzwischen fast vollständig mit den gängigen Code-Snippets deckt. Und zwar habe ich das Phänomen, dass große 'W's mir irgendwie immer alles Zerschießen. "Hello" in Endlosschleife ist zB. kein Problem. Bei "HelloWorld" geht ab dem W alles kaputt. Ich fürchte, mein Display ist wahrscheinlich defekt, habe aber leider gerade kein Ersatz hier. Daher die Bitte, könnte jemand von euch vielleicht einfach mal meinen Treiber auf seinem Display testen? Er ist ausgelegt für 2*16 Zeichen und die Pin-Belegung ist komplett über Defines. Sollte also kein Problem das schnell anzupassen. Es geht erstmal nur um die Ausgabe von Chars. Die anderen Funktionen für Zahlen und so mach ich später noch. Wenns bei euch läuft, bestell ich mir nen neues Display und gut. Vielen Dank! Gruß Flo
Da hast du dir mal wieder die akademischte Variante rausgesucht. Ich tippe mal auf einen Verdrahtungsfehler. MFG Falk
Schön wäre es auch wenn du die Portbelegung schreiben würdest, dann müsste man nicht suchen, Kontroller wäre auch nett.
Die Belegung bei mir: Ich verwende aber auch sonst überall im Quelltext nur diese Defines. Habe auch die Verdrahtung nochmal überprüft. Bin inzwischen echt ratlos...
1 | #define LCD_PORT PORTA
|
2 | #define LCD_PORT_DDR DDRA
|
3 | #define LCD_PORT_PIN PINA
|
4 | |
5 | // The least significant data bit (of 4) in LCD_PORT:
|
6 | #define LCD_DATA 4 // pins 4,5,6,7
|
7 | |
8 | // The ENABLE bit of the lcd in LCD_PORT:
|
9 | #define LCD_ENABLE 1
|
10 | |
11 | // THE RS connector of the lcd in LCD_PORT:
|
12 | #define LCD_RS 0
|
13 | |
14 | // THE R/W connector of the LCD in LCD_PORT:
|
15 | #define LCD_RW 2
|
Der Controller ist ein ATmega32
Der Code ist mir suspekt. Nimm den Code aus dem Tutorial, der ist deutlich einfacher und läuft. http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung MFG Falk
>Der Code ist mir suspekt.
Macht doch nichts;)
@Florian
Bei mir läuft der Code. Allerdings mit einer Änderung
weil meine RW Leitung auf Masse liegt. Statt BusyCheck einfach
ein freches _delay_ms(5); benutzt. RS und Enable liegen bei mir
auf Pin2 (RS), Pin3 (E).
Kann ich leider nicht, da die Displayverdrahtung auf meinem Board fest ist und die Datenbits halt auf 4-7 statt 0-3 liegen. Im Treiber aus dem Tutorial sind die Bits leider hardgecodet (was ich übrigens sehr schade finde). Ich habe aber mit genau dem Treiber angefangen und eigentlich nur überall die Datenbits entsprechend geshiftet. Das Pollen des Busy Flags habe ich erst später eingebaut, als es mit Delays (wie im Tutorial) auch nicht geklappt hat. Nach dem ersten W wird fast jeder Buchstabe zum "V", obwohl ich ein "o" sende und eigentlich die richtigen Daten am Ausgang anliegen. Will ja nur wissen, ob bei euch die gleichen Probleme auftreten oder ob es läuft. Gruß Florian
@holger: Ah danke dir! :) Mit R/W auf GND hab ich es auch erst versucht. Gab die gleichen Fehler. Dann hol ich einfach nen neues Display und es sollte gehen.
Florian schrieb: > Kann ich leider nicht, da die Displayverdrahtung auf meinem Board fest > ist und die Datenbits halt auf 4-7 statt 0-3 liegen. > Im Treiber aus dem Tutorial sind die Bits leider hardgecodet (was ich > übrigens sehr schade finde). Dann hol dir die Fleury Lib. Bei der kannst du jedes Signal auf einen eigenen Portpin legen, wenns denn sein muss.
Ich mags lieber klein, einfach und universell: http://www.mikrocontroller.net/attachment/30300/lcd_drv.zip Peter
Bei wars ein defekter Portpin bzw auch Kontakfehler zum Portpin. :)
Ich verwende auch dir lib von Fleury, funktioniert immer. Wenn ich in deinem Code für die DATA PortA 4 bis 7 nehme dann initialisiert das LCD nicht mal. Bei DATA PortA 3 bis 6 habe ich den gleichen Fehler wie du beschrieben. Wobei anfangs das o und W einige male kommen und dann erst wirre Zeichen. Mein Display ist sicher nicht defekt. Der Fehler liegt also sicher in deinem Code.
Hallöchen.. Wie sieht es mit Zeichen vor und hinter dem "W" aus. Werden die korrekt angezeigt. Falls ja, gäbe es noch die Möglichkeit ein eigenes Zeichen im RAM des Displayscontrollers abzulegen und dieses Zeichen statt des "W" zu benutzen. Allerdings ist die Textausgabe dann etwas komplizierter. Zur Fehlerursache: Fehler kann ein Kurzschluss auf einer der vier Datenleitungen sein. Du solltest jede Leitung auf Verbindung zur Masse oder 5 Volt hin überprüfen. Ferner passiert es häufig, das durch nicht so gutes löten, zwei benachbarte Leitungen eine Verbindung haben. Gruß Rolf
Hey, danke für die vielen Ratschläge! :-) Werde jetzt zuerst mal die Fleury lib ausprobieren und danach nochmal meinen Code durchsuchen. @Hubert: Gut zu wissen. Dann muss da tatsächlich noch irgendwo ein Bug drin sein. Danke auf jeden Fall. Jetzt hab ich wieder ein paar Ansatzpunkte. Gruß Flo
das Timing im Originalprogramm ist nicht sauber. R/W und E werden beim Lesen gleichzeitig angelegt. Das darf aber nicht gleichzeitig sein, da E die anderen Informationen eintaktet. Das HD44780-Datenblatt gibt einen Vorlauf von mindestens 60 ns an, in dem alle anderen Daten stabil sein müssen, bevor E angelegt wird. Das ist mit Sicherheit nicht gewährleistet. Zudem wird der Lesevorgang gestartet, während die MCU noch auf Output geschaltet ist. Erst im nächsten Schritt wird dieser potentielle Bus-Kurzschluss beendet. Andere Teile habe ich nicht mehr angeschaut.
>Werde jetzt zuerst mal die Fleury lib ausprobieren und danach nochmal >meinen Code durchsuchen. >@Hubert: Gut zu wissen. Dann muss da tatsächlich noch irgendwo ein Bug >drin sein. >Danke auf jeden Fall. >Jetzt hab ich wieder ein paar Ansatzpunkte. Ich tippe auf den BusyCheck;) Dein Code läuft bei mir mit drei unterschiedlichen Displays sehr gut ohne den Busy Blödsinn.
Soo, die Verdrahtung ist korrekt, die Fleury Lib läuft einwandfrei. Mein eigener Code aber immer noch nicht. Auch wenn ich den ganzen Busy Kram weglasse und R/W mit Ground verbinde. Aber was solls, dann werde ich wohl erstmal mit der fertigen Lib arbeiten. Danke übrigens für die Hinweise zu den Fehlern im Lese-Teil. Das hätte mir eigentlich selbst auffallen müssen. Gruß Florian
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.