Multiplexer Adafruit TCA9548A findet keine I2C Geräte

Hallo,

Ich nutze den Adafruit Tca9548a mit dem Arduino Uno. Die Schaltung ist recht simple, GND to GND, VCC zu VCC, SCL/SDA an SCL/SDA des Multiplexers. Ich nutze den Temperatursensor BME680 von Joy-it an SD1 und SC1 (natürlich auch spannungsversorgt)

Habe das ganze mit mehreren I2C Scannern probiert, er findet keine Geräte. Auch mit dem SHT35 versucht. Erfolglos.

Direkt am SDA/SCL des Arduino funktionieren beide Geräte. Ich nutze (wie im Tutorial vorgegeben) keine Pullups. Irgendwelche Ideen?

Einzige Idee wäre, dass er defekt ist (heute erst angekommen). Wie überprüft man das am besten?

Wie sieht Dein Sketch aus? Deiner, nicht einer im Netz und bitte in Codetags (</>).

Gruß Tommy

DerPeter:
Ich nutze (wie im Tutorial vorgegeben) keine Pullups.

Und wo steht das? Ich lese da eher das Gegenteil:

SDx and SCx: There are 8 sets of SDx and SCx pins, from SD0/SC0 to SD7/SC7. These are the multiplexed pins. Each one is a completely seperate I2C bus set. So you have have 8 I2C devices with identical addresses, as long as they are on one I2C bus each.
These pins do not have any pullups installed, so if you are using a chip or breakout without i2c pullups be sure to add them! Nicely, you can have Vin be 3.3V and have these pins pulled up to 5V (that is, they are 5V compliant)

Hallo ihr beiden.

Erst einmal danke für die Antworten!

Zu Tommy56:
Einen eigenen Sketch habe ich bisher noch nicht. Wenn keine Geräte gefunden werden, wäre es ja unlogisch an einem Programm rumzupoolen, welche genau diese vorraussetzt. Zumindest mein Gedankengang

Zu MicroBahner:
Ich habe mich auf das Bild bezogen. Ebenso konnte ich nirgendwo herausfinden ob der BME680 von Joyit schon Pullups hat. Immerhin funktioniert dieser am Arduino auch direkt.

Muss ich die Pullups nur am Datapfand anbringen oder auch an der Clock (fände ich etwas komisch)?

Welche sollte ich hier anschließen? Habe mal mit 5k probiert und es wurde auch kein Gerät gefunden

DerPeter:
Einen eigenen Sketch habe ich bisher noch nicht.

DerPeter:
Habe das ganze mit mehreren I2C Scannern probiert,

Und welche Scanner sind das? Wenn Du den Tca9548a nicht vorher richtig einstellst, stellt der keine Verbindung zu den einzelnen I2C Strängen her. Defaultmäßig sind die alle abgeschaltet.

DerPeter:
Zu Tommy56:
Einen eigenen Sketch habe ich bisher noch nicht. Wenn keine Geräte gefunden werden, wäre es ja unlogisch an einem Programm rumzupoolen, welche genau diese vorraussetzt. Zumindest mein Gedankengang

Und wer sagt dann dem Multiplexer auf welchen Ausgang er durchschalten soll?

Da könnten evtl. wir schon Deinen Fehler haben.

Gruß Tommy

Tommy56:
Und wer sagt dann dem Multiplexer auf welchen Ausgang er durchschalten soll?

Ich würde hoffen, dass das der Fehler wäre. Jedoch so wie ich sehe ist das Durchschalten im Scanner vorhanden.
Gruß zurück!

MicroBahner:
Und welche Scanner sind das?

