Forum: Mikrocontroller und Digitale Elektronik Meine Erfahrungen zum I2C Level Shifting per TCA 9509 und weitere Fragen


von Hendrik L. (lbd)


Lesenswert?

Hallo zusammen,

ich verbaue am TWI Bus TCA 9509 Level Shifter zwischen RPi (3,3 Volt - 
I2C Master)  und ATtiny2313  und LM92 (beide Typen als 5 Volt I2C Slave) 
.

Ich takte den Bus am RPi (Master)  mit ca. 20 kHz. Ich nutze CAT6 Kabel 
mit Ethernet Steckern und Buchsen.

Die TCA 9509 (momentan zwei parallel) sind ca. 50 cm vom RPi an den 3,3 
Volt TWI-Bus des RPis per CAT6 angebunden.

Die Anordnung arbeitet prinzipiell zuverlässig. Es stellen sich mir 
dennoch mehrere Herausforderungen.

1. Ich möchte eine Vielzahl von Slaves am Bus betreiben
2. Ich möchte auch längere Distanzen (10 - 20 Meter) mit dem Bus 
versorgen

Momentan schaffe ich folgendes:

Der RPi steuert einerseits 4 LM92 an, wobei diese 4 Sensoren sternförmig 
im Abstand von 5 Metern über CAT6 an den Level Shifter TCA 9509 
angebunden sind.

Ein zweiter TCA 9509 (parallel zum ersten TCA 9509) bindet (derzeit) 2 
ATTiny2313 an. Distanz 30 cm. Ich gehe davon aus, dass ich auch hier die 
Entfernung auf 5 Meter steigern kann ... und mindestens 4 ATTinys als 
Slaves kapazitativ im erlaubten Bereich anbinden kann.

Da offensichtlich die TCA 9509 die Kapazitäten der Slaves wunderbar vom 
Zentralpunkt RPi entkoppeln, habe ich nun versucht, eine weitere 3. 
Einheit (TCA 9509 mit LM92) parallel an den RPi zu hängen.

Fehlanzeige, der Bus ist mausetot. Allein schon bei purer Ankoppelung 
des 3. TCA 9509 (ohne Slaves) wird keine Adresse mehr angezeigt. Auch 
eine "Lastsplittung" der 6 Slaves auf die 3 TCA 9509 hat keine Änderung 
bewirkt

Ich dachte erst, der 3. TCA 9509 sei tot- Fehlanzeige, er funktionierte 
im Gegentest (einzeln).

Das Datenblatt sagt zur Parallelschaltung von TCA 9509 nichts aus (habe 
ich etwas überlesen?). Sicherlich ist es kein TWI typisches kapazitives 
Problem, eher ein Innenwiderstand - oder Impedanz Problem ... zwischen 
RPi und TCA 9509 !


Bei größeren Entfernungen als 5 Metern hatte ich nun vor, per TCA 9509 
immer nur einen Slave anzuschliessen.

Der TCA 9509 an sich tut, was er soll. Er ist halt ein Level-Shifter ... 
(und wahrscheinlich kein Repeater ...). Die Begrenzung liegt erst einmal 
bei 2 TCA 9509 am RPi ...!

--------------

Oben geschilderte Anorndung ist erst einmal funktionstüchtig. Zweck ist 
erfüllt, arbeitet mit zwei TCA 9509 seit Monaten ohne eine einzige 
Fehlfunktion.

Aber ich möchte für eine weitere Anwendung nun mehr, der TCA 9509 (mit 
Stückzahl 1) wird dabei offensichtlich nur als Level Shifter helfen:

Nun gibt es eine fast unüberschaubare Anzahl von Repeatern. Ich suche 
nun einen "Repeater" Baustein, in folgender Konstellation:

RPi <-> TWI Level Shifter (z.B. TCA 9509) <-> eine Anzahl n paralleler 
TWI "Repeater", die wiederum ein oder mehrere Slaves über längere 
Distanzen anbinden.

Hat da jemand eigene Erfahrungen mit einem passenden "Repeater" ?

Danke im Voraus

Gruesse

von Stefan F. (Gast)


Lesenswert?

>  Ich möchte auch längere Distanzen (10 - 20 Meter) mit dem
> Bus versorgen

I2C ist nicht für solche Leitungslängen gedacht. Alles, was über 50cm 
hinaus geht provoziert Probleme. Punkt

