Forum: Mikrocontroller und Digitale Elektronik LCD auf Steckbrett, Störungen


von Markus B. (pspracers)



Lesenswert?

Hallo,

Ich habe dieses LCD 
(https://www.buydisplay.com/default/character-arduino-40x4-lcd-display-datasheet-ks0066-white-on-blue) 
bereits auf einer geätzten Platine in Betrieb, und das fehlerfrei. Nun 
habe ich ein neues Projekt und möchte dieses LCD wiederverwenden, die 
voll funktionstüchtige Software habe ich dabei nicht verändert und auch 
am PIC18F26K22 an den gleichen Pins angeschlossen. Allerdings habe ich 
derzeit nur einen Versuchsaufbau auf einem Steckbrett. Hier kommt es zu 
kuriosen Störungen wie auf einem Bild ersichtlich. Wenn ich allerdings 
den gelöteten Anschluss für den ICSP fest drücke und ins PicKit 
einstecke kommt es zu keinem Fehler wie auf dem ersten Bild ersichtlich. 
Die Verkabelung des LCD habe ich bereits 4 Mal neu aufgebaut, der Fehler 
ist jedes Mal der gleiche.
Den Schaltplan habe ich noch zusätzlich angehängt, hat aber, wie gesagt, 
so schon gut funktioniert.
Ich hoffe ihr habt gute Lösungsvorschläge und oder Angaben zum 
Problemauslöser für mich :)

LG und einen schönen Dienstag noch,
Markus

Edit: Das PCB Layout ist mir mitreingerutscht^^

: Bearbeitet durch User
von Nop (Gast)


Lesenswert?

Markus B. schrieb:
> Hier kommt es zu
> kuriosen Störungen wie auf einem Bild ersichtlich.

Auf welchem? Worin genau bestehen die Störungen? Ratespielchen sind hier 
nicht beliebt. Bild 1 und zwei sehen doch beide OK aus.

von Markus B. (pspracers)


Lesenswert?

Hallo,

Sorry, dachte es wäre klar. Bild 1 mit den 4 Zeilen ist wie es sein soll 
(wenn ich den ICSP header fest drücke kommt das eben auch raus) und Bild 
2 ist fehlerhaft. Das Pi von Bild 2 sollte da auf keinem Fall stehen, 
und die untern beiden Zeilen fehlen. Manchmal sind auch nur Zeile 3 & 4 
zu sehen und oben dafür nichts. Oder ganz was spezielles, ein "D" in 
Dauerschleife welches die oberen 2 Zeilen überschreibt. Es muss 
irgendwie mit den Enable-Leitungen zusammenhängen denke ich (E1 für 
Zeile 1 & 2, E2 für Zeile 3 & 4), nur habe ich die Leitungen alle 
durchprobiert und keine fehlerhafte Leitung finden können.

von Michael B. (laberkopp)


Lesenswert?

Markus B. schrieb:
> Den Schaltplan habe ich noch zusätzlich angehängt, hat aber, wie gesagt,
> so schon gut funktioniert.

Hmm, wie kommt man drauf, D0...D3 an Masse kurzzuschliessen und RW von 
Controller z.B. auf READ schalten zu lassen ?

Wieso glaubt man, taugt ein IRF540 für schwache 5V Ansteuerspannung ?

Und dann soll der wohl erhebliche von ihm geschaltete Strom doch bitte 
nicht aus den 5V des Steckbretts kommen, oder doch ?

Über die Lage des Abblockkondenstaors beim Steckbrett ist ja nichts 
bekannt, über mangelnde Sternpunktführung von Masse auf der Platine aber 
schon.

von Markus B. (pspracers)


Lesenswert?

Michael B. schrieb:
> Hmm, wie kommt man drauf, D0...D3 an Masse kurzzuschliessen und RW von
> Controller z.B. auf READ schalten zu lassen ?

LCD läuft im 4 Bit modus, möchte mit einem Port auskommen, nur so geht 
das.
RW auf READ fürs Busyflag

