mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 4x20 LCD HD44780 probleme


Autor: Andreas Palm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Habe ein Problem:

Wenn ich das Display wie im Tutorial beschrieben verkabele, dann ist
das Datenbit6 immer auf high! Auch wenn das Display nur mit Strom
versorgt wird und nicht mit dem µC verbunden ist. Dadurch kann ich
natürlich keine Befehle senden, weil bit 6 und (im zweiten nibble) bit
2 immer high ist. Alle anderen Datenpins und auch die RS, RW, EN sind
open, so wie es ja auch sein sollte, oder???

Bin ich zu blöd dafür, oder gibts es da etwas was ich wissen müsste?

Hat da jemand einen Tipp???

Gruß
Andi

Autor: Andreas Palm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat niemand eine Idee diesbezüglich?

Ich hab einfach mal nen Pulldown dran gehangen... danach konnte der µC
das LCD ansteuern, aber sehr ungenau... teilweise werden die Befehle
von LCD falsch verstanden! und zwar genau an bit 2 oder bit 6 liegt
dann der falsche wert grrrr

Ist vielleicht der HD44780 defekt?

Hab leider kein zweites LCD zum testen da :(

Gruß
Andi

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sind deine Leitungen zum LCD zu lang? Hast du mal das Timing am
Controller etwas langsamer gemacht? HD44780's sind nicht die
schnellsten..

Autor: Andreas Palm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Zunächst mal danke für deine Antwort

Timing habe ich auch schonmal langsamer gemacht, bringt nüscht.
Leitungen zum LCD sind momentan gerade mal 5cm... da dürfte es
eigentlich nicht dran liegen, oder?

Aber das mit dem Timing löst ja auch nicht das Problem mit dem
6.Datenbit (immer high). Das mit dem Pull-Down ist doch nicht üblich,
oder doch? Hab ich noch nirgends gesehen!

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Is nich üblich, Welcher Controller? Wie angeschlossen?

Autor: Thomas K. (thkais)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist nicht normal. Wenn Du einen Verdrahtungsfehler ausschließen
kannst, ist das LCD wahrscheinlich defekt.

Autor: Andreas Palm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also einen Verdrahtungsfehler kann ich außschließen, denn wie oben
schonmal beschrieben sind wenn ich nur gnd, vcc und vee anschließe alle
datenleitungen und die RS, RW, EN open (liegen so zwischen 0,5 und 2V),
außer die datenleitung6: die liegt auf 5V.

Da ist ein KS0076B/KS0063, HD44780 kompatibel drauf! (Display von
reichelt). Da ist halt nur dieser schwarze Kunststoff drüber, so dass
man den chip selber nicht sehen kann!

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Andreas,

bei R/W ist Low = Write als bei Open Read und da kann was rauskommen.
E(nabel) ist ja freigegeben. Leg mal RS,RW,E auf low.

Gruß Peter

Autor: Andreas Palm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Das ist eine gute Idee, bringt aber leider nix :)

