MUX TCA9548A 5x GY 521 + 3 BME280 + 1xTFT LCD

  • Guten Abend,


    ich sitze mal wieder an einem neuen Projekt und hoffe auf Hilfe.


    Folgende Situation:

    Ich schreibe eine Masterarbeit in der Automotive Branche.

    Dafür spielt ein Sensornetzwerk eigentlich keine Rolle, ist aber ein netter Beipack für das Ganze.

    Ich habe eine Koordinatenmessmaschine und direkt hinter der Wand steht eine Presse, die ordentlich Krawall macht.

    Nun möchte ich die Einflüsse dieser Presse sowie die meteorologischen Daten in dem Messlabor aufzeichnen.


    Ich habe folgendes Equipement:

    5x GY521

    3x BME280

    1x TFT LCD

    1x TCA9548A MUX

    RPI 3B+

    Rasbian


    Die ganze Verarbeitung der Daten ist erstmal unwichtig, da ich das schon öfter gemacht habe. Mir geht es um das Verständnis des I2C Busses.


    Ich habe folgenden Codeschnippsel:

    def channel habe ich erstmal nur mit eingebracht, aber nicht weiter genutzt.


    Es werden alle Sensoren mit i2cdetect angezeigt.

    So wie der Code läuft, erhalte ich die Beschleunigung zuverlässig von einem der Acc Sensoren.


    Nun stellt sich mir die Frage, wie ich auf die anderen Kanäle umschalten kann.

    Ich hätte gedacht und gehofft, ich könne mit bus = smbus.SMBus(*) einfach die Sensoren durchschalten und die entsprechende HEX Zahl des Sensors eine Zeile darunter eintragen.

    Leider ist dem nicht so.


    Jetzt mein Gedankengang:

    Ich muss die Channel definieren? Wie? Wie kann ich zwischen den einzelnen Channels switchen? Geht das über die A0 A1 A2 Pins? Ich hatte dementsprechend etwas gelesen, dass wenn ich bspw.

    A0 auf Low setze, die anderen beiden auf High (0, 1, 1), dann wird der erste Channel ausgewählt, 0, 1, 0 bspw der zweite?

    Ist es also nötig diese Pins zu nutzen?


    Ich habe den MUX in der config.txt als dtoverlay=i2c-mux,pca9548 hinzugefügt und erhalte somit direkt alle Slaves.

    Ich habe schon durch die SuFu gestöbert und leider noch nichts entsprechendes gefunden oder es schlichtweg übersehen.


    Ich bedanke mich und wünsche angenehme Tage und gesunde Wochen,


    LG

  • Grundsaetzlich ist das schon so, dass man mit verschiedenen Bus-IDs arbeitet. Aber nicht so wie du. Wenn du mehrere Busse in Betrieb hast, dann brauchst du eine Instanz pro ID. Also zb


    busses = [smbus.Bus(i) for i in range(1, 5)]


    fuer die ersten 4 Busse. Und dann kannst du deine Funktionen so schreiben, dass sie den konkreten Bus als Argument mit uebergeben bekommen.

    Edited once, last by MistyFlower59469 ().

  • Moin ossihmz


    ich vermute, das du dir noch nie das Datenblatt des Bausteins angesehen hast!


    Dort steht: I2C-Adresse, Portadresse...


    Aber lies seblber.


    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

  • ich vermute, das du dir noch nie das Datenblatt des Bausteins angesehen hast!


    Dort steht: I2C-Adresse, Portadresse...

    Das steht zwar im Datenblatt, ist aber im Kontext irrelevant, weil durch den entsprechenden Treiber, den er auch aktiviert hat, die logischen Busse im System direkt ansprechbar sind.


    https://github.com/joan2937/pigpio/issues/109

  • Moin!


    Die Frage ist, welche Bausteine hat er am CA9548A MUX angeschlossen. Und nur davon rede ich.


    Warum zitierst du nun pigpio? Er nutzt doch smbus.


    aber egal! Mach einfach weiter.


    Bin raus.


    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

  • Weil in dem Artikel der zugrundeliegende Mechanismus erklärt wurde. Und seine Frage war nicht wie er die Bausteine anspricht. Das geht. Sondern die verschiedenen Busse.


    Und diese komische Kombination aus nicht so richtig lesen, aber dann gleich eingeschnappt sein, wenn man darauf hingewiesen wird, das muss ich nicht verstehen, oder?

  • @ossimhz noch ein Nachtrag: die Leitungen a0-a2 sind addressleitungen mit denen man bis zu 8 dieser MUX Bausteine verwenden kann. Die werden entsprechend fest eingestellt, nicht dynamisch, und haben daher auch mit deinem Problem nichts zu tun.