Forum: Mikrocontroller und Digitale Elektronik HD44780 - EMI Problem


von Bullerbü (Gast)


Lesenswert?

Hallo,

habe hier einen "UV-Belichter im Scannergehäuse" zusammengebastelt. Die 
Beleuchtung besteht aus 4 Stück 15W UV-Leuchtstofflampen mit 
konventionellem Vorschaltgerät. Ein gesockelter Arduino Nano (auf einer 
Platine mit Relais zur Schaltung der 230 V Seite, Printnetzteil von 
Meanwell zur Versorgung des Nano und Kleinkram) versorgt das 2x16 
HD44780 Display über 4 Datenleitungen. Das Kabel zum Display ist 
geschirmt und ca. 50 cm lang. Schirmung ist mit GND verbunden. RS, RW, 
E, D4, D5, D6, D7 haben 100 Ohm Serienwiderstände und 15 nF Kerkos gegen 
GND (direkt am Display).

Das Display verabschiedet sich ab und an (meist nicht direkt, sondern 
erst nach ein paar Schaltvorgängen) mit Buchstabensalat. Der Arduino 
hängt sich dabei nicht auf.

Habt Ihr noch ein paar Ideen, der EMI Herr zu werden?

von Thomas Z. (usbman)


Lesenswert?

Wie hast du D0-D3 beschaltet? Ich hoffe doch auf VCC

von c-hater (Gast)


Lesenswert?

Bullerbü schrieb:

> Schirmung ist mit GND verbunden. RS, RW,
> E, D4, D5, D6, D7 haben 100 Ohm Serienwiderstände und 15 nF Kerkos gegen
> GND (direkt am Display).

Was ist nah am Display? Nur die Kerkos oder auch die Widerstände? 
Außerdem:
100Ohm+15nF sind eigentlich viel zu viel. Das geht (wenn überhaupt) nur, 
wenn man das Display seeehr laaangsaaam ansteuert. Es kann aber durchaus 
auch sein, dass es Mindestanforderungen des Display bezüglich der 
Flankensteilheit verletzt. Aber egal, wenn normalerweise das Richtige 
erscheint, wird das Display scheinbar damit fertig und die Ansteuerung 
ist auch hinreichend langsam.

> Das Display verabschiedet sich ab und an (meist nicht direkt, sondern
> erst nach ein paar Schaltvorgängen) mit Buchstabensalat.

Die Störungen kommen mit einiger Wahrscheinlichkeit über die Versorgung 
oder Masse. Versorgung läßt sich typisch leicht beheben, einfach besser 
entkoppeln. Floatende Massepotentiale bekommt man hingegen aber leider 
nur durch besseres Layout in Griff.

Steckbrett-Aufbau?

von Stefan F. (Gast)


Lesenswert?

Bullerbü schrieb:
> RS, RW, E, D4, D5, D6, D7 haben 100 Ohm Serienwiderstände
> und 15 nF Kerkos gegen GND (direkt am Display).

Wenn man die Signale derart abflacht ist das kein Wunder. Da gehören 
überhaupt keine Kondensatoren hin. Wenn doch, dann würde ich höchstens 
220pF verwenden. Aber nicht bei so kurzen Leitungen.

c-hater schrieb:
> Es kann aber durchaus
> auch sein, dass es Mindestanforderungen des Display bezüglich der
> Flankensteilheit verletzt.

So ist es, mit Sicherheit. Konkret sind maximal 0,2µs für die steigenden 
und fallenden Flanken am Takteingang zulässig.

von Mr.Unklar (Gast)


Lesenswert?

Thomas Z. schrieb:
> Wie hast du D0-D3 beschaltet? Ich hoffe doch auf VCC

Wieso auf VCC und nicht auf GND

von Stefan F. (Gast)


Lesenswert?

Mr.Unklar schrieb:
> Wieso auf VCC und nicht auf GND

Weil der Chip intern Pull-Up Widerstände hat. Wenn du sie herunter 
ziehst, fließt unnötig viel Strom.

von Peter D. (peda)


Lesenswert?

