Hallo, ich betreibe einen Sensor über ein längeres ungeschirmtes Kabel an einem ATmega. Der uC treibt die SCK-Leitung, die SDA-Leitung wird am uC mit einem 1k pull-up auf 5V gezogen. Sowohl der uC als auch der Sensor können die Leitung auf GND ziehen. Der Sensor funktioniert meistens, jedoch sind auf SDA massive Störungen von SCK eingekoppelt (und andersrum, nur seltener). Ich habe eine LTSpice-Simulation erstellt, in der nur der uC SDA treibt, sie stimmt mit der Realität recht gut überein, siehe Anhänge. Wie kann das kapazitive Übersprechen verringert werden? Ein Widerstand in der SCK-Leitung bringt leider nicht den gewünschten Erfolg. Gruß Martin
> Wie kann das kapazitive Übersprechen verringert werden?
Anderes Kabel nehmen ;)
Man könnte die Anstiegszeiten von SCLK etwas langsamer machen, also
einen C ans Signal. Gefühlt aber irgendwie Pfusch :)
Oder mit einem langsamen Weak-Keeper das Signal virtuell niederohmiger
halten...
Ah! Da hat mal wieder jemand gelernt, dass man mit I2C keine längeren Strecken überbrücken sollte. Ein Satz PCA9600 oder P82B96 könnte das Design retten. fchk
Hier ein paar Sachen, die ich bei langen I²C-Leitungen gelernt hab: - kleiner C zum glätten bringt einiges (max. 400pF pro Leitung sind es glaub ich laut der Spec) - geringe Pull-Ups verwenden (hast du ja schon, wobei 1k schon arg wenig sind) - bei Flachbandkabel zwischen den SCL und SDA andere Leitungen legen, z. B. +5V GND. Hier habe ich auch mal von einer optimalen Anordnung gelesen. Leider aber wieder vergessen... - geringere Datenrate verwenden, wenn möglich
derp schrieb: > Hier ein paar Sachen, die ich bei langen I²C-Leitungen gelernt hab: > > - kleiner C zum glätten bringt einiges (max. 400pF pro Leitung sind es > glaub ich laut der Spec) 400pF insgesamt. D.h. Kabelkapazität, und Summe der Kapazität der Busteilnehmer. Viele Chips bieten eine Slew-Rate Begrenzung für I2C an.
hatte ein ähnliches Problem bei meinem Roboter. Habe den ISL33001 von Intersil verbaut. Dazu noch je einen kleinen Kondi zum glätten. Die Pullups habe ich von 1.2k auf 3.3k geändert. Seit her keine Probleme mehr.
@ Martin St. (martinst) >Wie kann das kapazitive Übersprechen verringert werden? Kapazität verringern. SCL und SDA jeweil mit einer eigenen Masseader verdrillen, sprich man nimmt gleich zwei verdrillte Paare. GGf. noch eine Schirmung aus Folie um jedes Paar. Ausserdem sind I2C Ausgangstreiber bewußt langsam, die schalten nicht wie ein AVR-Pin in 5ns (!) sondern eher in 100-500ns. Also einen echten I2C Treiber dazwischen schalten.
In der Tat. Slewrate ist alles, um Störungen zu erzeugen. Bei mir haben sich in der Praxis durch Einsatz von Stromquellen die Störungen schon mal drastisch reduziert. Ist zwar Billiglösung, dafür aber in jeder Grabbelkiste vorhanden.
Wenn auf der Empfängerseite die Leitung quasi offen ist, wirkt sie wie eine Antenne und schnelle Flanken von anderen Leitungen werden einkoppelt. Leitungsreflexionen kommen noch dazu. Mehr zu Übertragungsleitungen: http://ichaus.biz/upload/pdf/ei09_21_green_027.pdf . Falls der SPI-Daten- und Taktausgang genügend Strom kann würde ich auf der Empfängerseite mit dem Leitungswiderstand (ca. 120 Ohm) abschließen, oder so nahe wie es der Treiber hergibt.
@ Horst H. (horst_h44) >eine Antenne und schnelle Flanken von anderen Leitungen werden >einkoppelt. Leitungsreflexionen kommen noch dazu. Mehr zu >Übertragungsleitungen: Schon mal auf's Thema geschaut? Es geht um I2C, das ist eher langsam, das Thema Wellenwiderstand greift hier nicht. >SPI-Daten- und Taktausgang genügend Strom kann Können sie nicht, weil I2C.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.