Arduino Micro I2C Problem

Hallo zusammen,

ich habe ein kleines Problem bzw. Frage.

Kurze Beschreibung:

Ich habe eine Platine zur Ansteuerung eines DC-Motors hergestellt. Auf der Platine wird der Arduino mit einem Sockel aufgesteckt. Über den I2C-Bus soll/wird ein Display (20x4 Zeichen) angesteuert. Um elektromagnetische Störungen zu vermeiden, habe ich in die SDA und SCL Leitungen einen Tiefpass integriert.

Hier die Schaltung:

Die Grenzfrequenz liegt bei 1.59 Mhz - das dürfte somit nicht das Problem sein.
Die Pullup Widerstände sind im Slave integriert und deshalb nicht zu sehen.

Problem:

Wenn das Display an der Platine nicht angeschlossen ist, startet der Arduino nicht mehr weil die Pullup Widerstände fehlen. Trenne ich den Arduino von der Platine, ist der Start ohne Probleme möglich.

Hat jemand vielleicht eine Idee, warum sich der Arduino an den beiden Filtern so stört?
Eigentlich sollte das nicht passieren, oder?

Viele Grüße

Welche elektromagnetische Störungen willst du durch den Tiefpass vermeiden ?

Der I2C-Bus macht keine derartigen Störungen.
Wenn Störungen vorhanden sind, musst du diese an der Quelle verhindern bzw. entstören.

Die Quelle der Störungen ist die H-Brücke. Durch das Schalter der FETs lässt sich das leider nicht vermeiden - der Nutzstrom liegt bei ~10A. Daher muss der Filter leider sein.

Du arbeitest am Symptom, nicht an der Ursache. Das Entstörglied gehört an den Verbraucher, der die Störung erzeugt.

Gruß Tommy

Oder die Störquelle von übrigen Aufbau abschirmen, aber nicht den I2C-Bus vermurksen.
Und du kannst ja auch nicht sicher sagen, ob die Störungen in das Display oder in den Controller einwirken.
Somit wird deine Maßnahme nicht wirklich helfen.

Nochmals, entstöre immer die Quelle, das ist sehr viel wirkungsvoller.

Vielen Dank für die vielen Antworten.

Der Ausgang ist ebenfalls ordentlich befiltert. Aber bis jetzt noch nicht getestet.
Die ganze Befilterung ist leider Pflicht in dem Projekt. Das Layout sieht bereits eine Trennung des Leistungsteils und des Logikteils vor. Im Idealfall sollte von der Quelle keine Störungen mehr ausgehen.

Aber dennoch wundert mich das Verhalten des Controllers. Gibt es eine Begründung, warum sich der Controller so an dem Filter stört, wenn kein Pullup verbunden ist?

ThinkPad:
.....
Aber dennoch wundert mich das Verhalten des Controllers. Gibt es eine Begründung, warum sich der Controller so an dem Filter stört, wenn kein Pullup verbunden ist?

Natürlich gibt es eine Begründung für dein Problem.

Da wir aber deine Schaltung, deinen Sketch, deinen Aufbau und deine Meßergebnisse nicht kennen müssen wir hier weiter raten. Und meine erste Vermutung jetzt, dein Netzteil ist nicht ausreichend und die Spannung bricht ein.

Ich vermute (mangels genügender Infos) dass die Tiefpässe das I2C-Signal so böse verschleifen, dass kener am Bus da noch eine sinnvolle Flanke erkennt.

Gruß Tommy

Tommy56:
Ich vermute (mangels genügender Infos) dass die Tiefpässe das I2C-Signal so böse verschleifen, dass kener am Bus da noch eine sinnvolle Flanke erkennt.

Gruß Tommy

Das sehe ich genau so, aber der TO schreibt ja, das muss so sein. :wink:
Einen I2C-Bus derart zu verbasteln, ist schon haarsträubend.

Den Schwachsinn wird er dann aber wohl allein aufdröseln müssen. Das ist für mich zu weit neben sinnvoll.

Gruß Tommy

Tommy56:
Den Schwachsinn wird er dann aber wohl allein aufdröseln müssen. Das ist für mich zu weit neben sinnvoll.

Gruß Tommy

