Forum: Mikrocontroller und Digitale Elektronik HD44780 Treiber laufen nicht


von Florian (Gast)


Angehängte Dateien:

Lesenswert?

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

von Falk B. (falk)


Lesenswert?

Da hast du dir mal wieder die akademischte Variante rausgesucht. Ich 
tippe mal auf einen Verdrahtungsfehler.

MFG
Falk

von Hubert G. (hubertg)


Lesenswert?

Schön wäre es auch wenn du die Portbelegung schreiben würdest, dann 
müsste man nicht suchen, Kontroller wäre auch nett.

von Florian (Gast)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

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

von holger (Gast)


Lesenswert?

>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).

von Florian (Gast)


Lesenswert?

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

von Florian (Gast)


Lesenswert?

@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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

Ich mags lieber klein, einfach und universell:

http://www.mikrocontroller.net/attachment/30300/lcd_drv.zip


Peter

von schon erlebt. (Gast)


Lesenswert?

Bei wars ein defekter Portpin bzw auch Kontakfehler zum Portpin.

:)

von Hubert G. (hubertg)


Lesenswert?

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.

von Rolf D. (rolfdegen)


Lesenswert?

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

von Florian (Gast)


Lesenswert?

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

von Hc Z. (mizch)


Lesenswert?

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.

von holger (Gast)


Lesenswert?

>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.

von Florian (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.