Ansteuern mehrerer RGB-Sensoren über I2C-Mux PCA9548A

Hallo miteinander! o/

Ich habe bereits erfolgreich einen RGB Color Sensor TCS34725 von Adafruit (RGB Color Sensor with IR filter and White LED - TCS34725 : ID 1334 : $7.95 : Adafruit Industries, Unique & fun DIY electronics and kits) mit meinem Arduino Leonardo verbinden und brauchen können.

Mein nächster Schritt ist nun, mehrere davon an einen Multiplexer zu schliessen, da sich die Adresse bei diesem Adafruit-Sensor nicht selbst wählen lässt, sondern alle dieselbe Adresse haben.

Als Multiplexer (genauer Demultiplexer) möchte ich den IC PC9548A verwenden, der speziell für das Multiplexen von I2C-Signalen gemacht ist.

Ich habe mir den losen IC gekauft und dann wie in folgendem Schema auf einem Breadboard aufgebaut und mit zwei RGB-Sensoren verbunden, um zu testen ob es funktioniert:

Leider funktioniert das Ganze nicht. Ich habe das I2C-scanner script in folgendem Link laufen lassen und der Multiplexer wird nicht erkannt:

Hier kommt ihr ins Spiel. Ich brauche unbedingt eure Hilfe! :cry:
Mache ich etwas falsch oder habe ich etwas vergessen? Auch für Ideen oder Hinweise habe ich ein
offenes Ohr, da ich, was I2C betrifft, noch ein blutiger Anfänger bin.

Datenblätter:
TCS34725 https://cdn-shop.adafruit.com/datasheets/TCS34725.pdf
PCA9548A http://www.nxp.com/documents/data_sheet/PCA9548A.pdf

KAMINARIHOSHI:
Leider funktioniert das Ganze nicht. Ich habe das I2C-scanner script in folgendem Link laufen lassen und der Multiplexer wird nicht erkannt:

Arduino Wiring & Test | Adafruit TCA9548A 1-to-8 I2C Multiplexer Breakout | Adafruit Learning System

Ich sehe diese Seite wieder mal als Beispiel dafür, wie (un)gemein hilfreich bunte Bilder mit einem Drahtgestrüpp sind :-]

Kann es sein, daß Dein Breadboard elektrisch in der Luft hängt, weil man die Gnd-Leitung nur erahnen kann, wenn man weiß wo genau sie versteckt sein könnte?

Die Seite hat mir tatsächlich nicht so sehr geholfen, wie ich es mir erhofft hätte. Aber trotzdem besser als nichts - jetzt weiss ich dank des Scanner Codes zumindest, dass der Mux nicht kommuniziert;)

Das Breadboard sollte eigentlich nicht schweben (nein, Spass :smiley: ).
Ich bin mit dem DMM einzelne Punkte durchgegangen: Sowohl Sensor als auch Multiplexer werden mit 3.3V gespiesen. Der I2C-Bus hat auch eine Spannung von um die 3.3V.

Es ist mir ein Rätsel warum das Ganze nicht läuft.

Und der Arduino läuft auch mit 3,3V?

Und A0-A2 des Multiplexers liegen fest auf Gnd oder Vcc?

Hallo,
ich habe ja keine Ahnung, was Du da vor hast oder wie Du es Dir denkst...
Einen Arduino kann ich nicht entdecken, mit was für einem µC betreibst Du die Dinger?

Beim Arduino-I2C-Bus ist es üblich, das dieser terminiert wird.
Also Widerstände an SDA/SCL
Dann mußt Du dem PCA9548A eine Adresse zuteilen, siehe Datenblatt.
Der andere Käfer hat wohl eine feste Adresse.

Wenn Du das hinbekommen hast, dann verbindest Du einen Deiner Käfer mit dem Arduino.
Der I2C-Scanner liefert Dir jetzt die Adresse.
Nun das gleiche mit dem anderem Käfer, auch hier kommt eine Adresse vom I2C-Scanner.
Wenn beide Käfer ihre Adresse ausgegeben haben, dann kannst Du sie auch nutzen.
Gruß und Spaß
Andreas

SkobyMobil:
Beim Arduino-I2C-Bus ist es üblich, das dieser terminiert wird.
Also Widerstände an SDA/SCL