Michael B. schrieb:
> Wieso glaubt man, taugt ein IRF540 für schwache 5V Ansteuerspannung ?

Das tut in meiner Fragestellung erstmal nichts zur Sache, aber ja, ein 
FET mit 4V Vgs(th) ist denkbar ungeeignet. Selbstverständlich kommt hier 
ein LL-FET zum Einsatz. Am Steckbrett habe ich gerade einen LU024N.
Mehr als 1,5A/7,5W werden damit nie geschalten. Allerdings auch erst mit 
der fertigen Platine. Am Steckbrett ist eine 20mA LED als ersatz für 
diesen Ausgang.

Michael B. schrieb:
> Über die Lage des Abblockkondenstaors beim Steckbrett ist ja nichts
> bekannt, über mangelnde Sternpunktführung von Masse auf der Platine aber
> schon.

Der Kondensator ist direkt am Steckbrett neben Pin 19&20 gesteckt. 
Selbstverständlich mit so kurzen Leitungen wie möglich.
Das Platinenlayout ist noch lange nicht fertig, daher der Testaufbau, 
dennoch lasse ich mich gerne über die "Sternpunktführung" belehren. 
(Kein Treffer zu Sternpunktführung durch Google :/)

: Bearbeitet durch User
von Nop (Gast)


Lesenswert?

Markus B. schrieb:
> Es muss
> irgendwie mit den Enable-Leitungen zusammenhängen denke ich

Gut möglich - viele Displays mögen keine langen Leitungen bei Enable. 
10cm gehen, 20cm können schon Kante sein. Notfalls direkt am Display 
einen Schmitt-Trigger dafür vorsehen.

von Markus B. (pspracers)


Lesenswert?

Nop schrieb:
> Gut möglich - viele Displays mögen keine langen Leitungen bei Enable.
> 10cm gehen, 20cm können schon Kante sein. Notfalls direkt am Display
> einen Schmitt-Trigger dafür vorsehen.

In meinem Fall bin ich knapp unter den den 10cm

von Nop (Gast)


Lesenswert?

Dann könnte die SW von den Timings her auch bisher schon an der Kante 
gewesen sein, und mit dem fliegenden Aufbau geht's nicht mehr gut.

von spess53 (Gast)


Lesenswert?

Hi

>LCD läuft im 4 Bit modus, möchte mit einem Port auskommen, nur so geht
>das.
>RW auf READ fürs Busyflag

Die Datenleitungen der Displaycontroller besitzen interne 
PullUp-Widerstände.  Da ist das auf Masse legen eher contraproduktiv. Im 
Normalfall lässt man die Datenleitungen einfach offen.

MfG Spess

von Markus B. (pspracers)


Lesenswert?

Nop schrieb:
> Dann könnte die SW von den Timings her auch bisher schon an der Kante
> gewesen sein, und mit dem fliegenden Aufbau geht's nicht mehr gut.

Ja, das ist sehr gut möglich, werde ich nachher gleich ausprobieren! :)

Allerdings verwundert es mich wie ein Drücken auf den ICSP Header 
hierbei helfen kann?!

von Markus B. (pspracers)


Lesenswert?

spess53 schrieb:
> Hi
>
>>LCD läuft im 4 Bit modus, möchte mit einem Port auskommen, nur so geht
>>das.
>>RW auf READ fürs Busyflag
>
> Die Datenleitungen der Displaycontroller besitzen interne
> PullUp-Widerstände.  Da ist das auf Masse legen eher contraproduktiv. Im
> Normalfall lässt man die Datenleitungen einfach offen.
>
> MfG Spess

Können da nicht Störungen bei der Initialisierung Probleme machen? so 
habe ich immer definierte 0 Pegel.

von Karl K. (leluno)


Lesenswert?


von Thomas M. (langhaarrocker)


Lesenswert?

