www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik HD44780 Treiber laufen nicht


Autor: Florian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

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

MFG
Falk

Autor: Hubert G. (hubertg)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...
#define LCD_PORT      PORTA
#define LCD_PORT_DDR    DDRA
#define LCD_PORT_PIN    PINA

// The least significant data bit (of 4) in LCD_PORT:
#define LCD_DATA      4 // pins 4,5,6,7

// The ENABLE bit of the lcd in LCD_PORT:
#define LCD_ENABLE      1

// THE RS connector of the lcd in LCD_PORT:
#define LCD_RS        0

// THE R/W connector of the LCD in LCD_PORT:
#define LCD_RW        2

Der Controller ist ein ATmega32

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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-Tu...

MFG
Falk

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich mags lieber klein, einfach und universell:

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


Peter

Autor: schon erlebt. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei wars ein defekter Portpin bzw auch Kontakfehler zum Portpin.

:)

Autor: Hubert G. (hubertg)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rolf Degen (rolfdegen)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.