Du brauchst einen Bus, der die Physikalischen Grundlagen der 
Signalausbreitung berücksichtigt. Eine günstige Variante ist RS485.

von Michael X. (Firma: vyuxc) (der-michl)


Lesenswert?

I2C hat eine maximale Risetime spezifiziert. Die wirst du mit deinem 
Aufbau überschreiten.

von Hendrik L. (lbd)


Lesenswert?

Stefan U. schrieb:
>>  Ich möchte auch längere Distanzen (10 - 20 Meter) mit dem
>> Bus versorgen
>
> I2C ist nicht für solche Leitungslängen gedacht. Alles, was über 50cm
> hinaus geht provoziert Probleme. Punkt
>
> Du brauchst einen Bus, der die Physikalischen Grundlagen der
> Signalausbreitung berücksichtigt. Eine günstige Variante ist RS485.

Das Problem ist schon klar! Ich bin recht TWI-erfahren, seit Jahren.

Ich weiß aber, dass Kollegen lange Entfernungen sehr wohl mit niedrig 
getaktetem I2C-Bus funktionssicher bertreiben.

Vorteil: Ich kann meine gesamten Software-Libraries ohne Änderung 
übernehmen!

Ansonsten würde ich umsteigen ...!

Gruesse

von Hendrik L. (lbd)


Lesenswert?

Michael X. schrieb:
> I2C hat eine maximale Risetime spezifiziert. Die wirst du mit deinem
> Aufbau überschreiten.

Das glaube ich nicht!!! Die Flanken sind fast senkrecht im Oszilloskop 
(werde ich aber noch einmal verifizieren).

Das Oszilloskop zeigt ganz klar - nach Parallelschaltung des dritten TCA 
9509 ist nur noch Gleichstromlevel sichtbar ! daher dachte ich ja, der 
3. TCA seit "tot".

Gruesse

von Wolfgang (Gast)


Lesenswert?

Stefan U. schrieb:
> I2C ist nicht für solche Leitungslängen gedacht. Alles, was über 50cm
> hinaus geht provoziert Probleme. Punkt

Zumindest der Erfinder des I2C ist da eindeutig anderer Meinung:
NXP/Philips AN10658 Sending I2C-bus signals via long communications 
cables
https://www.nxp.com/docs/en/application-note/AN10658.pdf

Datenblatt PCA9600 (Tab.7 p.14):
http://www.nxp.com/documents/data_sheet/PCA9600.pdf

von Hendrik L. (lbd)


Lesenswert?

Also, um es die Frage noch einmal eindeutig zu spezifizieren:

Die Leitungslänge ist nicht das Problem. Dafür gibt es ja Repeater, die 
lange Entfernungen spezifizieren.

Die Frage lautet: Welche Repeater kann ich parallel schalten, um eine 
Stern-Topologie zu unterstützen?


Gruesse

von Wolfgang (Gast)


Lesenswert?

Hendrik L. schrieb:
> Das Oszilloskop zeigt ganz klar - nach Parallelschaltung des dritten TCA
> 9509 ist nur noch Gleichstromlevel sichtbar !

Dann hänge mal versuchsweise von jeder Leitung Widerstände (einige 100Ω) 
vor die SDA und SCL-Knoten, damit du über den Spannungsabfall 
feststellen kannst, wer den Pegel kaputt macht.

von Hendrik L. (lbd)


Lesenswert?

Wolfgang schrieb:
> Stefan U. schrieb:
>> I2C ist nicht für solche Leitungslängen gedacht. Alles, was über 50cm
>> hinaus geht provoziert Probleme. Punkt
>
> Zumindest der Erfinder des I2C ist da eindeutig anderer Meinung:
> NXP/Philips AN10658 Sending I2C-bus signals via long communications
> cables
> https://www.nxp.com/docs/en/application-note/AN10658.pdf
>
> Datenblatt PCA9600 (Tab.7 p.14):
> http://www.nxp.com/documents/data_sheet/PCA9600.pdf

Hallo Wolfgang,

das war der richtige Tip (im PCA9600.pdf):

Fig 18. I2C-bus multipoint application

sagt:

"...no limit to the number of connected bus devices ..."

Danke- das hat mir sehr geholfen.

Gruesse

von Hendrik L. (lbd)


Lesenswert?