Nop schrieb:
> Dann könnte die SW von den Timings her auch bisher schon an der Kante
> gewesen sein, und mit dem fliegenden Aufbau geht's nicht mehr gut.

Solche Phänomene wegen kritischen Timings hatte ich auch schon mal. 
Allerdings war bei mir das kritische Timing eher bei der Initialisierung 
des Displays. D.h. es zeigte sporadisch nach Initialisierung gar nichts 
an oder vertauschte High- und Lownibble oder funktionierte einwandfrei. 
Dass nach erfolgreicher Initialisierung die Datenübertragung gestört war 
hatte ich da jedoch nicht.
Aber unterschhiedliche Displays auf brauchten da tatsächlich auch 
unterschiedliche Timings.

von Chris L. (kingkernel)


Lesenswert?

> Die Datenleitungen der Displaycontroller besitzen interne
> PullUp-Widerstände.  Da ist das auf Masse legen eher contraproduktiv. Im
> Normalfall lässt man die Datenleitungen einfach offen.


Ich hatte hier schon Displays mit HD44780-Controller, die erst gingen, 
als ich die ungenutzen eingänge auf GND gelegt hatte.
Generell lege ich freie Eingänge lieber auf ein definiertes Potential.

: Bearbeitet durch User
von Thomas M. (langhaarrocker)


Lesenswert?

Karl K. schrieb:
> nimm sowas:
>
> 
https://www.ebay.de/itm/2004-20X4-Character-LCD-Display-0x27-0x3F-5V-IIC-I2C-TWI-SP-I-Interface/172403282443?hash=item282409520b:g:54EAAOSwcUBYItkY
>
> problemfrei mit nur 4 Leitungen

Eine tolle Lösung für ein anderes Problem: wenn IO Mangel herrscht. Ist 
hier aber nicht das Problem. Warum also einen Stromfresser und eine 
potentielle zusätzliche Fehlerquelle einbauen?

von spess53 (Gast)


Lesenswert?

Hi

>so habe ich immer definierte 0 Pegel.

Und immer einen erhöhten Stromverbrauch. Wenn du wirklich Probleme mit 
Störungen hast, dann lege die PINs auf VCC statt auf GND.

MfG Spess

von Markus B. (pspracers)


Lesenswert?

spess53 schrieb:
> Und immer einen erhöhten Stromverbrauch. Wenn du wirklich Probleme mit
> Störungen hast, dann lege die PINs auf VCC statt auf GND.

Damit kommt man nicht mehr in den 4-Bit modus, aber ja, der Ansatz ist 
natürlich gerechtfertigt.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Markus B. schrieb:
> Damit kommt man nicht mehr in den 4-Bit modus,

Wie kommst Du auf diese Idee?

von Markus B. (pspracers)


Lesenswert?

Frank M. schrieb:
> Wie kommst Du auf diese Idee?

https://www.buydisplay.com/download/ic/SPLC780.pdf

Hab mich vertan, zuerst muss man den 4 Bit modus aktivieren (Function 
Set), um mit einem weiteren Function Set (diesmal getrennt auf 2x 4-Bit 
gesendet) die Zeilenanzahl und den Fonttyp wieder richtigzustellen.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Markus B. schrieb:
> Hab mich vertan

Ja, hast Du. Es wäre ein klassischer Knieschuss, wenn man den 
4-Bit-Modus deshalb nicht erreichen könnte, weil ein oder mehrere Bits 
gesetzt sind, die gar nicht zu den verwendeten 4 Bits gehören.

Der allgemeine Tenor zu HD44780-Displays ist: Man lässt die ungenutzten 
Pins offen, Ausnahmen bestätigen aber die Regel. In diesem Forum gibt 
es dutzende von Threads zu genau diesem Thema, siehe auch HD44780.

Zum Thema:

Der TO soll ein anderes Steckbrett verwenden oder das Zeug auf einer 
Platine festlöten. Diese Steckbretter können immer Wackelkontakte haben. 
Und genau danach sieht es aus, wenn man dem Wortlaut des 
Eröffnungsbeitrags folgt.

