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
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
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.
>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.
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.
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
>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.
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.
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.
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.
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.
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?
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
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
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..