Wolfgang schrieb:
> Hendrik L. schrieb:
>> Das Oszilloskop zeigt ganz klar - nach Parallelschaltung des dritten TCA
>> 9509 ist nur noch Gleichstromlevel sichtbar !
>
> Dann hänge mal versuchsweise von jeder Leitung Widerstände (einige 100Ω)
> vor die SDA und SCL-Knoten, damit du über den Spannungsabfall
> feststellen kannst, wer den Pegel kaputt macht.

Danke für den Hinweis. Ja - werde ich machen.

Gruesse

von Frank K. (fchk)


Lesenswert?

Wenn Du viele I2C-Devices anschließen willst, nimm doch einen Switch:

https://www.nxp.com/docs/en/data-sheet/PCA9547.pdf

Da kannst Du dann I2C-Adressen auch mehrfach benutzen, indem Du die 
Devices auf die einzelnen Segmente verteilst. Levelshifter kann er auch 
noch spielen.

fchk

von Hendrik L. (lbd)


Lesenswert?

Frank K. schrieb:
> Wenn Du viele I2C-Devices anschließen willst, nimm doch einen Switch:
>
> https://www.nxp.com/docs/en/data-sheet/PCA9547.pdf
>
> Da kannst Du dann I2C-Adressen auch mehrfach benutzen, indem Du die
> Devices auf die einzelnen Segmente verteilst. Levelshifter kann er auch
> noch spielen.
>
> fchk

Toller Hinweis - vielen Dank!

Was es nicht alles gibt ....!

Gruesse

von Peter D. (peda)


Lesenswert?

Ich habe bisher nie gesehen, daß jemand mehr als einen Level-Shifter am 
selben I2C betreibt.
Man hat eine 5V- und eine 3,3V-Seite und dazwischen genau einen 
Level-Shifter.

von Hendrik L. (lbd)


Lesenswert?

Peter D. schrieb:
> Ich habe bisher nie gesehen, daß jemand mehr als einen Level-Shifter am
> selben I2C betreibt.
> Man hat eine 5V- und eine 3,3V-Seite und dazwischen genau einen
> Level-Shifter.

Hab zwischenzeitlich etliche Tests gemacht:

Man kann mehrere Level-Shifter parallel an einen 3,3 Volt I2C Buse 
betreiben.

Dadurch lässt sich also eine sternförmige Topologie mit längeren 
Entfernungen pro Arm (einige Meter) aufbauen.

Gruesse

von (prx) A. K. (prx)


Lesenswert?

Der Raspberry kann kein Clock Stretching, weshalb Mikrocontroller als 
Slaves nur bei geringem I2C-Takt und sorgfältig auf kurze Latenz 
optimierter Programmierung einsetzbar sind.

von Hendrik L. (lbd)


Lesenswert?

A. K. schrieb:
> Der Raspberry kann kein Clock Stretching, weshalb Mikrocontroller als
> Slaves nur bei geringem I2C-Takt und sorgfältig auf kurze Latenz
> optimierter Programmierung einsetzbar sind.

Daher betreibe ich den I2C Bus des Raspberries über BitBanging.

Gruesse

von Veit D. (devil-elec)


Lesenswert?

Hallo,

dein Problem ist du hast eine Stern Topologie aufgebaut. Du musst jedoch 
einen Bus aufbauen. Den Unterschied musst du dir klar machen. Terminiert 
wird nur am Anfang und Ende des Busses.

: Bearbeitet durch User
von Hendrik L. (lbd)


Lesenswert?

Veit D. schrieb:
> Hallo,
>
> dein Problem ist du hast eine Stern Topologie aufgebaut. Du musst jedoch
> einen Bus aufbauen. Den Unterschied musst du dir klar machen. Terminiert
> wird nur am Anfang und Ende des Busses.

Ich terminiere am Ende eines Arms ...! Jeder Arm wird durch einen Level 
Shifter mit dem Master verbunden (Ja es ist eine Sterntopologie) - Es 
funktioniert so!

Gruesse

von Nagelstudio Kasuppke (Gast)


Lesenswert?

> Ich terminiere am Ende eines Arms ...!

Ich auch. Mittels aufgeklebter Fingernägel.

von Hendrik L. (lbd)


Lesenswert?

Nagelstudio Kasuppke schrieb:
>> Ich terminiere am Ende eines Arms ...!
>
> Ich auch. Mittels aufgeklebter Fingernägel.

Sehr schön!

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.