Mehrere Sensoren an einen I2C-Bus

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen,

    ich möchte zwei Sensoren mit unterschiedlicher Spannungsversorgung, nämlich einmal ein Display mit 3,3V und einmal einen Time-of-Flight Sensor mit 5V an einem I2C-Bus verschalten. Jetzt habe ich aber im Internet gelesen, dass ich damit den RP zerstören würde (wär leider nicht das erste mal), deswegen meine Frage: ist die einzige Lösung dafür, den I2C-Converter zu benutzen oder kann ich mir auch eigene Pullup-Widerstände dazwischen basteln?

  • Moinsen,

    Dazu nimmt man Levelshifter ! Und keine Widerstände, denn der I²C Bus ist eine Bidirektionale Verbindung.
    Denn auch bei den Displays, wo wiederum keiner weiß welches du verwenden möchtest, gibt es Ausnahmen. Klar gibt es Displays die mit 3,3 Voltz am I²C Klarkommen aber dann mit einer Versorgungsspannung Vc von 5 Volt betrieben werden. Wenn in dem Display selber kein Pegelkonverter verbaut ist, würden die Vc 5 Volt des Displays via I²C dann auf die PI GPIOs prallen und dort ihr Zerstörungswerk verrichten.

    Am besten geeignet sind Levelshifter mit MOSFET die sind bezüglich des Spannungsbereiches auf der HIGH- Volt Seite toleranter als CHIP Lösungen, die meist nur für einen festen Pegelunterschied aufgebaut sind.

    Franky

  • Das bedeutet, wenn ich nur Sensoren mit der gleichen Spannungsversorgung hätte, könnte ich die alle sorglos kombinieren?

  • Moinsen,

    Wenn du 100% weißt das aus dem SDA des Displays nur 3,3 Volt rauskommen kannst du es direkt anklemmen. Da aber i²C parallel geschaltet wird, kannst du auch mehrere Sensoren oder I²C Bus Slaves mit unterschiedlichsten Spannungen für jede Spannung jeweils ein Levelshifter auf 3,3 Volt dann wieder Zusammenschalten.
    Damit kommen an einen Levelshifter auf der High Seite dann all diese Geräte / Slaves dran, für die der Levelshifter ausgelegt ist. Oder vereinfacht ausgedrückt, pro Abweicehnde Spannung wird nur ein Levelshifter benötigt, denn an der Parallelschaltung ändert sich nichts.
    Dann werden halt alle Eingänge der Levelshifter LOW 3,3 Volt wie auch die 3,3 Volt Slaves direkt am PI parallel zusmamengeschaltet.

    Franky

  • Okay, ich glaube, das habe ich verstanden. Vielen Dank! Und das ist das einzige, was ich beachten muss, also keine zusätzlichen Pullup-Widerstände, richtig?

  • Moinsen,

    Pullups auf der PI Seite werden normal nicht benötigt die sind HW-Seitig schon vorhanden.
    Jedoch auf der SLAVE Seite ( HIGH Volt Seite) kann es notwendig werden, je nachdem wie viele Slaves dranhängen, und mit welcher Busgeschwindigkeit du arbeiten willst. Dann kann man , ja nun wieder die Frage welche Art von Levelshifter du verwenden willst es notwendig werden, dort eine Anpassung vorzunehmen.
    Wenn du dein Gesamtvorhaben, mal mit allen Komponenten und Spannungen skizzieren würdest könnte man dir hier ein gezielte Antwort geben. Aber so ist das alles Nebel im Wald.

    Franky

  • Am Ende soll eine noch nicht bestimmte, größere Anzahl (etwa 5-10, vielleicht mehr) der ToF-Sensoren an dem I2C-Bus hängen. Mit dem Display wollte ich nur schonmal testen, wie das mit mehreren Slaves funktioniert, bis die restlichen Sensoren ankommen, aber wenn das komplizierter ist muss das nicht unbedingt sein. Das ist der aktuelle Aufbau, der Sensor ist aber ein VL6180X-Sensor. Das dürfte aber keinen Unterschied machen.

  • Moinsen

    das Knallt früher oder später, denn der Sensor hängt an 5 V!
    Wenn ich das richtig sehe der eine Pin ist doch für 2,8 Volt ? Oder ?

    Level Shifter Example Circuit

    Egal was jetzt oder wo jetzt der Sensor hängt zum PI müssen sowohl die 3,3 Volt wie auch die 5 Volt gehen. Hier jetzt nur mit einem Draht GRÜN gezeichnet aber das Prinzip kannst du 1 zu 1 auf die beiden I²C Busleitungen übertragen ;)

    Hier ist es am I²c Bus mit einem Display besser dargestellt.

    Franky

  • Moinsen

    das Knallt früher oder später, denn der Sensor hängt an 5 V!
    Wenn ich das richtig sehe der eine Pin ist doch für 2,8 Volt ? Oder ?

    Es tut mir wirklich sehr Leid, dass ich nur mein Halbwissen zu bieten habe :blush: ich hab mir bis jetzt alles aus Internet-Anleitungen zusammen gebastelt. Die Platine des Sensors wird zwar mit 5V versorgt, aber der Sensor an sich nur mit maximal 3 V, wenn ich das aus dem Datenblatt richtig interpretiert habe. Deswegen ist da noch der 2,8V-Anschluss, hab aber noch nie gesehen, dass der verwendet wurde.

    Meines Wissens ist auf der Platine ein Spannungswandler, um eben diese 5V zu regeln.

  • Moinsen,

    Wenn dann poste hier mal bitte den Link zu deinem Sensor den du verwendest. Leider gibt es bei meiner sehr kurzen Internetsiuche einige Modelle die unter dieser Bezeichnung verhöckert werden, und alle haben auch eine voneinander abweichende Anleitung.
    Wir kommen so nicht an Ziel wenn ich nicht weiss was Fase ist, Anleitung deines aber wirklich deines Verwendeten Sensors, und dann auch noch das Display dazu.

    Franky

  • Moinsen,

    Wenn du das Display auch wirklich mit 3,3 Volt betreibst kannst du dieses direkt an den I²C Bus des PI hängen. Sollte die Helligkeit nicht ausreichen, und du deswegen mit der Betriebsspannung auf 5 Volt gehen solltest, musst du eine Levelshifter auch dafür vorsehen.
    Und dein Adafruit Sensor hat einen Spannnungswandler, aber auch einen Levelshifter, der die Spannung wieder genau auf die Vc = Vin Versorgungspannung anpasst. Jetzt kannst du probieren, ob der Sensor auch schon mit 3,3 Volt arbeitet , aber dazu müsste man herausbekommen welchen Arbeitsbereich dieser LDO ( Spannungsregler ) hat. Theoretisch müsste dieser MIC52525-2,8 auch schon mit 3,3 Volt arbeiten können, und du kannst dir den Levelshifter ersparen.

    Wenn nicht dann muss du dir einen Besorgen.
    Aber Adafruit sagt selber das er mit 3,3 V funktionieren müsste.

    Aber dann möchte ich dich noch auf diesen Abschnitt aufmerksam machen !



    Das heist nichts anderes jeder Sensor hat die selbe feste Adresse !
    Damit brauchst du für mehrere dieser Sensoren eine Multiplexer, und dann ist es dann auch schon geklärt, dass du du nicht über 8 dieser Sensoren an einem I²C Host-Master rauskommen wirst. Denn die üblichen Multiplexer können nur auf max 8 Channel erweitern.
    Ein Virtueller Software I²C via /boot/config.txt wird dir auch nicht weiter helfen, da der Adafruitcode laut Github nicht wirklich geeignet ist das du mehrere I²C Bus Host parallel absprechen kannst.


    Franky

Jetzt mitmachen!

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