Forum: Mikrocontroller und Digitale Elektronik I²C Repeater PCA9515A - Verschaltung


von Esther F. (esther_f)


Lesenswert?

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

von Dr. Sommer (Gast)


Lesenswert?

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.

von Timmo H. (masterfx)


Lesenswert?

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
von LangeLeitung (Gast)


Lesenswert?

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.

von Esther F. (esther_f)


Lesenswert?

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?

von Esther F. (esther_f)


Lesenswert?

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?

von Timmo H. (masterfx)


Lesenswert?

Ja das ist in Ordnung. Den State solltest du auch nur ändern wenn der 
Bus Idle ist.

von Esther F. (esther_f)


Lesenswert?

Danke!

von Jojo S. (Gast)


Lesenswert?

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.

von Stefan (Gast)


Lesenswert?

Ich bringe mal diesen I2C Bus Treiber ins Spiel, der könnte da helfen:

http://www.nxp.com/documents/data_sheet/P82B715.pdf

Stefan

von Michael L. (michaelx)


Lesenswert?

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
von Esther F. (esther_f)


Lesenswert?

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
Noch kein Account? Hier anmelden.