Forum: Mikrocontroller und Digitale Elektronik Anfälligkeit von I2C-Bus Hardware?


von Bastian G. (Gast)


Lesenswert?

Hallo Leute,

ich brauche eure Einschätzung hinsichtlich hinsichtlich der Anfälligkeit 
von I2C-Bus Hardware. Ich möchte eine Strom-/Spannungsmessung für 
Kraftfahrzeuge realisieren.
Über einen Atmel lese ich über den I2C-Bus mehrere A/D-Umsetzer aus. Auf 
dem Labortisch hat der Aufbau immer gut funktioniert. Prototypisch im 
Auto montiert funktioniert die Datenübertragung nicht mehr.
Ich benutze den Code von Peter Fleury. Beim überprüfen des Slaves bleibt 
der Code jedoch immer hängen. (
1
if(!(i2c_start(slaveadresse+I2C_WRITE)))  // Slave bereit zum Schreiben?
)


Ich vermute ein Hardwareproblem. Nachdem das Problem aufgetreten ist, 
habe ich ein 2. Board eingesetzt. Dies hat kurzzeitig funktioniert, bis 
ich die Pull-Up-Widerstände getauscht habe. Dann gleiches Problem wie 
oben beschrieben.

Die Pull-Up-Widerstände habe ich von 4,7k auf 680R getauscht, da die 
Flankensteilheit durch lange Busleitungen zu gering und dadurch die 
Übertragung teilweise fehlerhaft war.

Sind diese Widerstände zu niederohmig und haben die I2C-Hardware des 
Controllers zerstört? Bzw. ist im Atmel der Bus i.A. kurzschlussfest?

Habt ihr Anregungen für mich?

Danke,
Bastian

von troll (Gast)


Lesenswert?

Einen Oskar an den Bus hängen und gucken was passiert geht nicht?

von Klaus (Gast)


Lesenswert?

Bastian G. schrieb:
> Sind diese Widerstände zu niederohmig und haben die I2C-Hardware des
> Controllers zerstört? Bzw. ist im Atmel der Bus i.A. kurzschlussfest?

Kurzschluß wohin? Nach GND passiert nichts, nach Vcc ist sicher nicht 
gesund.

I2C Ausgänge müssen mindestens 3mA nach GND treiben können. Zusammen mit 
der Busspannung kann man die zulässigen Widerstände ausrechnen. Dein µC 
wird mehr als 3mA schaffen, deine Slaves ???

Probleme bei längeren Leitungen sind häufig klassisches Übersprechen, 
hier zwischen SDA und SCL, weniger "krumme" Signale.

MfG Klaus

von Thomas L. (ics1702)


Lesenswert?

vielleicht liegt es auch an der Stromversorgung. Das KFZ Boardnetz ist 
nicht ganz  unproblematisch.

von olibert (Gast)


Lesenswert?

Bastian G. schrieb:
> Die Pull-Up-Widerstände habe ich von 4,7k auf 680R getauscht

Im Atmel-Datenblatt steht die Formel zur Berechnung der Widerstanede. 
Ja, 680 Ohm sind zu wenig.

von rcc (Gast)


Lesenswert?

wie lange sind die Leitungen? Im KFZ gibts mit längeren I2C Leitungen 
oft und gerne EMV-Probleme.

von holger (Gast)


Lesenswert?

>wie lange sind die Leitungen? Im KFZ gibts mit längeren I2C Leitungen
>oft und gerne EMV-Probleme.

Deshalb nehmen die Autohersteller ja auch CAN, und keinen Radio und 
Fernsehbus.

von nicht Gast (Gast)


Lesenswert?

Was hast du für eine Datenrate?
Wie Lange ist die Leitung?

Prinzipiell ist I2C aus Bussystem auf einer Platine gedacht. Wenn man da 
jetzt lange Kabel dranhängt muss man sich nicht wundern das man mit der 
Datenrate runter muss. Auch ist bei einer langen Leitung der 
Spannungsabfall ewt. ein Problem wen man die Pullups zu niederohmig 
macht.

von Pier S. (bigpier)


Lesenswert?


von Klaus (Gast)


Lesenswert?

nicht Gast schrieb:
> Prinzipiell ist I2C aus Bussystem auf einer Platine gedacht

Diese Gerücht ist hartnäckig. In jedem DVI-Kabel ist ein I2C Bus drin, 
das funktioniert mühelos über 5m (mit Millionen von verschiedensten 
Monitoren)

MfG Klaus

von holger (Gast)


Lesenswert?

>Diese Gerücht ist hartnäckig. In jedem DVI-Kabel ist ein I2C Bus drin,
>das funktioniert mühelos über 5m

Über ein DVI Kabel laufen aber auch keine Ströme von
mehreren Ampere.

von nicht Gast (Gast)


Lesenswert?