Auch wenn ich die drei auf low lege bleibt die DB6 auf high :(

Autor: Leenders (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schon mal mit Pullup Widerständen versucht?

Paul

Autor: Läubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eventuell Aktiviertes JTAG o.ä?

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Also ich habe mein HD44780 fest im vier Bit Modus angeschlossen d.h.
nur das High-nibble.

Bei angelegter Spannung  LCD  5V Pin 1 und 2 hab ich folgendes
gemessen:

Pin 4 RS = High
Pin 5 R/W = High
Pin 6 E   = LOW

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Verdammt bin hab ausversehen Submit gedrückt!

Also ich habe mein HD44780 fest im vier Bit Modus angeschlossen d.h.
nur das High-Nibble und RS,R/W,E .

Bei angelegter Spannung  LCD  5V Pin 1 und 2 hab ich folgendes
gemessen:

Pin 4 RS = High
Pin 5 R/W = High
Pin 6 E   = LOW
Pin 7-11 (DB0-DB4)= Low
Pin 12 (DB5)= High
Pin 13 (DB6) = LOW
Pin 14 (DB7) = LOW

Also dein LCD sollte also Funzen wenn deine Initalisierungs-Sequenz
stimmt.

Sollte es trotzdem nicht gehen einfach umtauschen.

Gruß Klaus

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja!
ich hoffe Du hast dein LCD richtig angeschlossen!

bei der 8 Bit Version brauchste den ganzen Port + Steuersignale

bei der 4 Bit Version nur ein Port aber das Low-Nibble des Ports muss
mit dem High-Nibble am Display verbunden werden.


Die Steursignale werden mit dem High-Nibble am selben Port ausgegeben.

Ich denke das ist dir ja bekannt!

Gruß Klaus

Autor: Andreas Palm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zunächst mal danke an alle, die geholfen haben, aber ich habe das
Problem nun gelöst:

Ein Kurzschluss auf der LCD-Platine durch einen "Lötzinn-Flocken" der
sich zwischen LCD und Platine festgeklemmt hat... das muss man erstmal
erkennen unter der 5x Lupe grrrrr

Jetzt läuft alles bestens! Werde mich nun an die DCF-Signale
begeben...

Gruß
Andi

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schon merkwürdig, ich arbeite auch gerade mit einem LCD und habe die
gleichen Probleme wie du. Jedes Programm läuft einfach nicht. Ausser
den vier Reihen aus schwarzen Rechtecken zeigt sich nichts auf dem
Display. Habe nie eine Änderung auf dem Display gesehen. Dann habe ich
mal diesen Beitrag gefunden und bin auch beigegangen und habe die LCD
Pins durchgemessen nachdem ich es wie folgt angeschlossen habe.
Vss GND
VDD Vcc
VEE Vcc (ist so bei dem EA 204)
RS GND
R/W GND
E GND

messe an D0,D1,D4,D6,RES 5V. Res ist wohl normal, aber die anderen
anscheinend nicht.
Die Lötstellen sehen auch ganz gut aus. Habe mir nur eine
Adapterplatine fertig gemacht, dass ich von Rastermaß 2 auf 2,54 für
mein Steckbrett komme.

Ist das LCD jetzt defekt? Was kann ich noch testen? Wäre echt schade,
wären 21€ einfach so in den Sand gesetzt, ohne das ich es jemals
richtig genutzt habe. Habe mich lediglich an der Hintergrundbeleuchtung
erfreut ;)

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stephan!

Das LCD Display funzt nur wenn Du eine sogenannte Initialisierung
durchführst.

Das LCD kann im 4 Bit oder 8 Bit modus Betrieben werden.

Das Du nur Rechtecke siehst liegt wahrscheinlich am Timinig überprüf
mal deine Routine.


Gruß Klaus

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also ich habe schon mehrere Routinen ausprobiert und keine hat
funktioniert, deswegen bin ich froh das ich diesen Beitrag gefunden
habe. Deswegen möchte ich gerne einen Hardwaredefekt ausschliessen. Da
ich weiter oben gelesen habe, dass der Andreas ein ähnliches Problem
hatte, bin ich davon ausgegangen, dass die Spannungen an den Datenpins
nicht normal sind.

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stephan!

ich hoffe Du redest hier auch vom HD44780 im welchen Modi Betreibst Du
dein LCD?

Gruß Klaus

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo Klaus

also es ist ein EA DIP 204-4    4x20 LCD mit einem KS0073 Kontroller,
welcher laut Herstellerangabe "nahezu 100% HD44780 kompatibel" ist.

Ich versuche das LCD im 4bit Modus zu betreiben, habe auch schon den
8bit Modus probiert, aber ohne Erfolg. Da ich schon über 40std in
Routinentests und umprogrammieren beschäftigt habe, möchte ich ein
Hardwarefehler ausschliessen. Wie kann man es testen, ohne das man
etwas an das LCD senden muß.

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stephan!

wenn Du dein Display mit Spannung versorgst und dein Kontrast richtig
eingestellt ist, sollte ohne Initialisierung zumindest mal
die Reihe 2 und 4 angezeigt werden. (lauter vierecke)

Wie hast Du den vier Bit Modus realisert??

Gruß Klaus

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stephan  Poste mal dein Code!


Ich hoffe Du arbeitest mit einem 8051'er

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
z.B. http://www.mikrocontroller.net/tutorial/lcd Habe auch den Takt auf
4MHz gestellt, wie verlangt.
Stimmt, habe auch nicht gesagt, dass ich einen Mega8 mit Assembler
benutze.
Würde ich eine fertige Hex Datei haben und eine Anleitung an welchem
Port was anzuschliessen ist, dann könnte ich auch ein in C
programmiertes Programm benutzen. Ich bin leider selber nicht in der
Lage etwas in C zu programmieren. Assembler finde ich schön
verständlich und nachvollziehbar; bei C würde ich wohl den Überblick
verlieren.

Naja wie gesagt, ich glaube bei den ganzen Programmen die ich im Netz
gefunden und ausprobiert habe, möchte ich einen Hardwaredefekt als
nächstes ausschliessen. Deswegen auch die Frage ob man an den Datenpins
bei Minimalbeschaltung eine Spannung messen darf.

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stephan!

Siehe oben da hab ich mal an meinem LCD gemessen.

Die Anleitung sagt ja schon aus wie Du  dein LCD an Port Anschliessen
musst.


Sind bei dir die Balken zusehen??

Klaus

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Kleine korrektur meiner Aussage:
Die Balken erscheinen auf Reihe 1 und 3, ich hatte das Display
falschrum gehalten.


Sorry!

klaus

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmmm, habe auch mal nur Spannung an Pin 1 und 2 angelegt und messe bei
RS, R/W, E, D2,D3,D5,D7 Low. D0,D1,D4,D6 sind auf High. Also nicht ganz
wie bei dir.
Werde nochmals das mikrocontroller.net Tutorial durchführen, vielleicht
hat sich ja doch irgendwo ein Fehler eingeschlichen. Das Anschliessen
geht ja mit einem Steckbrett ganz schnell.

Auf dem Display sehe ich bei Spannungsversorgung und Kontrast vier, mit
schwarzen Rechtecken gefüllte Zeilen. Es soll ja bedeuten, dass die
Initialisierung noch nicht stattgefunden hat, aber wie soll es auch
stattfinden, wenn an manchen Pins ein High-Signal anliegt, dann kann
der uC diese ja nicht mehr ansprechen.
Aber ich werde nicht so schnell aufgeben.

Autor: Andreas Palm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da ich zufälliger Weise das gleiche Display hier habe :) denke ich, dass
ich die Lösung kenne:

Probier mal folgendes:

VSS (Pin 1) -> GND
VCC (Pin 2) -> 5V
VEE (Pin 3) -> GND !!!!! (wenn ich die bei mir an 5V lege erkenne ich
gar nix, weil der Kontrast zu stark ist!)
RS (Pin 4) -> GND
R/W (Pin 5) -> GND
EN (Pin 6) -> Ein Kabel dran was du an GND legst, aber dort abmachen
kannst und kurz an 5V tippen kannst
DB0,1,2,6,7 -> GND
DB3,4,5 -> 5V

Dann kurz mit dem EN-Kabel auf 5V und wieder auf GND... danach solltest
du ein leeres Display haben. Wenn das funktioniert und der µC das nicht
schafft, liegt es am Code oder an der Verkabelung. Das LCD ist dann
aber in jedem Fall in Ordnung!

Gruß
Andi

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so, komplett neu verdrahtet. Läuft aber immernoch nicht. Benutze den
internen Oszi. Daran wird es aber wohl nicht liegen, oder?

hier nochmal der Code, den ich auf den Mega8 gespielt habe. Ist im
Prinzip der gleiche wie auch im Tutorial.

.include "m8def.inc"

.def temp1 = r16
.def temp2 = r17
.def temp3 = r18


           ldi temp1, LOW(RAMEND)      ; LOW-Byte der obersten
RAM-Adresse
           out SPL, temp1
           ldi temp1, HIGH(RAMEND)     ; HIGH-Byte der obersten