15nF scheinen mir auch viel zu hoch, max 100pF, wenn überhaupt.
Man kann  das LCD zyklisch neu initialisieren, d.h. den 4Bit-Mode. Das 
ist nicht zu sehen. Optimal schreibt man alles in einen RAM-Puffer, den 
man dann zyklisch ausgibt, z.B. im 1ms Interrupt immer je ein Byte.

von Wolfgang W. (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> So ist es, mit Sicherheit. Konkret sind maximal 0,2µs für die steigenden
> und fallenden Flanken am Takteingang zulässig.

In dem mir vorliegenden HD44780-Datenblatt sind sogar noch steilere 
Flanken am E-Eingang spezifiziert: max. 25 ns für 2,7-4,5 V und max. 20 
ns für 4,5 - 5,5 V.

@ TO:
Meine Empfehlung: nimm einfach am E-Eingang erst den Kondensator raus. 
wenn dann das Display richtig anzeigt, OK, ansonsten nimm noch den 
Serien-R raus. Alle anderen Verbindungen würde ich mal belassen.

von Schlaumaier (Gast)


Lesenswert?

Wieso machst du das über so viele Leitungen.

Ich würde mir eine Adapter-Platine kaufen (mit PCF8574) kostet ca. 1.20 
Euro. Dann das ganze via I2C anklemmen. Adapterplatine ist besser weil 
mit Helligkeitsregler (denn die Chinesen immer voll aufdrehen, deshalb 
nach den Einlöten, erst mal zurückdrehen des Poti).

Funktioniert einwandfrei. Und verbaue ich immer. Die von dir genannten 
Pins brauche ich übrigens für die (meist) aufklebebare 
Membranen-Tastatur. :)

von Schlaumaier (Gast)


Lesenswert?

Nachtrag:

