mehrere I2c sensoren am Arduino

Ich wollte 4 RGB Sensoren (Adafruit TCS34725) mit der selben I2C Adresse an einen Arduino anschließen. Nach einiger Suche habe ich einen Multiplexer gefunden. Der ist für mein Vorhaben jedoch ungünstig, da ich die Werte gleichzeitig auslesen möchte. Gibt es eine Alternative? (z.B. I2c Adresse ändern)
Danke im vorraus für Antworten :slight_smile:

Der ist für mein Vorhaben jedoch ungünstig, da ich die Werte gleichzeitig auslesen möchte.

Das geht bei I2C sowieso nicht (serieller Bus, davon abgesehen ist bei einer Single-Core-VonNeumann-CPU sowieso nichts wirklich gleichzeitig). Die Sequenz für das Umschalten des I2C-Multiplexers ist relativ kurz, die dadurch verursachte Verzögerung ist wahrscheinlich zu verschmerzen.

fabi_druckt:
Ich wollte 4 RGB Sensoren (Adafruit TCS34725) mit der selben I2C Adresse an einen Arduino anschließen. Nach einiger Suche habe ich einen Multiplexer gefunden. Der ist für mein Vorhaben jedoch ungünstig, da ich die Werte gleichzeitig auslesen möchte. Gibt es eine Alternative? (z.B. I2c Adresse ändern)
Danke im vorraus für Antworten :slight_smile:

Auch wenn deine Sensoren unterschiedliche Adressen haben, könntest du die Sensoren nicht gleichzeitig auslesen, aber wenn du es richtig machst, ganz schnell hintereinander.

Und das geht auch mit einem I2C-Multiplexer.

Hi

Bei DS18B20 (Temperatur-Sensoren, allerdings 1-wire) kann man das Erfassen des Messwert 'global' auslösen.
KA, ob's so was auch bei I²C-Sensoren gibt - durchaus interessant fände ich den Ansatz schon - wenn Wer dazu was weiß, gerne zu mir :slight_smile:

Sonst musst Du halt die Sensoren einzeln ansprechen und die Daten auslesen.

Wofür benötigst Du diese Gleichzeitigkeit?

MfG

postmaster-ino:
Hi

Bei DS18B20 (Temperatur-Sensoren, allerdings 1-wire) kann man das Erfassen des Messwert 'global' auslösen.
KA, ob's so was auch bei I²C-Sensoren gibt - durchaus interessant fände ich den Ansatz schon - wenn Wer dazu was weiß, gerne zu mir :slight_smile:
.....

Das Problem des TO ist ja nicht das erfassen bzw. auslesen der Sensoren, sondern das Ansprechen dieser.
Da die Sensoren alle die selbe Adresse haben, ist das ein kleines Problem, welches der TO nicht lösen kann.

Hi

Dafür hat Er ja den Multiplexer (müsste ich mir Mal reinziehen, wie das Teil gleiche Adressen auseinander hält) - halt nicht 'gleichzeitig'.
Allerdings wohl 'recht flott hintereinander'.

Daher ja auch meine Frage, weshalb Er glaubt diese Gleichzeitigkeit zu brauchen.

MfG

postmaster-ino:
(müsste ich mir Mal reinziehen, wie das Teil gleiche Adressen auseinander hält)

Das macht er überhaupt nicht. Er schaltet vereinfacht gesagt mehrere Leitungen / Busse durch. Was auf den Leitungen addressiert wird, ist ihm egal.

Gruß Tommy

Daher ja auch meine Frage, weshalb Er glaubt diese Gleichzeitigkeit zu brauchen.

Ich denke schon, dass es auch gleichzeitig geht, wenn man nur ernstlich will.

4 fach parallel Software I2C
Eine interessante Aufgabe!

Auch das wäre, durch die Prozessorarchitektur bedingt, nicht wirklich gleichzeitig.

Gruß Tommy

durch die Prozessorarchitektur bedingt, nicht wirklich gleichzeitig

Das ist eher eine Frage nach der Bedeutung des Wortes "wirklich". :wink:

"gleichzeitig" ist bei seriellen Übertragungen gegeben, wenn zum gleichen Zeitpunkt mehr als eine Übertragung stattfindet. Und das hat nichts mit Prozessorarchitektur zu tun.

Ich denke schon, dass es auch gleichzeitig geht, wenn man nur ernstlich will.

4 fach parallel Software I2C
Eine interessante Aufgabe!

Das denke ich auch.

Bleibt allerdings die Frage nach dem Sinn/der Erfordernis.

Tommy56:
Auch das wäre, durch die Prozessorarchitektur bedingt, nicht wirklich gleichzeitig.

Dein Gleichzeitig scheint sich von meinem Gleichzeitig zu unterscheiden.

// 4 externe Pullup
DDRB |= 0x0F; // Setzt 4 SCL gleichzeitig auf Low
wait();
DDRB &= 0xF0; // Setzt 4 SCL gleichzeitig auf High

Ok, das ist Clock. kannst Du auch die Daten gleichzeitig in die 4 Empfangsbytes schieben?

Gruß Tommy

Tommy56:
... 4 Empfangsbytes ...

Es sind mehr, pro Farbe zwei Bytes, drei Farben, vier Sensoren.

Insgesammt ja. Mir ging es aber in erster Linie um die Gleichzeitigkeit des Empfangs von je 1 Byte auf den 4 Linien.

Gruß Tommy

Mir ging es aber in erster Linie um die Gleichzeitigkeit des Empfangs von je 1 Byte auf den 4 Linien.

Deine Gleichzeitigsanforderung ist irrational.

Eigentlich solltest du schon wissen, dass I2C ein serieller Bus ist....

Denn es gehen nur die 4 Bit gleichzeitig,
Um deine 4 Byte voll zu bekommen, wird man schon ein paar mal lesen müssen.

Ich glaube, wir reden aneinander vorbei.

Du empfängst 4 Bit gleichzeitig - ok.

Kannst Du diese 4 Bit aber auch gleichzeitig in die 4 Empfangsbytes schieben?

Wenn ja, dann ist es wirklich ein gleichzeitiger Empfang. Wenn nein, weil das nacheinander passiert, ist es in meinen Augen kein gleichzeitiger Empfang.

Gruß Tommy

Dein Gleichzeitig scheint sich von meinem Gleichzeitig zu unterscheiden.

Das scheint so zu sein. Wir können also die Diskussion beenden, da wir von unterschiedlichen Voraussetzungen ausgehen.

Gruß Tommy

"gleichzeitig" ist bei seriellen Übertragungen gegeben, wenn zum gleichen Zeitpunkt mehr als eine Übertragung stattfindet.

Das ist, z.B. bei der Frage Vollduplex / Halbduplex, oder bei Kollisionen auf einem Bus, durchaus interessant.

Serielle Übertragungen mit Prozessortakten oder mit Relativitätstheorie zu überfrachten, ist entweder witzig oder peinlich.

Ich glaube, wir haben den OP schon längst abgehängt mit einer eher akademischen Diskussion, die nichts bringt.
Wir sollten abwarten, welche Idee von Gleichzeitigkeit der OP hat, bzw. welches seine Anforderungen sind.

Der verwendete Sensor ist nicht sehr schnell, mit der kleinsten Auflösung benötigt er 2.4ms um einen Wert zu messen, in dieser Zeit sind fast 30 Byte über den Bus gegangen. Das "gleichzeitig" ist hier also komplett irrelevant.