I2C Multiplexer Allgemeine Frage

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo zusammen,
    ich habe eine allgemein Frage zum TCA9548A I2C Mutiplexer.
    Hier ist der Link zum Mutiplexer
    Vielleicht hat ja schon jemand Erfahrungen in dem Bereich.


    Mit dem Mutiplexer kann man mehrere I2C Geräte mit der gleichen Adresse ansteuern.

    Mir ist aber nicht ganz klar wie das funktioniert.

    Wird mit dem Mutiplexer die Adresse geändert?

    Oder

    Schaltet der Mutiplexer wie eine Weiche nur um?


    Grüße Berrie

  • Servus Berrie,
    wenn ich das richtig verstehe, dann schaltet der, wie eine 8-fach Weiche, um.
    Der Chip selbst liegt auf 0x70. An die Pins SC0/SD0 bis SD7/SC7 schliesst Du SCL/SDA des Bausteins an, den Du mehrfach verwenden willst, dessen Adresse aber fest ist.
    SCL/SDA kommt an den I2C-Bus.
    Schickst Du dem Multiplexer (auf z.B. 0x70) jetzt eine 1, dann werden SCL/SDA des Multiplexers quasi intern mit SC1/SD1 verbunden. Bei einer 2 analog dann eben SC2/SD2 ...
    So kannst Du also umschalten.

    Aber Achtung!
    Falls Du den am Raspi einsetzen willst: der Multiplexer hat "onboard" Pullups ... die auftrennen.
    Dann, auch ganz wichtig: Levelshifter für SCL/SDA verwenden!

    cu,
    -ds-

  • Auf der von dir verlinkten Seite ist folgendes zu lesen:

    Zitat


    Using it is fairly straight-forward: the multiplexer itself is on I2C address 0x70 (but can be adjusted from 0x70 to 0x77) and you simply write a single byte with the desired multiplexed output number to that port, and bam - any future I2C packets will get sent to that port. In theory, you could have 8 of these multiplexers on each of 0x70-0x77 addresses in order to control 64 of the same-I2C-addressed-part.

    Also würde ich mal davon ausgehen, dass der Mutliplexer wie eine "Weiche" bzw. wie ein Multischalter arbeitet.

  • Ok Berrie, prima ...
    aber sicherheitshalber bitte erst hier melden und Dein geplantes Anschlusschema posten (warum? -> click <-) wenn Du so weit bist ...

    //EDIT: ach ja ... bitte setze Deinen Beitrag noch auf "erledigt" (rechts oben irgendwo) ...

    cu,
    -ds-

  • Hallo zusammen,
    ich wollte mal eine kleines Feedback geben.
    Es hat alles gut geklappt. Zum testen habe ich vier Sensoren angeschlossen.
    Ich lese die Sensorwerte nacheinander aus. (mit C++)
    Um acht Geräte zu simulieren jeweils 2 mal. Also Sensor 1 2 3 4 1 2 3 4.
    Ich habe dann die Zeit gemessen. Das Ergebnis war ok aber nicht gut.
    Die I2C Geschwindigkeit habe ich dann 400000 hoch gesetzt.
    Das Ergebnis ist super.

    Ich würde aber gerne die Anzahl der Sensoren weiter erhöhen.
    Es besteht auch die Möglichkeit zwei Multiplexer hintereinander zu schalten.
    Doch das würde wieder auf Kosten der Geschwindigkeit gehen.
    Ein zweiter I2C Anschluss wäre wohl besser.
    Aber den scheint es wohl nicht zugeben.
    Oder kann ich nicht genutzt Pins dazu nutzen?

    Grüße Berrie

  • Servus Berrie,
    danke für's feedback.


    ... Oder kann ich nicht genutzt Pins dazu nutzen?

    Das kannst Du per bitbanging probieren ...
    Das funktioniert aber nur solange Du keine Bibliothek verwendest, die eine Gerätedatei (/dev/i2c-?) erwartet.
    Auch von der Geschwindikeit würde ich da jetzt nicht zuviel erwarten.

    Wenn Du mehrere betreiben kannst oder die Multiplexer kaskadieren kannst, ist das vermutlich der beste Weg.

    cu,
    -ds-

  • Hallo Dreamshader.
    Also ich nutze die Gerätedatei (/dev/i2c-?).
    Man kann wohl bis zu 8 Multiplexer hintereinander schalten.
    Die Geschwindigkeit wird dann aber wohl eher bescheiden sein.

    Ich könnte auch SPI zu nutzen.
    Da der Raspberry nur nur 2 SPI Anschlüsse hat, habe ich mich damit noch nicht beschäftigt.
    SPI soll ja schneller sein als I2C. Dann werde ich mal nach einem SPI Multiplexer suchen.

    Oder kann ich für SPI nicht genutzt Pins einfacher nutzen?

    Grüße Berrie

    Einmal editiert, zuletzt von berrie (15. Januar 2017 um 13:17)

  • Hi Berrie,

    also ich glaube nicht, dass Du einen spürbaren Geschwindigkeitsvorteil bei Verwendung eines zweiten I2C Bus hast (siehe auch weiter unten).
    Ich hab gerade mal einen anderen Thread gesucht ... und zwar -> den hier <- ...
    Da geht es um die Verwendung der I/Os des zweiten I2C-Bus, der für EEPROMs auf z.B. hat-Modulen reserviert ist.

    <Vermutungs-Modus ein>
    Bis jetzt scheint das noch nicht komplett unterstützt zu werden.
    <Vermutungs-Modus aus>

    Du könntest also versuchen diesen Bus zu nutzen. Ob es dazu irgendwelche Tricks oder Hindernisse gibt, die es zu beachten gilt, das müsste ich allerdings auch erst mal recherchieren.
    Du musst Dir halt in diesem Fall klar über die Konsequenzen sein ... also z.B., dass Du ab irgendwann keine Updates mehr machen darfst. Letzteres ist aber imho eh bei einem aufgesetzten und lauffähigen System nicht nötig (bis auf Sicherheits-patches ... aber die sind ja auch nur in bestimmten Fällen relevant).

    SPI ginge auch ... aber da hast Du halt auch die Einschränkung, dass der RPi nur zwei CS Leitungen und damit auch nur zwei zugehörige Gerätedateien unterstützt.
    Auch hier gilt: SPI per bitbanging geht immer ... wobei ich auch hier mal davon ausgehen würde, dass die Geschwindigkeit darunter leidet.
    Bitbanging läuft halt komplett im Userland und unterliegt daher dem Scheduling des OS.

    Ob ein Wechseln von I2C nach SI wiederum spürbar schneller ist, wage ich auch mal zu bezweifeln.
    Dag hatte mal ein paar Messungen gemacht ... demnach werden wohl die Latenzzeiten den evtl. Zeitvorteil locker wegfressen ;)

    //EDIT:
    Wenn es mit dem Auslesen so genau geht, würde ich mal das -> RTOS-Image von EMLID <- ausprobieren. Dadurch reduzierst Du die Latenzzeiten schon mal.


    cu,
    -ds-

  • Hallo,

    der Multiplexer macht nur Sinn, wenn Du mehr i2c - IS einsetzen must, als Dein System zulässt. Die meisten i2c Schaltkreise haben 3 Adressanschlüsse. Damit kanst Du dann über 8 verschiedene Adressen auch 8 IS an dem i2C - Bus betreiben. Die Geschwindigkeit über den Multiplexer ist sogar noch etwas langsamer als bei direktem Anscluß. Anstatt direkt die IS anzusprechen, mußt Du ja jedes mal erst den Multiplexer umschalten. Und egal ob das Signal direkt oder über den Multiplexer geht, an der Zeit, die benötigt wird, um die Protokolle an die IS zu senden ändert sich nichts. Und die nächste IS kann erst angesprochen werden, wenn die erste fertig ist.

    Also, wenn Du mehr IS benötigst, als direkt möglich, kommst Du nicht darum - sonst lass es sein, das bringt nur neue Fehlerquellen.

  • Hallo Dreamshader.
    vielen Dank für deine Antwort.
    Den Beitrag hatte ich schon gefunden.
    Ich hatte es so verstanden, dass ich den zweiten (EEPROMs) nicht nutzen kann.

    Ich habe gelesen das SPI schneller ist als I2C.
    Aber nicht im Zusammenhang mit dem Raspberry.

    Meine Überlegung ist beides zu nutzen I2C und SPI.
    Wenn ich die beiden SPI Anschlüsse genauso Multiplexen könnte wie bei I2C wäre alles klasse.
    Ich habe aber noch keinen vergleichbaren SPI Multiplexer gefunden.

    Oder ich schließe ein Arduino an. Dann muss ich nur noch die Daten zum Raspberry übertragen.
    Oder vielleicht gibt es eine Möglichkeit über USB einen weiteren I2C Anschluß zu bekommen.

    Fragen Fragen Fragen.
    Hat man eine gelöst, tauchen direkt 10 Neue auf.

    Grüße Berrie

  • Tja Berrie,
    die Frage ist, wo die Reise hingeht ...
    Sicher ist es eine Möglichkeit einen Arduino über I2C oder seriell zu nutzen. Da hast Du zumindest die Einschränkung der CS-Leitungen bei SPI nur in dem Fall, in dem eine Lib verwendet wird, die einen bestimmten Pin als CS erwartet. Das dürfte aber in den seltensten Fällen so sein.

    Wie gesagt: was willst Du erreichen?
    Wenn Du uns das mal verrätst, dann finden wir sicher auch eine machbare und zufriedenstellende Lösung ;)

    Bis dann,
    -ds-

  • Hallo zusammen.
    Ich habe gerade mal folgendes getestet .
    Ich lese 15 mal die Werte eines Sensors über den Multiplexer aus.
    Zwischen jedem auslesen wechsle ich den Sensor.
    Das soll simulieren, dass an einem von 8 Multiplexer Ausgängen eine weitere Multiplexer angeschlossen ist.
    Ergebnis: Die Geschwindigkeit wäre so ok. Schneller wäre schöner. (Luxus)
    Ob das in der Realität dann auch so ist, werde ich wohl erst erfahren ich alle Sensoren habe.
    Bis jetzt habe ich nur 4 Sensoren und einen Mulitplexer.

    Dann werde ich wohl mal bestellen.
    Genug studiert, jetzt wird ausprobiert. ;)

    @Wenn Du uns das mal verrätst, dann finden wir sicher auch eine machbare und zufriedenstellende Lösung

    Du bist aber neugierig. ;)

    Vielen Dank für die Antworten.
    Ich melde mich, wenn ich es ausprobiert habe.

    Berrie

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!