Die Widerstände sind Pullups. Weil die Teilnehmer die Leitung nur auf Masse ziehen

Hallo,
ho,ho! Bei Dir muss man ja vorsichtig sein.
Bei mir ist SDA/SCL über je einen Widerstand mit Vdd verbunden.
Aber mit Pull-up-Widerständen gebe ich Dir recht. Terminieren ist wohl nicht richtig gewählt, Schutz wäre
passender.
Gruß und Spaß
Andreas

SkobyMobil:
Schutz wäre passender.

Nö, auch wieder daneben, das schützt vor nichts.

Erlaubt lediglich mehreren Teilnehmern den Pin unabhängig voneinander auf LOW zu ziehen.

hi,

Kann es sein, daß Dein Breadboard elektrisch in der Luft hängt, weil man die Gnd-Leitung nur erahnen kann, wenn man weiß wo genau sie versteckt sein könnte?

das ist echt ein sch...-bild.

ich hab' GND gar nicht gefunden, bis ich vergrößert habe und nah rangegangen bin.

gruß stefan

Hallo miteinander

Danke für eure Antworten.

DrDiettrich:
Und der Arduino läuft auch mit 3,3V?

Und A0-A2 des Multiplexers liegen fest auf Gnd oder Vcc?

Der Arduino Leonardo wird über Micro USB 2.0 mit 5V gespiesen und kann selber 5V oder 3.3V liefern (je nach dem, welchen Pin man benützt). Ich brauche für meine Anwendung nur 3.3V.

A0-A2 habe ich wie im Schema (das ich in meinem vorherigen Post verlinkt habe) mit Vcc (3.3V) und über Pull-Ups (10kR) mit GND verbunden.

SkobyMobil:
Beim Arduino-I2C-Bus ist es üblich, das dieser terminiert wird.
Also Widerstände an SDA/SCL
Dann mußt Du dem PCA9548A eine Adresse zuteilen, siehe Datenblatt.
Der andere Käfer hat wohl eine feste Adresse.

SDA und SCL sind wie im Schema über 10kR-Widerstände mit Vcc verbunden.

KAMINARIHOSHI:
A0-A2 habe ich wie im Schema (das ich in meinem vorherigen Post verlinkt habe) mit Vcc (3.3V) und über Pull-Ups (10kR) mit GND verbunden.

A0-A2 an GND, Widerstände braucht es keine (ein Widerstand nach GND wäre ein PullDown).

Was ist mit RESET, was mit dem Kondensator?

Ich tippe immer noch auf eine fehlende Masseverbindung. Bekommst Du denn einen einzelnen I2C Sensor zum Laufen? Und mit der selben Verkabelung den Multiplexer nicht? Dann solltest Du mal einen neuen ausprobieren.

Hallo miteinander

Ich habe das Ganze jetzt mal direkt auf eine Lochrasterplatte gelötet, um allfällige Fehler durch Kontaktierungsprobleme am Breadboard auszuschliessen.

A0-A2 habe ich jetzt direkt am GND. Als Kondensator zwischen Vcc und GND habe ich 10uF.
Der Reset ist über 10kR an Vcc angeschlossen.

Den Mux und Farbsensor habe ich ausgewechselt, aber das Problem besteht.
Um den Color Sensor ohne Mux auf Funktion zu testen, habe ich folgenden Code genutzt:

Ohne Multiplexer funktioniert der Senosor.

Speziell aufgefallen sind mir folgende Dinge bei einer Ausmessung der einzelnen Pins:

SD0, wo ich die SDA-Leitung eines Farbsensors angeschlossen habe, ist auf 2.9V. An den restlichen SD-Pins des Multiplexers habe ich 0V, wo auch keine Sensoren angeschlossen sind.

SCL und SDA des Mux, welche ich mit SCL und SDA des Arduino Leonardo verbunden habe, sind auf 3.6V, obwohl ich eigentlich mit 3.3V speise und die I2C-Leitungen jeweils über 10kR mit Vcc verbunden sind.

Mir fehlt immer noch das nötige Vertrauen in Deine Meßtechnik und Verkabelung. Solange sich der Multiplexer nicht über I2C ansprechen läßt, ist da noch was gehörig faul.