: Bearbeitet durch Moderator
von Gerald B. (gerald_b)


Lesenswert?

Direkt am Display zwischen Vcc und Vss ist es ein feiner Zug, auch noch 
einen 100n Kerko zu platzieren. Mit Masse und +5V magst du alle 
Komponenten erreicht haben, aber nach dem Prinzip "Lichterkette" alles 
hinternander weg und schön schmal, damit die Leiterbahn auch ja noch 
zwischen 2 DIL Pins durchpasst, Abblockkondensatoren irgendwo, wo gerade 
Platz war, platziert. Masse und +5V sollen im Idealfall sternförmig 
verlegt werden und der Sternpunkt sind die Lötaugen des Elkos nach dem 
Spannungsregler - auch kein T, wo der Elko über einen langen dünnen 
Stich angebunden ist. Und breitere Leiterbahnen, wenn du schon keine 
Masseflächen machen willst. 1mm oder besser noch darüber.
Wenn bei dir ganz hinten in der Kette der FET die Hintergrundbeleuchtung 
einschaltet - bei 47 Ohm fließen rund 100 mA, womöglich noch PWM 
gedimmt, dann "wackelt" Masse und 5V am Display und am Controller lustig 
mit. Und es ist kein Abblock C vor Ort, der das ansatzweise abfangen 
könnte. Probiere das Ganze erst mal ohne Hintergrundbeleuchtung, die 
"säuft" vermutlich am Meisten ;-)

von Karl B. (gustav)


Lesenswert?

Chris L. schrieb:
> Ich hatte hier schon Displays mit HD44780-Controller, die erst gingen,
> als ich die ungenutzen eingänge auf GND gelegt hatte.
> Generell lege ich freie Eingänge lieber auf ein definiertes Potential.

Hi,
die Diskussion hatten wir ja schon einmal.
Als Kompromiss nehme ich 4,7 kOhm Widerstände von D0 bis D3 auf GND.
Das ist zwar nicht richtig aber auch nicht ganz falsch.
Meine Überlegung war:
Beim Experimentieren  - gerade mit der Busy-Flag-Abfrage - schalte ich 
zeitweise die Eingänge zu Ausgängen um. Und jetzt habe ich die direkt 
auf GND gelegt. Was passiert da wohl? -> Kurzschluss. Wenn ein R noch 
drin ist, wird zumindest der Strom noch begrenzt.
Ist die SW ok, kann eigentlich nichts passieren. Aber das weiß man ja 
vorher nicht. Die Datenblätter empfehlen da wohl das Richtige.
Die EA DOGM 162 sagen, dass D0-D3-Anschlüsse auf + Vcc gelegt werden 
sollen.
https://www.lcd-module.de/deu/pdf/doma/dog-m.pdf
Seite 4 Mitte rechts


Frank M. schrieb:
> Der allgemeine Tenor zu HD44780-Displays ist: Man lässt die ungenutzten
> Pins offen, Ausnahmen bestätigen aber die Regel.


ciao
gustav

: Bearbeitet durch User
von Karl B. (gustav)


Angehängte Dateien:

Lesenswert?

Markus B. schrieb:
> Damit kommt man nicht mehr in den 4-Bit modus, aber ja, der Ansatz ist
> natürlich gerechtfertigt.

Hi,
habe einmal die Routine umgeschrieben, so dass statt der 30 bzw. 03  3F 
bzw. F3 auf den Port gegeben wird, was ja einem +Vcc (high) auf den 
"unbenutzen" Pins entspricht.
Tatsächlich scheint der der Wechsel zum Vierbit-Modus zu funktionieren.
Aber nach internem CPU-Reset (z. B. Watchdog) zeigt das Display im 
Hintergrund schwach Balken.
Erst bei Power off und wieder on, wird wieder richtig initialisiert.