Wenn du es so wie ich bauen würdest, und die Software anpassen, dann 
kannst du sogar die Zeit eingeben, Standart-Zeiten programmieren (nur 
die Zeit im nichtflüchtigen Speicher ablegen.

Bei einer 16er Tastatur kannst du z.b. bei einer MENO-Taste dann 10 
Werte fest o. Variable hinterlegen. Auf Wunsch sogar mit Beschreibung. 
Da gibt es gigantische Möglichkeiten.

von Spess53 (Gast)


Lesenswert?

Hi

>Wieso machst du das über so viele Leitungen.

Weil ein ATMega328xy mehr als ausreichnend IO-Pins zur verfügung hat. Da 
muss man sich nicht noch durch so eine Duplo-Platine  eine zusätzliche 
Fehlerquelle ins Haus holen.

@Bullerbü

Wie sieht deine Stromversorgung aus. Wird das Relais aus der gleichen 
Quelle wie der Nano versorgt?

Ich hatte vor ca. 15 Jahren einen ähnlichen Fall mit einem Belichter. Da 
wurde oft der Controller beim Schalten der Leuchten resettet. Abhilfe 
hat auf die schnelle die Trennung der Stromversorgung von Elektronik und 
Lampenanteuerung geholfen.

MfG Spess

von Falk B. (falk)


Lesenswert?

Bullerbü schrieb:
> Hallo,
>
> habe hier einen "UV-Belichter im Scannergehäuse" zusammengebastelt. Die
> Beleuchtung besteht aus 4 Stück 15W UV-Leuchtstofflampen mit
> konventionellem Vorschaltgerät.

Wie und wo wird da geschaltet? Vermutlich am Netzeingang des 
Vorschaltgeräts.

> E, D4, D5, D6, D7 haben 100 Ohm Serienwiderstände und 15 nF Kerkos gegen
> GND (direkt am Display).

Die 15nF sind nicht sinnvoll, wurde ja schon gesagt.

> Das Display verabschiedet sich ab und an (meist nicht direkt, sondern
> erst nach ein paar Schaltvorgängen) mit Buchstabensalat.

Beim Ein- oder Ausschalten?

> Der Arduino
> hängt sich dabei nicht auf.

So ein Szenario gibt es oft. Der Würg-Around ist eine zyklische 
Neuinitialisierung des LCDs alle paar Sekunden. Man kann versuchen, die 
Störung zu minimieren, z.B. mit einem Snubber am Relais. Man kann 
versuchen, das LCD zu "härten". z.B. mit der GND-Verbindung des meist 
mestallischen Rahmens zu GND. Man kann auch versuchen, das LCD 
rückseitig mit Kupferfolie zu schirmen, alles schön mit GND verbinden. 
Kann helfen, muss nicht. Man kann dirkt am LCD VCC/GND nochmal mittels 
100nF abzublocken.

Man kann versuchen herauszufinden, ob das LCD auch abstürzt, wenn es 
keinerlei Kommandos bekommt. Wenn ja, ist es kein Problem der 
Ansteuersignale sondern von eingekoppelten Störungen, welche den 
LCD-Controller aus dem Takt bringen. Siehe oben.

von Thomas (kosmos)


Lesenswert?

Spendier mal den Datenleitungen auf einer Seite 10 kOhm Pullups oder 
Pulldowns, falls du nicht die internen Pullups verwendest.

Ein Bild deiner Bastelei würde sicherlich helfen den Fehler zu finden.

von Schlaumaier (Gast)


Lesenswert?

Da ich ein HD44780 nur via i2c angeschlossen habe, kann ich nur 
vermuten.

Aber das TO schreibt, er benutzt 4 !!! Datenleitungen. Lt. Datenblatt 
und Internet hat das Display aber 8 !!! Datenleitungen (d0 - d7).

Kann es sein das der Treiber (die Lib) diese 8 Leitungen haben will. ???

Du also 8 Datenleitungen brauchst !!

https://www.a-netz.de/blog/2007/08/hd44780-lc-display.html

Wie gesagt, nur eine Vermutung. Aber als ich das Damals (andere Seite) 
gesehen habe waren mir so viele Pins zu viel, deshalb der Adapter und 
ICH bin glücklich damit.

von Schlaumaier (Gast)


Lesenswert?

Schlaumaier schrieb:
> Kann es sein das der Treiber (die Lib) diese 8 Leitungen haben will. ???

Vermutlich um sich den 2. Takt zu sparen.

Eine Ansteuerung über 4 Datenleitungen ist nämlich möglich, aber dann 
braucht man für die 8 Bits hat 2 Takte mit je 4 Bits.

Steht alles im Link.  Und habe ich auch damals gelesen aber vergessen. 
Wie gesagt zu viele Leitungen ;))

von Spess53 (Gast)


Lesenswert?

Hi

>Aber das TO schreibt, er benutzt 4 !!! Datenleitungen. Lt. Datenblatt
>und Internet hat das Display aber 8 !!! Datenleitungen (d0 - d7).

Lässt sich in der Initialisierung umschalten:

Function Set

DL: Sets the interface data length. Data is sent or received in 8-bit 
lengths (DB7 to DB0) when DL is 1,
and in 4-bit lengths (DB7 to DB4) when DL is 0.When 4-bit length is 
selected, data must be sent or received twice.

>Eine Ansteuerung über 4 Datenleitungen ist nämlich möglich, aber dann
>braucht man für die 8 Bits hat 2 Takte mit je 4 Bits.

Das sind schon ein Paar mehr Takte. Hast du eigentlich schon mal ein LCD 
ohne C&P angesteuert? Deine Ahnungslosigkeit scheint 100% Programm 
Programm zu sein.

MfG Spess

von Manfred (Gast)


Lesenswert?

Schlaumaier schrieb:
> Da ich ein HD44780 nur via i2c angeschlossen habe, kann ich nur
> vermuten.

Dann erspare uns Deinen akuten Schreibdurchfall!

Die üblichen Chinesen-LCDs 1602 / 2004 habe ich sowohl parallel als auch 
mit I2C-Adapter in Betrieb. Die laufen durchgängig stabil und es gibt 
Gründe, weshalb man sich für welche Variante entscheidet.

Wenn man sie blöd genug beschaltet, heißt das Eigentor.

