Ich verwende LM92 Sensoren zum Messen der Innen und Außentemperatur. Ein LM92 sitzt also direkt auf der Platine, der andere ist über 3m Flachband Kabel angeschlossen. Pullups: je 1kOhm und zusätzlich noch 47Ohm in Serie zur langen Leitung. Das ganze ist an einen mega8515 angeschlossen und läuft per Software I2C Routinen mit rund 30kHz. Allerdings gibt es sehr oft Probleme (kein ACK, falsche Daten usw.) Das ganze lief jetzt rund 1 Jahr mehr oder weniger mit Fehlerkorrektur. Seit gestern liefert der Außensensor keine Daten mehr. Also habe ich einen einfachen I2C Logger (attiny2313 + 10cm Kabel) angeschlossen, um mir den Datenverkehr anzuschauen. Jetzt liefert der Außensensor plötzlich fehlerfrei die Daten, dafür bekomme ich vom Innensensor kein ACK mehr. In verschiedensten AppNotes von Philips wurde I2C mit einigen 10m problemlos bei 100kHz betrieben. Wieso habe ich also bereits bei 30kHz und 3m Kabel solche Probleme ? Auf dem Oszilloskop sehen die Signale ziemlich rechteckig aus, also scheint das ganze an Reflektionen am Kabel zu liegen. Das kann ich allerdings schlecht beurteilen, denn je nach Zusatztlast am Kabel geht entweder alles besser oder garnichtmehr. Kann man einen I2C Bus beidseitig terminieren, und wenn ja wie ? Oder gibt es sonst noch irgendeine Lösung ?
Versuch mal, beidseitig Pullup-Widerstände zu setzen, evtl. nur 4k7 beim Slave (Sensor) und nicht 1k. Ich hätte bisher bei I2C keine nennenswerten Probleme festgestellt über ca. 10m, v.a. nicht bei nur 30kHz. Die Software I2C Routine ist sauber?
Ja, die Software Routine nutzte ich für viele andere Sachen, und hatte damit noch nie Probleme. Auf kurze Entfernung läuft die auch wunderbar mit beiden Sensoren (je ca. 10cm Kabel)
I2C-Bauteile sind für max 3mA spezifiziert, d.h. 1k (5mA) ist zu klein. Ich nehme 1,8k. Es kann auch nichts schaden, auf beiden Seiten des Kabels je einen Pullup (doppelter Wert) zu setzen. Peter
Ist der Außensensor auf einer Platine in einem Gehäuse untergebracht, oder direkt am Flachbandkabel angelötet und eingeschrumpft o.ä.? Ich hatte auch LM92 eingeschrumpft, wenns nicht richtig dicht ist, kann eindringendes Wasser wohl Schaden anrichten. Da würde ich mal nachsehen. Und die Pullups sind nicht etwas klein? Würde auch mind. 4k7 verwenden, hat bei mir immer problemlos funktioniert.
Hallo, auf 10cm gibt es vermutlich auch keine Störungen auf den Kabeln. Wie verhält sich die I2C-Routine bei Störungen? Flankenwechsel von SDA/SCL auf Störspitzen geprüft (also erst als gültig betrachtet, wenn sie eine Mindestzeit einhalten)? Wenn die Routine sofort bei Wechsel auf SDA/SCL weitermacht, reicht jede Störnadel, um den Ablauf aus dem Tritt zu bringen. Nur als Vermutung... Gruß aus Berlin Michael
Ich habe jetzt 4,7k beim uC und 6,8k beim Außensensor. Es geht ein kleinwenig besser, aber immer noch nicht so wie es sein sollte. Ist eine Slew Rate Begrenzung sinnvoll (über zusätzliche Kondendatoren am uC) so wie es eigentlich die I2C Spezifikationen vorsehen, oder haben die Leitungen ausreichend Kapazitäten ?
ich nehme mal an du hast sogar zuviel kapazitäten drauf.. bei philips gibts eine appnote über i2c-expander und wie weit das mit welcher geschwindikgeht geht... ich würd sagen 1Khz müsste schon gehn... oder eben nen i2c expander... 73
3 Meter unabgeschirmtes Flachbandkabel bilden eine schöne Antenne. Ich würde es erst mal mit abgeschirmtem Mikrofonkabel o.ä. probieren, das hilft mehr als niederohmige Abschlußwiderstände ( die natürlich auch eingestreute Hochfrequenz vermindern).
Hallo Benedikt, wie verhält sich Dein System wenn: - Die Taktrate sehr stark verringert wird ? - Die Widerstände Durch eine Konstantstromquelle ersetzt werden ? Wo kann man diese Sensoren beziehen? Gruß Bernhard
Eine Taktratenänderung bringt nicht viel, ich habe schon von 10kHz bis 100kHz alles durchprobiert. Stromquelle könnte ich mal einbauen, aber die Signale sehen eigentlich fast rechteckig aus, und das trotz Tastkopflast (mit dieser bekomme ich aber garkein Acknowledge mehr). Wo man die LM92 bekommt weiß ich nicht, aber ich würde von denen auch abraten. Diese sind meiner Meinung nach sehr empfindlich was eine nicht perfekt saubere Betriebspannung angeht. Dann laufen diese auch mit kurzem Kabel nicht. Der LM92 gehört in den selben Bereich wie der LM75 mit dem auch schon einige andere hier im Forum Probleme hatten. Ich verwende den DS1820 auch schon seit längerem, am Anfang parallel zu dem LM92 über ein gleichlanges Kabel. Selbst ohne CRC hatte ich damit noch nie einen Übertragungsfehler. Auch die Temperatur springt weitaus weniger. Dafür kostet der etwas mehr und die Übertragung ist halt asynchron weshalb das Timing kritisch ist (weshalb ich auch den LM92 verwendet habe, was eine Fehlentscheidung war.)
Kann es sein, dass sich der LM92 intern "aufhängt" ? Was passiert, wenn Du, bevor Du die Daten ausliest, die Betriebsspannung der LM92 kurzzeitig abschaltest (Reset)? Die Pins für die Adressvergabe liegen auch richtig auf HIGH bzw LOW und bammeln nicht in der Luft? Ersetze doch den LM92 mal durch einen anderen SLAVE, zB. TWI-EEPROM, treten dann die gleichen Probleme auf?
> kein ACK, falsche Daten usw.
Siehe Philips Application Note AN444 im Anhang.
-Ist das Flachkabel unbeschaedigt?
-Problem mit uebersprechen? Liegt jede zweite Leitung im Flachkabel an
Masse?
-Schwebt nicht irgendwo eine Masseanschluss?
-Ist der Fehler irrgendwie Temperatur-/Feuchte-/Sonne-abhaengig?
-Ist die Versorgungsspannung (an allen Enden gemessen) in Ordnung?
-Ist die Versorgungsspannung (an allen Enden) gepuffert und
entkoppelt?
-Sind die SCL und SDA Pegel fuer 0 und 1 (an allen Enden) in Ordnung?
-Gibt es eine kalte Loetstelle?
-Gibt es eine nahezu Unterbrechung (oder zu wenig Querschnitt)
irgendwo im Flachkabel?
-Falls das Flachkabel auf insgesamt 5-6 Meter verlaengert wird
funktioniert es besser/gleich/schlechter/gar nicht mehr?
-Kann dein Oszi speichern und triggern auf Impulszeit kleiner als SCL
Clockpuls?
-Kann dein Oszi speichern und bleibt SDA immer stabil 0 oder 1 waehrend
SCL 1 ist?
-"Zusatztlast", "Tastkopflast", ... sind Tastkopf und
Masseverbindung in Ordnung?
-Was sind die Umgebungsbedingungen? Gibt es Stoerquellen in der naehe?
Abgeschirmtes Kabel verwenden. Eventuell Leitungstreiber (I2C expander)
verwenden.
Es wird schon zu spaet....
Peter -NL
Nach langer Fehlersuche habe ich die Fehler doch noch gefunden: - Die Leitungen wirken als Antenne, daher werden selbst bei fehlerfreier Schaltung ab und zu ein paar Werte falsch übertragen: Kann ich per Software abfangen - Das Kabel hatte an der Stelle wo es durch das Fenster nach draußen geht eine kleine Unterbrechung - Die Platine mit dem uC hatte eine schlechte Lötstelle so dass ab und zu die Betriebsspannung ausfiel. Der mega8515 @16MHz versorgte sich dann über Datenleitungen und lief stabil mit 1,8V. Selbst dem SRAM schien die 1,8V nichts auszumachen, nur der I2C Bus fiel dann aus.
Gut das Du weitergesucht und nicht aufgegeben hast! Auch gut dass Du hier eine Nachricht schreibst. Vielleicht schreibst Du noch eine weitere Nachricht falls (und wie) Du tatsaechlich DIE FEHLER gefunden hast, behoben, und es auch wirklich zuverlaessig funktioniert.
@Bendikt
>Nach langer Fehlersuche habe ich die Fehler doch noch gefunden
Das kostet Dich aber für uns alle eine Runde Limonade ;)
Ich hatte mich zu früh gefreut: Vorgestern abend, 23Uhr: 26,9°C Das ist etwas zu warm, kein Wunder: Die Außentemperatur änderte sich seit 6 Stunden nicht mehr. Außensensor abgeklemmt: Temperatur fiel auf 0°C (so wie es sein soll). Sensor wieder angeklemmt: 21,1°C. Das passt schon besser. Am nächsten morgen: 21,1°C. Der I2C Bus funktioniert, nur der LM92 misst nichts mehr. Anscheinend verstellt sich bei Übertragunsgfehlern das Control word und aktiviert so den Shutdown. Seitdem schreibe ich alle paar Sekunden das Control word in den LM92 und jetzt läuft das ganze (hoffentlich.)
Ich bin mal den Weg gegangen, weil die Entferung zum Sensor nicht bekannt un dsomit relativ groß sein konnte, die Signale zu symmetrieren (RS422-Transceiver). Das erfordert zwar ein Leitungspaar mehr, ist dafür aber störsicherer. Die bidirektionale Datenleitung habe ich in eine Sende- und eine Empfangsleitung geteilt. Dazu habe ich einen 74xx125-Baustein verwendet, der zwischen Masse und hochohmig umgeschaltet wird. Man könnte vermutlich auch einen Transistor nehmen. Auf der Master-Seite hat man dann zwei Sender und einen Empfänger, auf der Slaveseite zwei Empfänger und einen Sender. Da es sich beim Sensor um einen SHT11 von Sensirion handelt, der ein nicht ganz I²C-konformes Protokoll benutzt, war ich gezwungen, die Schnittstelle "händisch" zu realsieren. Deswegen habe ich mir dann auch die Schaltung mit den Pull-up-Widerständen sparen können und bin direkt auf die RS422-Transceiver gegangen. Auf der Sensor-Seite funktioniert die Schaltung einwandfrei, weswegen ich vermute, dass das genauso mit der richtigen I²C-Schnittstelle funktionieren müsste. Wenn man CAN-Transceiver benutzen würde, könnte man IMHO auch mehrere Sensoren an den "differentiellen I²C-Bus" hängen...
Mit einem einzelnen Transistor kann es natürlich nicht funktionieren, weil der das Signal ja invertiert.
"In verschiedensten AppNotes von Philips wurde I2C mit einigen 10m problemlos bei 100kHz betrieben. Wieso habe ich also bereits bei 30kHz und 3m Kabel solche Probleme ?" Ist vielleicht plötzlich ein starker Störer in deiner unmittelbaren Nähe hinzu gekommen?
Hallo, ich kämpfe auch mit i2c über lange Wege (ca. 5m). Hat bei mir auch schon funktioniert und ging dann plötzlich nicht mehr... Weiter oben steht "Ist die Versorgungsspannung (an allen Enden gemessen) in Ordnung? -Ist die Versorgungsspannung (an allen Enden) gepuffert und entkoppelt?" Was ist damit gemeint ? Puffern => Kondensator (z.B. 100 nF Keramik) zwischen GND und Versorgungsspannung bei jedem Knoten ? Entkoppeln ? Wie was wozu ? Ich kann bei mir am Oszi sehen, dass die Versorungsspannung einbricht sobald Daten übertragen werden. Das war aber schon immer so und hat zumindest früher nicht gestört.... Als Kabel verwende ich ein geschirmtes Kabel, 4 mal 0.14 mm2 Litzen. die Schirmung ist nicht an Masse oder sonst was. Hilft es die Schirmung an Masse zu legen (bzw. ich vermute es stört eher) ?!? Alle ca. 1.2 m hängt ein I2C Temp.sensor MCP9801 (4 in Summe), Master ist ein PIC 18F2680. Danke für Hilfe im Voraus !
Meine komplette Wohnung habe ich verkabelt, es hängen ca. 20 Sensormodule dran (Raumtemperatur, Heizkörper, DCF, Wetterstation usw.) Natürlich kommt es zu Störungen auf dem BUS, z.B. wenn meine bessere Hälfte mit dem Staubsauger herumwirbelt und ihn ein- und ausschaltet. Die Sensormodule erkennen eine Störung (z.B. der Bus ist längere Zeit belegt und schalten sich kurzzeitig ab) Sollte das einzelne Abschalten der Sensoren auch nicht helfen, dann wird kurzzeitig die komplette Betriebsspannung abgeschaltet (aber erst nach einigen Minuten). Bernhard
Hallo ! bei mir sind es keine temporären Störungen sondern eher permanente. 2 Kabel (ca. 4-5m, überall 4 i2c MCP9801 dran) funktionieren, nun habe ich 2 Kabel fast exakt gleich aufgebaut (NUR der Abstand der Sensoren ist ein wenig unterschiedlich) und mit diesen Kabeln geht´s nicht... Auf den anderen 2 Kabeln schaffe ich 100kHz ?!? Wie kann das sein ? Hie und da meldet sich einer der Sensoren und dann ist wieder ewig lange nichts... Die Sensoren habe ich vorher getestet, funktionieren alle mit kurzem Kabel, nur beim "Zusammenschalten" nicht mehr.... Dass i2c nicht für lange Distanzen geeignet ist, war mir klar. Ich dachte das Kapazitätsproblem kann ich einfach durch Drosseln der Bitrate lösen - wobei 100kHz eh viel mehr sind als ich brauche. Verwendest du spezielle Kabel, Bustreiber oder Abschlusswiderstände etc. ? Danke !
> Verwendest du spezielle Kabel, Bustreiber oder Abschlusswiderstände etc. Die Abschlusswiederstände sind jeweils ca. 1k, als Kabel ist teilweise nur einfachster Klingeldraht verwendet worden, ohne Schirmung. (Zu Versuchszwecken benötige ich einen von außen stark gestörten Bus) Allerdings habe ich den Takt sehr stark reduziert, auf ca. 10 KHz, bei 100Khz gab es unangenehme Übertragungs-Probleme. >ich kämpfe auch mit i2c über lange Wege (ca. 5m). Hat bei mir auch schon >funktioniert und ging dann plötzlich nicht mehr... Sieht das Fehlerbild so aus, dass ein Slave die SDA-Leitung auf LOW zieht? Ist es immer der gleiche Slave? Mit einfachen LED's kann man das sehr schön sichtbar machen. >Ich kann bei mir am Oszi sehen, dass die Versorungsspannung einbricht >sobald Daten übertragen werden. Das war aber schon immer so und hat >zumindest früher nicht gestört.... Die Versorgungsspannung bricht zusammen? Wie stark bricht sie zusammen? Wenige µV oder merhere Volt? Bernhard
Ich bin mir ziemlich sicher, dass das Problem durch Leitungsreflexionen verursacht wird. Ob 3m Kabel viel sind oder nicht, hängt vorallem von der Flankensteilheit des Signales ab. Bei I2C wird wahrscheinlich die fallende Flanke vom SCL Signal zu kurz sein, wass dann zu Reflexionen führen kann. Egal, wie hoch deine Taktrate ist, die Flanke wird immer zu steil sein, deswegen ist das Problem unabhängig von der Taktrate. ÜBer die Pull-ups kann keine Anpassung erreichen, da die Impedanz der Leitung im Bereich 50 bis 150 Ohm liegt und ein Pull-up im KOhm Bereich da nichts bringt. Lösung: Fallende Flanke langsamer machen, z.B. mit einem C am Master, aber nicht zu viel, weil nur 400pF auf dem Bus erlaubt sind. Oder den Bus anpassen, damit die Reflexionen unterdrückt werden.
Hallo Pavol, mit Reflektionen kann man die Probleme nicht komplett erklären. Ich selber habe nachvollziehbare Probleme mit dem DS1631 und ähnlichen Sensoren (TMP102, ...) gehabt. Mein Master ist ein MSP430. Hier hat TI eine sehr gute Arbeit geleistet. Das Timing des I2C-Protokolls ist hervorragend. Ich setze noch einen P82B96 als Buffer und Levelshifter ein. Jeder I2C-Slave ist über 330 Ohm Widerstände angeschlossen. Also alles nach dem Lehrbuch, vom Feinsten. Ein I2C-Bus, 10m 8adriges KAT5 und dann 6 DS1631 sternförmig 2-3 m, laufen seit über 2 Jahren auf Anhieb ohne Probleme. Ich hatte jetzt einen zweiten I2C-Bus in Arbeit und beim Testen nur ca. 2m Zuleitung. Es gab schon bei zwei Sensoren Probleme. Durch Debuggen der MSP430 - I2C-Funktionen stellte ich fest, dass direkt beim Init der erste Ack nicht kam. Der Check mit dem Oszi zeigte nichts, saubere Rechtecke bis hoch zu 100 KHz Takt. Nach einigen Tagen erfolgloser Bemühungen habe ich dann die Zuleitung auf 20m verlängert (8 adriges Telefonflachkabel, Litze). Und siehe da, die Probleme verschwanden. Ich habe es noch nicht weiter getestet. Aber demnach müsste man masterseitig mit ca. 3,6 Ohm in serie und vielleicht 100pF die Zuleitung nachbilden können. Kurrios ist, ein PCF8574 arbeitet einwandfrei, selbst wenn die DS1631 versagen. Mich würde es interessieren ob jemand ähnliche Erfahrungen gemacht hat. Gruss Klaus.
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.