Unter anderem den aus dem Tutorial

    /**
     * TCA9548 I2CScanner.pde -- I2C bus scanner for Arduino
     *
     * Based on code c. 2009, Tod E. Kurt, http://todbot.com/blog/
     *
     */
     
    #include "Wire.h"
    extern "C" { 
    #include "utility/twi.h"  // from Wire library, so we can do bus scanning
    }
     
    #define TCAADDR 0x70
     
    void tcaselect(uint8_t i) {
      if (i > 7) return;
     
      Wire.beginTransmission(TCAADDR);
      Wire.write(1 << i);
      Wire.endTransmission();  
    }
     
     
    // standard Arduino setup()
    void setup()
    {
        while (!Serial);
        delay(1000);
     
        Wire.begin();
        
        Serial.begin(115200);
        Serial.println("\nTCAScanner ready!");
        
        for (uint8_t t=0; t<8; t++) {
          tcaselect(t);
          Serial.print("TCA Port #"); Serial.println(t);
     
          for (uint8_t addr = 0; addr<=127; addr++) {
            if (addr == TCAADDR) continue;
          
            uint8_t data;
            if (! twi_writeTo(addr, &data, 0, 1, 1)) {
               Serial.print("Found I2C 0x");  Serial.println(addr,HEX);
            }
          }
        }
        Serial.println("\ndone");
    }
     
    void loop() 
    {
    }

Ja, ist es. Das hattest Du uns aber nicht mitketeilt, dass Du diesen Scanner benutzt.
0x070 ist die reale Adresse des Multiplexers?

Hat der BME680 PullUps an SDA und SCL?

Gruß Tommy

Tommy56:
Das hattest Du uns aber nicht mitketeilt, dass Du diesen Scanner benutzt.

Entschuldigung, ich hatte gedacht mit Verlinken des Tutorials wäre es offensichtlich, dass ich ihn (auch) benutzt habe. Mein Fehler

Tommy56:
0x070 ist die reale Adresse des Multiplexers?

Laut der Website:

A0 A1 A2 - these are the address selection pins for the multiplexer. By default the multiplexer is at address 0x70 and these three pins are pulled low. Connect them to Vin to set the address to 0x71 - 0x77.

Da es der Orginal von Adafruit ist, heute erst gekommen und unverändert ist (und an AX unbeschaltet), gehe ich stark davon aus

Tommy56:
Hat der BME680 PullUps an SDA und SCL?

Ich weiß nicht ganz ob ich deine Frage richtig verstanden habe. Meintest du damit ob der BME680 (Joy it) von Haus aus PullUps eingebaut hat? Das habe ich ja (wie oben schon gesagt) nicht herausgefunden. Auch beim SHT35 (Seed Studios) nicht
Habe auch gerade schon probiert jeweils 5k Pullups anzulegen, leider wurde auch da nichts gefunden

Gruß zurück

Die PullUp auf dem Modul kann man (im spannungslosen Zustand) zwischen SCL/SDA und Vcc messen.

Gruß Tommy

Entschuldigung für die längere Antwortszeit. Hatte kein Messgerät zur Hand und habe mir mit dem Arduino schnell einen Spannungsteiler gebaut. Der Widerstand beim BME680 beträgt 5,2k Ohm, beim SHT35 188Ohm. Also wie schon vermutet (zumindest beim BME) kein Pullup nötig

Gruß zurück

DerPeter:
Entschuldigung für die längere Antwortszeit. Hatte kein Messgerät zur Hand und habe mir mit dem Arduino schnell einen Spannungsteiler gebaut. Der Widerstand beim BME680 beträgt 5,2k Ohm, beim SHT35 188Ohm. Also wie schon vermutet (zumindest beim BME) kein Pullup nötig

Gruß zurück

Bist du mit deinen 188 Ohm beim SHT35 sicher ?
Das wäre deutlich zu klein als Pullup bei I2C.

HotSystems:
Bist du mit deinen 188 Ohm beim SHT35 sicher ?
Das wäre deutlich zu klein als Pullup bei I2C.

Ups tatsächlich, hatte SDA auf dem High Anschluss. Andersrum (VCC auf High) bekomme ich 10k raus

Dann sollte das passen und die Pullups sind vorhanden.

Dann gehe ich mal stark davon aus, dass der I2C Multiplexer einfach defekt ist. Sehr ärgerlich!

Hast du mal die I2C-Module auch einzeln getestet ?
Das würde ich immer mal testen.

Hi