c-hater schrieb:
> 100Ohm+15nF sind eigentlich viel zu viel. Das geht (wenn überhaupt) nur,
> wenn man das Display seeehr laaangsaaam ansteuert. Es kann aber durchaus
> auch sein, dass es Mindestanforderungen des Display bezüglich der
> Flankensteilheit verletzt.

Stefan ⛄ F. schrieb:
> Wenn man die Signale derart abflacht ist das kein Wunder. Da gehören
> überhaupt keine Kondensatoren hin.

Anstatt mit RC zu pfuschen, wäre eine korrekte Verdrahtung des gesamten 
Gebildes anzustreben.

von Bullerbü (Gast)


Lesenswert?

Wolfgang W. schrieb:
> Meine Empfehlung: nimm einfach am E-Eingang erst den Kondensator raus.
> wenn dann das Display richtig anzeigt, OK, ansonsten nimm noch den
> Serien-R raus. Alle anderen Verbindungen würde ich mal belassen.

Habe ich so umgesetzt. Display steigt immer noch nach ein paar 
Schaltvorgängen aus. Kondensatoren an RS, RW, E, D4, D5, D6, D7 
entfernen bringt auch keinen Erfolg. Ich initialisiere jetzt nach jedem 
Belichtungsvorgang. Das funktioniert erstmal.

von Spess53 (Gast)


Lesenswert?

Hi

>Ich initialisiere jetzt nach jedem
>Belichtungsvorgang. Das funktioniert erstmal.

Dann teste doch mal die Trennung der Stromversorgungen.

MfG Spess

von Philipp K. (philipp_k59)


Lesenswert?

Wenn das Display beleuchtet ist würde ich mal einen Elko am Display 
ausprobieren.. 10uF oder die Beleuchtung testweise ausschalten.

Falls die 50cm einen zu dünnen Querschnitt haben könnte VCC mit 
Beleuchtung schon am wackeln sein.

von Jörg R. (solar77)


Lesenswert?

Schaltplan zeigen, Fotos vom Aufbau zeigen, Screenshots der Messung mit 
dem Oszi zeigen.

von Hp M. (nachtmix)


Lesenswert?

c-hater schrieb:
> 100Ohm+15nF sind eigentlich viel zu viel
Ja.

Davon einmal abgesehen: Wertest du die Busy Flag aus?
Einige Operationen des Controllers sind nämlich schnarchlangsam, und 
wenn man dann mit dem Schreiben nicht wartet, bis der Controller wieder 
bereit ist, gehen Daten verloren.
Man kann auf die Auswertung des Busy verzichten, aber dann darf man nur 
sehr langsam schreiben, damit der Controller sich nicht verstolpert.

von Teo D. (teoderix)


Angehängte Dateien:

Lesenswert?

Hp M. schrieb:
> Davon einmal abgesehen: Wertest du die Busy Flag aus?

Wohl eher nich, mach keine Sau...

> Einige Operationen des Controllers sind nämlich schnarchlangsam,

Clear_Display, Return Home braucht fast 2ms! (So ab unter 10°C kanns 
auch was länger dauern, Takterzeugung RC-Schwinger)
Der Rest < 40µs.

Ich würd aber erst mal die gesamte Stromversorgung der Schaltung 
Entstören.



PS&OT: Machs wie ich, spar dir das "überkandidelte" Display und nimm ne 
7Seg. Anzeige. OK, das Loch is jetzt natürlich a bisserl groß für....

von Falk B. (falk)


Lesenswert?

Bullerbü schrieb:
> Ich initialisiere jetzt nach jedem
> Belichtungsvorgang. Das funktioniert erstmal.

Man kann auch versuchen, bei dem Schaltvorgang der Lampen ganz sicher 
KEINE LCD Zugriffe zu machen.

von Thomas (kosmos)


Lesenswert?

mit Foto meinte ich wies unter der Haube aussieht, also spricht deinen 
Aufbau, Platine, Verkabelung, ...

von Teo (Gast)


Lesenswert?

Thomas O. schrieb:
> mit Foto meinte ich wies unter der Haube aussieht, also spricht deinen
> Aufbau, Platine, Verkabelung, ...

