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
> 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.
I2C hat eine maximale Risetime spezifiziert. Die wirst du mit deinem Aufbau überschreiten.
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
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
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
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
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.
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
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
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
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
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.
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
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.
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
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
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
> Ich terminiere am Ende eines Arms ...!
Ich auch. Mittels aufgeklebter Fingernägel.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.