Forum: Mikrocontroller und Digitale Elektronik I2C mehrere Slaves, selbe Addresse


von Bert S. (kautschuck)


Lesenswert?

Hi,

Ich habe eine Problem, und zwar möchte ich mehrere dieser Farbsensoren 
auf den selben I2C Bus legen: 
https://www.aliexpress.com/item/5-pcs-DIY-Mall-RGB-Gesture-Sensor-APDS-9960-APDS-9960-for-Arduino-I2C-Interface-3/32756777280.html?spm=a2g0s.9042311.0.0.27424c4dNMKUM5

Nun haben die aber keine Möglichkeit, die Addresse zu ändern, warum auch 
immer dies so konstruiert wurde o_0. Was wäre die einfachste 
Möglichkeit, 6 von den Dingern auf dem selben I2C Bus zu verwenden? 
Power Up mit Transistor für jeden Sensor? Dann müsste aber 
wahrscheinlich auch jedes mal die ganze Initialisierung getätigt werden, 
also einen ziemlichen overhead.

von Sven K. (quotschmacher)


Lesenswert?


von Alex G. (dragongamer)


Lesenswert?

Du brauchst sowas hier: 
https://learn.adafruit.com/adafruit-tca9548a-1-to-8-i2c-multiplexer-breakout/overview

EDIT: Argh, da war jemand schneller weil ich erstmal gegoogelt hab ob 
der rgb Chip da keine per software veränderliche Adresse hat :D

: Bearbeitet durch User
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?


: Bearbeitet durch User
von M. S. (moeson)


Lesenswert?


von (prx) A. K. (prx)


Lesenswert?

Oder I2C per Software, mit getrennten SDA-Leitungen.

von (prx) A. K. (prx)


Lesenswert?

Bert S. schrieb:
> auf dem selben I2C Bus zu verwenden?

Wie wörtlich ist das zu verstehen? I2C ist räumlich meist enger 
aufgestellt, so dass getrennte Verkabelung nicht unbedingt das 
Hauptproblem sein muss.

Alle direkt an einem Bus geht nicht. Irgendwas muss dazwischen. 
I2C-Muxer erzeugen mehr oder weniger zentral getrennte Busse. 
Adresstranslatoren können direkt an jedem Sensor angebracht werden und 
diese damit einzeln vom Bus abkoppeln.

: Bearbeitet durch User
Beitrag #5503081 wurde vom Autor gelöscht.
von Klars (Gast)


Lesenswert?

Wie ist es mit einem PCA 9544?

von Boris O. (bohnsorg) Benutzerseite


Lesenswert?

Ein einfacher 74er Multiplexer für SCL, ohne Clock-Signal arbeitet 
keiner der Chips. Wird bspw. auf Adafruit beschrieben.

https://blog.adafruit.com/2012/07/02/great-scott-delorean-inspired-time-circuit-clock-with-adafruit-gear/

von (prx) A. K. (prx)


Lesenswert?

Boris O. schrieb:
> Ein einfacher 74er Multiplexer für SCL, ohne Clock-Signal arbeitet
> keiner der Chips.

Unsauber. Die Start Condition aktiviert SDA bei inaktivem SCL. Muxed man 
SCL bei gemeinsamem SDA, kriegt jeder Slave die Start Condition ab, 
nicht nur einer. Wenn man SDA statt SCL muxed (dann aber bidirektional) 
kriegt nur einer die Start Condition zu sehen und die anderen ignorieren 
den Bus.

: Bearbeitet durch User
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

A. K. schrieb:
> Die Start Condition aktiviert SDA bei inaktivem SCL. Muxed man SCL bei
> gemeinsamem SDA, kriegt jeder Slave die Start Condition ab, nicht nur
> einer. Wenn man SDA statt SCL muxed kriegt nur einer die Start Condition
> zu sehen und die anderen ignorieren den Bus.

 Hmmm.

 Man kann auch unbenutzte SCL auf LOW halten, ist ja nicht verboten,
 wenn auch unüblich und normalerweise nur beim Clockstreching gebraucht.

 Beim Start dann zuerst SDAx auf HIGH -> SCLx auf HIGH ->  SDAx auf LOW.

: Bearbeitet durch User
von Alex G. (dragongamer)


Lesenswert?

Da reden wir jetzt aber von der Manipulation des Protokolls in 
Software...

Denke da der TE genau 6 von den Teilen an einem Bus haben wollte, ist er 
mit einem Multiplexer am besten und einfachsten beraten und erspart ihm 
vielleicht sogar etwas Verkabelung.

von Peter D. (peda)


Lesenswert?

Man kann I2C-Master leicht in SW realisieren. Nimmt man einen 8Bit-Port, 
sind  damit ein SCL- und 7 SDA-Pins möglich. Ohne Start/Stop werden die 
SCL-Takte ignoriert. Die Auswahl des SDA-Pins erfolgt über eine Bitmaske 
(0x01..0x40).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.