Hallo, ich versuche gerade einen I²C-Bus mit einem PCA9515A zu erweitern. Zum Hintergrund: Im Rahmen meiner Masterarbeit führe ich in der Klimakammer einen Versuch mit digitalen Feuchte-/ Temperaursensoren durch. Die Sensoren besitzen eine I²C-Schnittstelle, daher betreibe ich sie in einem I²C-Bus mit Arduino Uno als Master. Mit der Gesamtkabellänge komme ich auf ca. 15 m. Für meinen Versuch kommen keine Lösungen in Frage, bei denen elektronische Bauelemente innerhalb der Klimakammer verschaltet werden müssen (es werden Bedingungen wie 85°C, 85% rel. Feuchte erreicht). Darum kann ich keine Extender verwenden, bei denen ich kurz vor dem Sensor einen IC anbringen muss. Ich habe mich darum für den PCA9515A entschieden, mit dem ich den Bus in zwei Teilbusse aufteilen kann, wodurch in etwa die doppelte Buskapazität verwendet werden kann. Zur Frage: Bei der Verschaltung des Busses mit Repeater habe ich mich an Abbildung 3 im Datenblatt gehalten (http://www.ti.com/lit/ds/symlink/pca9515a.pdf). Allerdings habe ich noch nicht ganz verstanden wie ich mit dem EN Pin umgehen muss. Im Datenblatt steht, in welchen Bereichen Low und High liegen müssen und zur Funktion steht in einer Tabelle: Low: Outputs disabled High: SDA0=SDA1, SCL0=SCL1 Weiterhin steht zu dem EN-Pin im Datenblatt "It never should change state during an I²C operation, because disabling during a bus operation hangs the bus, and enabling part way through the bus cycle could confuse the I²C parts being enabled." Ich hatte darum gehofft, dass ich EN einfach nur auf "High" setzen muss damit der Repeater arbeitet. Die Verschaltung habe ich folgendermaßen realisiert: SCL0 und SDA0 werden wie bei meiner ersten Busschaltung (die ohne Repeater war) von den Analogen Pins A5 und A4 des Arduinos versorgt. GND ist gleichzeitig Low und mit einem GND-Pin des Arduino verbunden. VCC=VDD=High=EN=3,3V (vom Arduino) Die Sensoren vom zweiten Teilbus werden dann über die Ausgänge SCL1 und SDA1 vom Repeater versorgt, an VDD und GND ändert sich nichts. Wenn ich nun den Bus betreiben möchte kann der Master nur mit dem ersten Teilbus kommunizieren. Die Schaltung ohne den Repeater funktioniert, es liegt also nicht an der Kabellänge. Weiß jemand was ich falsch gemacht haben könnte? Ist hier ein offensichtlicher Denkfehler drin? Ich würde mich sehr über Anregungen freuen. Grüße, Esther
Esther F. schrieb: > Im Rahmen meiner Masterarbeit führe ich in der Klimakammer einen Versuch > mit digitalen Feuchte-/ Temperaursensoren durch. Die Sensoren besitzen > eine I²C-Schnittstelle, daher betreibe ich sie in einem I²C-Bus mit > Arduino Uno als Master. Mit der Gesamtkabellänge komme ich auf ca. 15 m. Der I²C Bus ist extrem störanfällig. Falls überhaupt funktioniert das bei dieser Kabellänge nur sehr langsam. Die Erkennung von Übertragungs-Fehlern ist nicht integriert und je nach Sensor gar nicht möglich. Im Auto im Motorraum herrschen ebenfalls widrige Bedingungen, und da wird erst recht kein I²C verwendet. Stattdessen könntest du wie dort an jeden Temperatursensor direkt einen Automotive-Grade Mikrocontroller anzuschließen, der die Messwerte dann über CAN weiterreicht. Die NXP Kinetis EA Series beispielsweise kann teilweise bis 125°C Temperatur und hat CAN-Controller integriert. Gegen die Feuchtigkeit hilft Eingießen. Der CAN-Bus ist aus Software-Sicht auch viel einfacher zu verwenden, Fehler werden automatisch erkannt, Multi-Master-Betrieb ist kein Problem, und die Signale werden differentiell übertragen.
Esther F. schrieb: > Allerdings habe ich > noch nicht ganz verstanden wie ich mit dem EN Pin umgehen muss. Im > Datenblatt steht, in welchen Bereichen Low und High liegen müssen und > zur Funktion steht in einer Tabelle: > Low: Outputs disabled > High: SDA0=SDA1, SCL0=SCL1 EN muss zwischen 2V und 5.5V liegen für Enable. Für Disable > -0.5... 0.8V. VCC darf nur max 3.6V sein (verwendest du 5V?). Der EN hat intern schon einen Pullup, ist also bei Nichtbeschaltung bereits aktiv. Auf beiden Seiten des ICs müssen natürlich entsprechende Pullups gegen den VCC des Busses sein (hast du die und wenn ja wie groß)
:
Bearbeitet durch User
Esther F. schrieb: > Mit der Gesamtkabellänge komme ich auf ca. 15 m. Du weißt aber schon, dass der IIC-Baus ursprünglich mal für die Verbindung von ICs innerhalb eines Gerätes entwickelt wurde und für lange Kabel eigentlich nicht gedacht ist.
Danke für eure schnellen Antworten! @ Dr. Sommer: Ich weiß dass I²C für diese Kabellänge nicht gedacht ist. Wenn alles andere nicht funktioniert muss ich das ganze wohl tatsächlich auf einen CAN-Bus übertragen. Da aber die Datenübertragung ohne den Repeater bisher noch funktioniert (auch wenn der Signalverlauf natürlich nicht toll aussieht) hoffe ich, dass die Messung mit Repeater trotzdem zuverlässig laufen wird. @ Timmo: Ich verwende 3.3 V (Ausgang vom Arduino) als VDD, VCC und High für Enable. Als Pullup-Widerstände habe ich jeweils 1k eingesetzt. Der EN ist im Moment dauerhaft auf "High" also Enable gesetzt. Ist das richtig? Oder müsste er ein Signal bekommen, das zwischen "Low" und "High" variiert je nachdem welcher Teilbus gerade arbeitet?
In der Hoffnung, dass dies jemand liest, der mir helfen kann, hier nochmal in kurz meine wichtigste Frage zur Verschaltung des PCA9515A: Ist es richtig, den EN-PIN während des Betreibens der Schaltung dauerhaft auf "High" also Enable zu setzen?
Ja das ist in Ordnung. Den State solltest du auch nur ändern wenn der Bus Idle ist.
In meinem TV ist ein BA8274/F als Bidirektionaler Puffer drin, wäre das nicht auch eine Lösung? Operating Temperature ist lt. Datenblatt -40 ... +85°C, der sollte also auch die Klimakammer überleben.
Ich bringe mal diesen I2C Bus Treiber ins Spiel, der könnte da helfen: http://www.nxp.com/documents/data_sheet/P82B715.pdf Stefan
Esther F. schrieb: > In der Hoffnung, dass dies jemand liest, der mir helfen kann, hier > nochmal in kurz meine wichtigste Frage zur Verschaltung des PCA9515A: > > Ist es richtig, den EN-PIN während des Betreibens der Schaltung > dauerhaft auf "High" also Enable zu setzen? Mal eine kurze Zwischenfrage: Liegen deine Verständnis-Probleme beim technischen, bei der englischen Sprache oder bei beidem? (Bedenke, du schreibst an deiner Masterarbeit ...) Edit: Typo
:
Bearbeitet durch User
Kleines Update: Ich habe alles noch einmal neu verschaltet und nun kann der Master auch mit dem zweiten Teilbus kommunizieren. Ich muss wohl bei der ersten Umsetzung einen Fehler gemacht haben, der Plan war aber richtig. Danke an alle, die sich Gedanken gemacht haben! Der Signalverlauf sieht natürlich im Oszi dennoch nicht richtig schön aus. Ich werde also noch etwas mit den Pullup-Widerständen rumprobieren und eventuell die Taktfrequenz heruntersetzen müssen. Michael L. schrieb: > Mal eine kurze Zwischenfrage: Liegen deine Verständnis-Probleme beim > technischen, bei der englischen Sprache oder bei beidem? > > (Bedenke, du schreibst an deiner Masterarbeit ...) @Michael: Ich habe meine Vorgehensweise hinterfragt, weil ich auf Fehlersuche war. Da ich mir beim Rest des Schaltplans sicher war, schien es mir am wahrscheinlichsten, dass meine Vorstellung von der Funktion des EN-Pins falsch war. Daher wollte ich sichergehen, dass ich nicht einen offensichtlichen Denkfehler gemacht habe. Ich denke das ist ganz ok wenn man sich gerade neu in ein Thema einarbeitet, das nur am Rande mit dem eigentlichen Thema der Masterarbeit zu tun hat.
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.