Da an den I²C-Slaves an BEIDEN PullUPS vorhanden sind - Diese funktionieren auch direkt am Arduino - aber am Multiplexer funktioniert GAR NICHTS mehr - es wird auch Nichts gefunden - möchte ich fast wetten, daß der Multiplexer keine PullUPs besitzt.

Zumindest den Muliplexer MUSST Du mit dem I²C-Scanner finden - wenn nicht, ist was faul im Staate Dänemark!

Irgendwie schadet Es nicht, wenn man sich zumindest ETWAS mit dem Kram beschäftigt, en man verbauen will - so z.B., wie I²C überhaupt funktioniert - dann hätte man sich ggf. selber schon Gedanken machen können, welche Werte man beim Messen so sehen will.

Nur, weil das Zeug vorhin noch in der Blister-Verpackung drin war, heißt Das ja nicht, daß Du nicht trotzdem das Ding so anschließen musst, wie's wohl auch im DaBla entnehmbar ist.

MfG

HotSystems:
Hast du mal die I2C-Module auch einzeln getestet ?
Das würde ich immer mal testen.

Wurde leider schon

DerPeter:
Direkt am SDA/SCL des Arduino funktionieren beide Geräte.

postmaster-ino:
Hi

Da an den I²C-Slaves an BEIDEN PullUPS vorhanden sind - Diese funktionieren auch direkt am Arduino - aber am Multiplexer funktioniert GAR NICHTS mehr - es wird auch Nichts gefunden - möchte ich fast wetten, daß der Multiplexer keine PullUPs besitzt.

Zumindest den Muliplexer MUSST Du mit dem I²C-Scanner finden - wenn nicht, ist was faul im Staate Dänemark!

Irgendwie schadet Es nicht, wenn man sich zumindest ETWAS mit dem Kram beschäftigt, en man verbauen will - so z.B., wie I²C überhaupt funktioniert - dann hätte man sich ggf. selber schon Gedanken machen können, welche Werte man beim Messen so sehen will.

Nur, weil das Zeug vorhin noch in der Blister-Verpackung drin war, heißt Das ja nicht, daß Du nicht trotzdem das Ding so anschließen musst, wie's wohl auch im DaBla entnehmbar ist.

MfG

Wahnsinns Post, viel geschrieben aber wenig dahinter. Und auch noch der böse Hinweis, dass man sich damit beschäftigen muss. Mir fällt nichts mehr dazu ein.

a) wie schon erwähnt besitzt der Multiplexer an den Ausgängen keine Pullups. Vielleicht hätte ETWAS lesen der davorigen Posts geholfen
b) der Scanner scannt nur angeschlossene Module. Auch hier hätte es ETWAS geholfen, sich das Ding durchzulesen bevor man was postet
c) Ich weiß wie I2C funktioniert und dass ich keine Werte habe war der Grund für das Posting hier
d) Hättest du dir ETWAS den Link angeschaut, hättest du gemerkt, dass es die Hersteller Website ist und das Tutorial 1zu1 die Verkablung aus dem Datenblatt ist

Trotzdem danke für deine Mühe, leider hilft das nicht weiter. Wie schon gesagt, denke ich es ist einfach ein defektes Produkt

Wenn Du das denkst, dann schicke es zurück.

Normale I2C-Scanner sollten den Multiplexer auf 0x70 aber finden. Das war es, was Dir der Postmaster mitteilen wollte.

Gruß Tommy

Hi Tommy,

Dann entschuldige ich mich natürlich, kam bei dem Rest nicht so durch.
Denk Link schaue ich mir natürlich zuerst an, bevor ich ihn zurück schicke

Grüße zurück

Als kleiner Nachtrag: Der Scanner funktioniert bei mir nicht - selbst wenn ich den Arduino ohne Verkablung betreibe. Er zeigt den Header an aber beim Ausführen hört er nach der Überschirftszeile (den Frequenzen) auf. Funktioniert das Ausführen bei euch?

Hab jetzt den genommen: Arduino Playground - I2cScanner
Er findet tatsächlich den Multiplexer nicht. Die Sensoren alleinig schon