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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Bert S. (kautschuck)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert

von Alex G. (dragongamer)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert

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


Bewertung
0 lesenswert
nicht lesenswert

von (prx) A. K. (prx)


Bewertung
1 lesenswert
nicht lesenswert
Oder I2C per Software, mit getrennten SDA-Leitungen.

von (prx) A. K. (prx)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Wie ist es mit einem PCA 9544?

von Boris O. (bohnsorg) Benutzerseite


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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).

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.