RAM-Adresse
           out SPH, temp1

           ldi temp1, 0xFF    ;Port D = Ausgang
           out DDRD, temp1

           rcall lcd_init     ;Display initialisieren
           rcall lcd_clear    ;Display löschen

           ldi temp1, 'T'     ;Zeichen anzeigen
           rcall lcd_data

           ldi temp1, 'e'     ;Zeichen anzeigen
           rcall lcd_data

           ldi temp1, 's'     ;Zeichen anzeigen
           rcall lcd_data

           ldi temp1, 't'     ;Zeichen anzeigen
           rcall lcd_data

loop:
           rjmp loop

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;                 LCD-Routinen                ;;
;;                 ============                ;;
;;              (c)andreas-s@web.de            ;;
;;                                             ;;
;; 4bit-Interface                              ;;
;; DB4-DB7:       PD0-PD3                      ;;
;; RS:            PD4                          ;;
;; E:             PD5                          ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



 ;sendet ein Datenbyte an das LCD
lcd_data:
           mov temp2, temp1             ;"Sicherungskopie" für
                                        ;die Übertragung des 2.Nibbles
           swap temp1                   ;Vertauschen
           andi temp1, 0b00001111       ;oberes Nibble auf Null setzen
           sbr temp1, 1<<4              ;entspricht 0b00010000
           out PORTD, temp1             ;ausgeben
           rcall lcd_enable             ;Enable-Routine aufrufen
                                        ;2. Nibble, kein swap da es
schon
                                        ;an der richtigen stelle ist
           andi temp2, 0b00001111       ;obere Hälfte auf Null setzen
           sbr temp2, 1<<4              ;entspricht 0b00010000
           out PORTD, temp2             ;ausgeben
           rcall lcd_enable             ;Enable-Routine aufrufen
           rcall delay50us              ;Delay-Routine aufrufen
           ret                          ;zurück zum Hauptprogramm

 ;sendet einen Befehl an das LCD
lcd_command:                            ;wie lcd_data, nur ohne RS zu
setzen
           mov temp2, temp1
           swap temp1
           andi temp1, 0b00001111
           out PORTD, temp1
           rcall lcd_enable
           andi temp2, 0b00001111
           out PORTD, temp2
           rcall lcd_enable
           rcall delay50us
           ret

 ;erzeugt den Enable-Puls
lcd_enable:
           sbi PORTD, 5                 ;Enable high
           nop                          ;3 Taktzyklen warten
           nop
           nop
           cbi PORTD, 5                 ;Enable wieder low
           ret                          ;Und wieder zurück


 ;Pause nach jeder Übertragung
delay50us:                              ;50us Pause
           ldi  temp1, $42
delay50us_:dec  temp1
           brne delay50us_
           ret                          ;wieder zurück

 ;Längere Pause für manche Befehle
delay5ms:                               ;5ms Pause
           ldi  temp1, $21
WGLOOP0:   ldi  temp2, $C9
WGLOOP1:   dec  temp2
           brne WGLOOP1
           dec  temp1
           brne WGLOOP0
           ret                          ;wieder zurück

 ;Initialisierung: muss ganz am Anfang des Programms aufgerufen werden
lcd_init:
           ldi  temp3,50
powerupwait:
           rcall  delay5ms
           dec  temp3
           brne powerupwait
           ldi temp1, 0b00000011        ;muss 3mal hintereinander
gesendet
           out PORTD, temp1             ;werden zur Initialisierung
           rcall lcd_enable             ;1
           rcall delay5ms
           rcall lcd_enable             ;2
           rcall delay5ms
           rcall lcd_enable             ;und 3!
           rcall delay5ms
           ldi temp1, 0b00000010        ;4bit-Modus einstellen
           out PORTD, temp1
           rcall lcd_enable
           rcall delay5ms
           ldi temp1, 0b00101000        ;noch was einstellen...
           rcall lcd_command
           ldi temp1, 0b00001100        ;...nochwas...
           rcall lcd_command
           ldi temp1, 0b00000100        ;endlich fertig
           rcall lcd_command
           ret

 ;Sendet den Befehl zur Löschung des Displays
lcd_clear:
           ldi temp1, 0b00000001   ;Display löschen
           rcall lcd_command
           rcall delay5ms
           ret

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.