Also ist die Überlegung, auf keinen Fall die unbenutzten Pins nach 
"high" zu setzen, von der Logik her nicht ganz falsch.
Es geht ja nur um die erste Sequenz nach dem vom Display selbst 
ausgeführten POSR. Der POSR endet im Achtbitmodus. Schaltet das Display 
aus.
Die für den Vierbitmodus vom Display ignorierten unteren vier Bit werden 
im Achtbitmodus eben noch nicht ignoriert.
Wenn jetzt schon die Verdrahtung für den Vierbitmodus fertiggestellt 
ist,
dann läßt man die unteren Datenbits - wie oben schon gesagt - offen.
Also Tristate sind sie nicht. Erst nach dem Durchlaufen der  30-er 
Sequenz
und dem Einrichten des Vierbitmodus.
Um jetzt diese Eingänge irgendwie zu schützen, hätte ich den Vorschlag,
zwei Klemmdioden mit Schutzwiderstand vor jedes Portbit zu schalten.
Mit den Schutzdioden könnte die Spannung am Eingang nie größer +Vcc und 
nie kleiner als GND (0V) werden, und durch einen geeigneten Widerstand 
würde ein Strom begrenzt. (Stichwort Backpowering)
https://www.mikrocontroller.net/articles/Pegelwandler#Schutzdioden

ciao
gustav

: Bearbeitet durch User
von Teo D. (teoderix)


Lesenswert?

Las die scheiß unbenutzten offen! ALLE Init Befehle nutzen nur die 
oberen 4bit, der Rest wird IGNORIERT, nix mit 8Bit Modus.
Der Fehler deute darauf hin das deine Init (o. die komische 
Schutzbeschaltung) fehlerhaft ist (einzeilig) und ohne den Automatischen 
Reset nicht funktioniert.

: Bearbeitet durch User
von Karl B. (gustav)


Lesenswert?

Teo D. schrieb:
> unbenutzten offen!

Ja,
keine Angst, bleibt alles beim alten. Aber oben stand ja auf "...+Vcc 
legen..." . Freut mich, dass ich nicht alleine dastehe mit meiner 
Meinung, dass das in der Mehrzahl der Fälle garnicht geht. (Was der 
Versuch ja auch eindeutig zeigt.) (Ausnahmen bestätigen die Regel.)

ciao
gustav

P.S.:
"Meine" Widerstände nach GND bleiben drin. Das geht.
Wert auf 47 k erhöht.

: Bearbeitet durch User
von Teo D. (teoderix)


Lesenswert?

Karl B. schrieb:
> keine Angst, bleibt alles beim alten.

OK..... und Sorry für die Freundlichkeit (warst leider schneller), hab 
ech'n miesen Tag.

Sorry noch mal, so bin ich normal nich.

von Karl B. (gustav)


Angehängte Dateien:

Lesenswert?

Teo D. schrieb:
> Karl B. schrieb:
>> keine Angst, bleibt alles beim alten.
>
> OK..... und Sorry für die Freundlichkeit (warst leider schneller), hab
> ech'n miesen Tag.
>
> Sorry noch mal, so bin ich normal nich.

Hi,
bei uns ist alles eingefroren...da kommt so etwas schon mal vor.

OK.
Als Dankeschön für die Bestätigung noch einmal ein Update, das auch die 
Portbeschränkung beim ATtiny2313/4313 bei Port D berücksichtigt. PortB 
brauche ich ja für den AC.

Bis bald.

ciao
gustav

von Manfred (Gast)


Lesenswert?

Teo D. schrieb:
> Las die scheiß unbenutzten offen!

An meinem Übungsaufbau, Arduino Uno mit LCD, sind die vier Leitungen 
offen, da gab es zu keiner Zeit ein Problem mit. Das ist aber kein 
Wackel-Kasper-Steckbrett-Gespiele, sondern auf Lochrasterplatte sauber 
gelötet.

von Teo D. (teoderix)


Lesenswert?

