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
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:
>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 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
Eine eigene Frage?
Dieser Thread ist über 16 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.