Ja, es ist immer schwer, ein Problem nicht beheben zu wollen, sondern die Fehler über weitere Fehler zu umschiffen.
Das aufdröseln wird er wohl auch machen, dazu ist er jetzt auch schon wieder weg.

ThinkPad:
Hallo zusammen,

ich habe ein kleines Problem bzw. Frage.

Kurze Beschreibung:

Ich habe eine Platine zur Ansteuerung eines DC-Motors hergestellt. Auf der Platine wird der Arduino mit einem Sockel aufgesteckt. Über den I2C-Bus soll/wird ein Display (20x4 Zeichen) angesteuert. Um elektromagnetische Störungen zu vermeiden, habe ich in die SDA und SCL Leitungen einen Tiefpass integriert.

Hier die Schaltung:

Die Grenzfrequenz liegt bei 1.59 Mhz - das dürfte somit nicht das Problem sein.
Die Pullup Widerstände sind im Slave integriert und deshalb nicht zu sehen.

Problem:

Wenn das Display an der Platine nicht angeschlossen ist, startet der Arduino nicht mehr weil die Pullup Widerstände fehlen. Trenne ich den Arduino von der Platine, ist der Start ohne Probleme möglich.

Hat jemand vielleicht eine Idee, warum sich der Arduino an den beiden Filtern so stört?
Eigentlich sollte das nicht passieren, oder?

Viele Grüße

Ich denke mal du hast einen Osi zur Verfügung? Dann schaue dir die zwei Datenleitungen mit und ohne die beiden Kondensatoren und Widerstände an.

Franz

Kann nicht ein Device auf I2C Bus durch LOW halten des CLK-Signals den Master anhalten?
Grüße Uwe

Im Prinzip kann ein Slave die Takte verlängern, wenn er nicht schnell genug ist, doch ist dieses "clock stretching" nicht in jedem Controller implementiert. Auch das reine Verschleifen der Flanken durch den Tiefpaß könnte die Logik durcheinanderbringen, z.B. die Bus-Arbitrierung. Hinzu kommt die Belastung des Ausgangs beim Umladen des Kondensators, der könnte dadurch bald den Geist aufgeben. Bei 1nF ist ein Ausgang schon bei 60kHz am Limit, wenn der Strom auf 40mA begrenzt wird. Ohne Begrenzung gerät der magische Rauch in heftige Wallung...

Ich würde daher eher vermuten, daß sich das Programm im Setup aufhängt, wenn es keinen Slave am I2C Bus findet, oder die Arbitrierung einen zweiten Master vorspiegelt.

Für eine ordnungsgemäße spezifikationskonforme Entstörung würde ich mit twisted pair verkabeln, notfalls Flachbandkabel, da spuckt dann nicht mehr viel rein. Und Pullups an beiden Enden des Kabels für eine ordentliche Terminierung.

Und versuche das Problem noch etwas einzugrenzen. Teste mal ohne den Filter oder mal ohne Last an der H-Brücke. Aber dein Problem wird der Filter sein, in Busleitungen haben die normalerweise nichts zu suchen.

Gruß

Vielen Dank für die ganzen Antworten.

Ich habe nochmals das Datenblatt angeschaut. Die maximale Bus-Kapazität wird mit 400pF angegeben, allerdings als direkte Verbindung zum Output-Port. Daher sollte es der Hardware eigentlich nichts ausmachen (bezüglich der max. Stromanstiegsrate) , wenn die 1nF über den 100R Widerstand mit dem Ausgang verbunden sind. Das Problem löst es jedoch tatsächlich nicht.

Das Stichwort "Arbitrierung" brachte die "Lösung" des Rätsels. Daran hatte ich nicht gedacht, auch wenn ich da selbst drauf kommen hätte können. Durch den Kondensator und die fehlenden Pullup Widerstände wird der Pegel von der SDA Leitung zu klein und der Controller wartet auf ein Datenpaket.

Als nächsten Schritt tausche ich die Kondensatoren gegen 100pF oder 220pF und hoffe damit das Problem ordentlich zu beseitigen. Ein Bild von der Messung mit dem Oszi lade ich dann auch mit hoch.

Du mußt schon einen weiteren Widerstand einfügen, oder die 100R in Serie mit dem C schalten, damit kein Ausgangspin direkt am Kondensator hängt.

Die maximale Bus-Kapazität wird mit 400pF angegeben