Ich habe ja nicht gesagt das es nicht geht und das es gemacht wird. Es 
gibt ja auch Leute die haben damit ein ganzen Hausbus mit aufgebaut.
Entwickelt wurde es aber nicht für diese Anwendung. Wenn man bei der 
einen oder andern Sache Abstriche macht geht so was natürlich ohne 
Probleme.

Ich denke wenn man die Geschwindigkeit auf - sagen wir mal - 20 kBit/s 
runter schraubt und die Widerstände nicht so klein macht wird das schon 
klappen...

Offtopic:
Ich kann auch mit einem Porsche 5 Säcke Zement, auf dem Beifahrersitz 
transportieren, nur sollte ich dann nicht unbedingt mit 200 km/h über 
die Autobahn brettern.

von Marco S (Gast)



Lesenswert?

Ich hatte auch mal Probleme mit einem gestörten I2C-Bus, wobei in 
unmittelbarer Nähe über ein Schütz eine Last geschaltet wurde. Zudem war 
über die lange Leitung auch noch ein starkes Übersprechen beim SW-I2C zu 
beobachten. Gegen Übersprechen hat es schon geholfen, den I2C-Bus von 
der TWI-HW zu treiben. Mit den Stromspiegeln als aktive Pullups war von 
den Übersprechen nichts mehr zu sehen und auch die Störungen des 
Schützes waren vernachlässigbar klein.

von Bastian G. (Gast)


Lesenswert?

Die Busleitung war 50-60cm lang und der Controller wurde aus einer 
separaten Batterie versorgt. Auch lief der Motor des Autos nicht.
Mit der gleichen Verkabelung hat es auf der Werkbank bei 400 kBit und 14 
Knoten immer problemlos funktioniert.
Ich habe den GND vom Controller mit der Fahrzeugmasse verbunden, jedoch 
sollte dies kein Problem sein.

von HildeK (Gast)


Lesenswert?

Die 680R sollten noch keinen IC geschädigt haben (bei 3.3V), sie sind 
aber nach der I2C-Spec etwas zu tief geraten. 3mA ist der maximale Strom 
für den Standard- und den Fast-Mode, also wäre das Minimum so ca. 1kΩ 
(bei 3.3V). Es wird wohl so sein, dass die Empfänger nicht mehr 
zuverlässig den LOW-Pegel sehen, wenn du zu tief liegst. Siehe auch 
http://ics.nxp.com/literature/interface/?search=Specification
Der Ansatz, mit den Pullups runter zu gehen, war aber schon richtig. 
Zudem kann man noch an den Eingängen einige 10Ω in Serie schalten und 
vielleicht über einen kleinen Kondensator (Bereich 10pF ... 50pF) direkt 
an den Eingängen nachdenken.
Etwas vergleichbares zum Vorschlag von Marco S ist in der Spec auch 
enthalten.

von Bastian G. (Gast)


Lesenswert?

Danke, ich werde morgen mal einen Wert um 2kΩ probieren. Mein System 
läuft auf 5V. Hoffentlich lässt sich der Controller reanimieren...

Die Serienwiderstände nur auf der Seite des Controllers oder an jedem 
Knoten?

von Dumpfbacke (Gast)


Lesenswert?

IIC kann man auch mit CAN-Tranceivern nutzen, google mal.

von Klaus (Gast)


Lesenswert?

holger schrieb:
> Über ein DVI Kabel laufen aber auch keine Ströme von
> mehreren Ampere.

Sicher richtig. Wobei die Ströme eigentlich unerheblich sind, es sind 
die Stromänderungsgeschwindigkeiten (furchtbares Wort, eigentlich steile 
Flanken im Strom). Wenn die überkoppeln, hat man etwas falsch gemacht, 
ob I2C, SPI oder RS232. Differentiell macht es etwas leichter, das 
Problem bleibt aber.

MfG Klaus

von Klaus (Gast)


Lesenswert?

Bastian G. schrieb:
> Die Serienwiderstände nur auf der Seite des Controllers oder an jedem
> Knoten?

Schlechte Idee. Serienwiderstände heben bei einem Open-Collectorbus den 
Low-Pegel an. Und alle SM-Bus kompatiblen Bausteine haben 
Schaltschwellen wie TTL, 0,8V. Sie sind eigentlich nur Angstwiderstände 
um den Strom durch die Substratdioden bei Störungen zu begrenzen, die 
Signale machen sie aber schlechter.

MfG Klaus

von Bastian G. (Gast)


Lesenswert?

Ich habe heute für die Pullups jeweils 2,1kΩ eingesetzt. Plötzlich hat 
die Übertragung wieder problemlos funktioniert. Warum es gestern mit den 
680Ω nicht mehr funktioniert hat, obwohl es vor Weihnachten mehrere 
Wochen lief, ist mir allerdings nicht verständlich..

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.