Manfred schrieb:
> Das ist aber kein
> Wackel-Kasper-Steckbrett-Gespiele, sondern auf Lochrasterplatte sauber
> gelötet.

KA mit was er da die Verbindungen stöpselt, Probleme gibts da aber eher 
sehr selten.

Was wird den eigentlich befürchtet, wenn die Kontakte offen bleiben. 
Statische Aufladung, Floating,...?

von Karl B. (gustav)


Angehängte Dateien:

Lesenswert?

Teo D. schrieb:
> Was wird den eigentlich befürchtet, wenn die Kontakte offen bleiben.
> Statische Aufladung, Floating,...?

Hi,
habe die Spannung an den vier unteren Ports mit 2,7 Kiloohm-Widerständen 
gegen GND (0V) angeschlossenen mit 0,22V (bei 4,92 V +Vcc) gemessen. Die 
Gesamt-Stromerhöhung beträgt also ca. 400 Mikroampere gegenüber 
unbeschalteten Kontakten. Bei Batteriebetrieb könnte ich mir denken, 
wäre das ein Argument, auf die unnötige Stromverschwendung zu 
verzichten, indem man die vier Widerstände wegläßt.
Warum beharre ich nun meinerseits hartnäckig auf der Montage dieser vier 
Widerstände?:
OK. Habe festgestellt, dass es sogar unter Umständen parasitäre 
Schwingungen bis in den UKW/FM-Bereich geben kann, die eindeutig vom 
Display ausgehen, wenn man beim Basteln einzelne Kontakte sehr 
schluderig verdrahtet oder bei Berühren mit dem Finger die Netzfrequenz 
einkoppelt. Gerade der Enable-Eingang ist da sehr empfindlich. Wenn Ihr 
wollt, kann ich das per Bild und Ton demonstrieren hier. Deswegen habe 
ich mir es zum Grundsatz gemacht, wenn schon basteln, dann zumindest 
rudimentär einigermaßen die Antistatikbedingungen einzuhalten.
Das heißt für mich: Vor Anlegen der Betriebsspannung alle Ein- und 
Ausgänge auf definiertes Potenzial. Und wenn es Bedenken gegenüber 
Kurzschluss gibt, eben geeignete Widerstände einsetzen.
Diese ominösen Widerstände sind also eher als Vorsichtsmaßnahme beim 
Basteln gedacht. Wie es die eigene Erfahrung zeigt, haben sie da 
durchaus ihre Berechtigung, denn ich habe drei Displays geschrottet und 
kann es mir eigentlich nicht anders erklären, dass es eben die 
beschriebene Sorglosigkeit im Umgang mit empfindlichen Dingen gewesen 
ist. Wenn es hinterher funktioniert, das Gerät "in Serie gehen soll", 
kann man auf so manchen unnötigen Aufwand gerne verzichten.

Manfred schrieb:
> An meinem Übungsaufbau, Arduino Uno mit LCD, sind die vier Leitungen
> offen, da gab es zu keiner Zeit ein Problem mit. Das ist aber kein
> Wackel-Kasper-Steckbrett-Gespiele, sondern auf Lochrasterplatte sauber
> gelötet.

Genau.

Und im Bild ist's gezeigt, wie ich meine Displays geschrottet hatte.
Man kann es kaum erwarten, und dann kommt man in der Hektik auf die 
verrücktesten Ideen. Also bitte - so nicht.

ciao
gustav

: Bearbeitet durch User
von Teo D. (teoderix)


Lesenswert?

OK, verstehe.
Beim Basteln könnten die ~100k(max.) wirklich wenig sein, aber warum 
gegen die internen PullUps arbeiten?


PS: Könnte durchaus auch eine Erklärung sein, wie sich ein kleines 2x16 
für 1,30€ aus China, zerschossen hat.
Allerdings geh ich immer noch davon aus, das es an der schlechten 
Lagerung lag. lose in der Ramschkiste. :)

: Bearbeitet durch User
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.