Maximal!

Daher sollte es der Hardware eigentlich nichts ausmachen (bezüglich der max. Stromanstiegsrate) , wenn die 1nF über den 100R Widerstand mit dem Ausgang verbunden sind.

Du verwendest 1000pF, direkt an einem Ausgang.

Sage nicht nein, oder "das ist kein Ausgang".
Denn die Ausgangsstufen von Slave und Master sind identisch aufgebaut.

Und auch der Slave zappelt aktiv an den Leitungen. Genannt sei dazu das Clockstretching.

Frage:
Woher hast du die Idee, I2C Leitungen so entstören zu wollen?
Das würde mich wirklich interessieren....

Tipp:
PCA9600
MAX14937

Die Quelle der Störungen ist die H-Brücke.

Das glaube ich dir

Durch das Schalter der FETs lässt sich das leider nicht vermeiden

Naja....
Eine gewagte Behauptung

  • der Nutzstrom liegt bei ~10A.

glaube ich dir

Daher muss der Filter leider sein.

Fehlschluss auf Grund vager Annahmen

Begründung:
Die I2C Leitungen sind nicht an der H-Brücke angeschlossen, oder?
Darum kann die Brücke da nicht/schlecht rein streuen.
Oder hast du das Kabel 20 mal um Motor und Brücke gewickelt?

Also:
Zu 99,9% werden die Störungen über die Stromversorgung ein gestreut.

Abhilfe:
Stützkondensator an der Brücke vergrößern. (Low ESR)
Drossel davor
Sternförmige GND verkabelung
I2C Pullups mit geringem Widerstand verwenden
PWM Frequenz erhöhen

ThinkPad:
Ein Bild von der Messung mit dem Oszi lade ich dann auch mit hoch.

Ich dachte da mehr an das Bild unter den jetzigen Bedingungen. Da werden die High-Impulse mit den jetzigen Kondensatoren ziehmlich flach und kurz sein. Ohne die Kondensatoren siehst du was du haben solltest dass der I2C - Bus sauber arbeiten kann.

DrDiettrich:
Du mußt schon einen weiteren Widerstand einfügen, oder die 100R in Serie mit dem C schalten, damit kein Ausgangspin direkt am Kondensator hängt.

Die 100 Ohm sind ja in Serie zum Kondensator. Der Kondensator hängt nicht direkt am "Ausgang" - allerdings verhindert der Widerstand nur die Stromspitze beim Umladen des Kondensators. Wenn ich das ganze so betrachte, weiß ich auch nicht genau, was ich mir dabei gedacht habe. Das Tau ist für diese Signalart viel zu groß.

combie:
[...]

Frage:
Woher hast du die Idee, I2C Leitungen so entstören zu wollen?
Das würde mich wirklich interessieren....

[...]

Begründung:
Die I2C Leitungen sind nicht an der H-Brücke angeschlossen, oder?
Darum kann die Brücke da nicht/schlecht rein streuen.
Oder hast du das Kabel 20 mal um Motor und Brücke gewickelt?

Ist keine Idee, sondern eine Vorgabe. Es gab bei Vorgängern, welche das gleiche Projekt gemacht haben, wohl immer Probleme mit dem I2C Bus - daher hieß es, dass Filter vorzusehen sind.

Die Bauteilwerte bzw. Grenzfrequenz war einfach geschätzt. Im nachhinein betrachtet, keine sehr schlaue Idee gewesen. Bedingt durch die fehlende Zeit, habe ich aber auch nicht weiter darüber nachdenken können.
Was habe ich gelernt: Immer mit dem Datenblatt etwas auslegen und nicht blind schätzen!

Wo und wie die Störungen einkoppeln, kann ich noch nicht sagen. Den Leitungsteil hab ich noch nicht in Betrieb nehmen können. Morgen tausche ich erstmal die Kondensatoren.

Franz54:
Ich dachte da mehr an das Bild unter den jetzigen Bedingungen. Da werden die High-Impulse mit den jetzigen Kondensatoren ziehmlich flach und kurz sein. Ohne die Kondensatoren siehst du was du haben solltest dass der I2C - Bus sauber arbeiten kann.

Mal schauen, wie es zeitlich ist. Das es nicht gut aussehen wird, kann ich mir beim nachdenken gut vorstellen.