Sorry für die Verwirrung ABER ich bin NICHT der TO!
Wäre auch ein extrem "Komisches" LCD... ;)

von Karl B. (gustav)


Lesenswert?

Hi,
hab überhaupt keine Probleme mit Datenleitungslängen bis 50 cm 
(unabgeschirmtes Flachband)
Das Einzige:
der Enable-Impuls muss "sauber" rüberkommen.
Alle anderen Bits sind reichlich unkritisch. Müssen aber zeitig genug am 
Bus anstehen, b e v o r die Ena-Impulsflanke (fallend) kommt.
R/W ist fest gegen GND verschaltet. Busy wird nicht ausgewertet.

LCD-Display-RAM hält normalerweise die Daten noch bei etwas wackliger 
5V-Spannung innerhalb bestimmter Toleranzen. Sprich: An der Anzeige 
ändert sich nichts. Nur Schreib/Lesevorgänge klappen dann u. U. nicht 
mehr sauber.

Meine Meinung:
Layout-Fehler

ciao
gustav

von Stefan F. (Gast)


Lesenswert?

Die m eisten dieser Display kann man sogar mit 3,3V betreiben. man muss 
dann aber eine negative Kontrastspannung für das Display bereit stellen.

von Janvi (Gast)


Lesenswert?

Hatte ich auch mal. Bei mir war der Reset am Display nicht beschaltet. 
Ein Widerstand hat Wunder gewirkt...

von Joe (Gast)


Lesenswert?

Bullerbü schrieb:
> RS, RW,
> E, D4, D5, D6, D7 haben 100 Ohm Serienwiderstände und 15 nF Kerkos

... 15nF müssen alle raus.

200nF an VCC - GND an der Platine

Zuleitungskabel nur "lang" verlegen, keine Windungen beim Verlegen 
verursachen.

von Karl B. (gustav)


Angehängte Dateien:

Lesenswert?

Joe schrieb:
> ... 15nF müssen alle raus.

Hi,
kann man ruhig drin lassen, nur dann den Enable-Impuls um die durch R 
und C in den Leitungen entstehende Zeitkonstante verzögern.
Die Datenbits und Steuerbits sind "current state" bits, bei denen es auf 
die Flankensteilheit nicht so sehr ankommt.
Das Enable-Bit ist aber ein "transition state" bit.
Da kommt es sehr wohl auf die Flankensteilheit an.
Da muss der Kondensator auf jeden Fall raus.
Man kann das Weitere softwaremäßig lösen. Zum Beispiel vor dem Senden 
des Enable-Impulses eine Verzögerungsschleife einfügen.
Nur wird das so wie so schon langsame LCD dann noch langsamer.
15 nF sind auch schon ziemlich viel.
Wie so ein Impuls beispielsweise bei "nur" 2,2 nF Parallelkondensator 
aussieht -> siehe Bild.
Der Enable-Impuls sollte wie mit "2" markiert aussehen. Sonst klappt das 
nicht.
BTW:
Über das Ansteuerprogramm wurde soweit ich das hier verfolgte, kein 
Wörtchen verloren.
Welche LCD-Routine wird da verwendet, wie wird die ins Programm 
eingebunden?
Vielleicht ist da auch noch etwas zu verbessern.
ciao
gustav

: Bearbeitet durch User
von Teo D. (teoderix)


Lesenswert?

Ich würde mir auch mal das gesamte Timing (ALLE!) der SW ansehen. Meiner 
Erfahrung nach liegen da 99% der Probleme mit HD44780 & Co.
Denn, ist das knapp an Kante.....

von Peter D. (peda)


Lesenswert?

Bullerbü schrieb:
> RS, RW,
> E, D4, D5, D6, D7 haben 100 Ohm Serienwiderstände und 15 nF Kerkos gegen
> GND (direkt am Display).

Hau raus den ganzen Mist.
Die Aufladeströme der riesen Kondensatoren können Dir den GND des LCD 
anheben. Je nachdem, wie viele Pins gleichzeitig von 0V nach 5V 
wechseln. Daß das LCD spinnt, ist also völlig normal.

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.