Forum: Mikrocontroller und Digitale Elektronik gleiche i2c-Adressen managen


von Matthias K. (oskito)


Lesenswert?

Hallo,
Ich bitte euch, mein Verständnis-Problem zu lösen:

Eine Baugruppe (Modulträger) mit mehreren Modulen soll 10 (oder 12) 
i2c-Adressen nutzen. Die Adressen der einzelnen Module stehen fest.
Auf der Baugruppe selbst gibt es keine Kollision der Adressen.

Nun soll die Baugruppe für Geräte verwendet werden, deren Komponenten 
bereits bestimmte i2c-Adressen oder Adreßbereiche verwenden.

Es werden also einige Adressen doppelt vorhanden sein.
Die Geräte existieren bereits und können nicht verändert werden.
Die Module der Baugruppe können nicht verändert werden.
Also muß der Umgang mit den Adressen auf dem Modulträger gehandhabt 
werden.

Meine Idee war, einen Switch zu verwenden.
Ich hatte mir vorgestellt, daß der mit einer einstellbaren Adresse im 
Bus erscheint.
Wie arbeitet nun so ein Switch?
Kann ein switch die Adressen der Module vor dem Gerät "verstecken"?
 - Oder reicht der Switch die Adressen der Module doch auf dem i2c-Bus 
weiter und es kommt doch zur Kollision zwischen Modul der Baugruppe und 
Bauteil des Gerätes?
Wie könnte man den möglichen Adreßkonflikt mit wenig Aufwand umschiffen?

Kurz:
i2c-Adressen auf Modulen = fest
i2c- Adressen im Gerät = fest
auf Modulträger muß Adreßkonflikt gelöst werden

von H.Joachim S. (crazyhorse)


Lesenswert?


von Peter (Gast)


Lesenswert?

Hallo

Es gibt einen I2c Hub der die Adressen auf andere Adressen umschreibt. 
An sonsten könnte man sich eine eigene Bridge bauen die über SPI zum 
Beispiel jeweils eine Karte anspricht über I2c.

von Peter (Gast)


Lesenswert?

LTC4316 zum Beispiel

von Matthias K. (oskito)


Lesenswert?

Noch habe ich von der i2c-Programmierung keine Ahnung.
Deshalb benötige ich Hilfe.

Es gibt also Switches mit unterschiedlicher Arbeitsweise?

Es gibt also i2c-Switches, die die Adressen so managen, daß im Gerät nur 
die Adresse des Switches auftaucht?

Kennt jemand hier eine gute Übersicht darüber, was geht und was nicht 
geht?

Ich habe mir vorgestellt, daß im Datenstrom mitgeteilt werde, daß z.B. 
der Kanal n angesprochen werden soll. Darüber wird zwar die Adresse z.B. 
0xAA genutzt, die taucht selbst aber auf der anderen Seite des Switches 
nicht als Adresse auf.

Geht so etwas ohne Mikrocontroller?

Wie wichtig ist es, einen Reset-Pin des Switches nutzen zu können?

Mir wurde erzählt, mit einem 2. i2c-Bus am Switch würde das Problem zu 
lösen sein - ?

von Paul (Gast)


Lesenswert?

Verwende den PCA9544. Damit kannst du bis zu 4 gleiche Adressen am Bus 
umschalten. Wenn mehr nimm den PCA9548. Kann dir ein paar Beispiel dazu 
schicken.

von Wolfgang (Gast)


Lesenswert?

Matthias K. schrieb:
> Geht so etwas ohne Mikrocontroller?

Gegenfrage: Wie geht I2C ohne Mikrocontroller?

von Larry (Gast)


Lesenswert?

> Gegenfrage: Wie geht I2C ohne Mikrocontroller?

Ein Chinese hat das mal als Statemachine fuer einen FPGA
aufgedroeselt. Die kann aber nicht Spielarten sondern nur
das zur Demonstration notwendige Minimum.

von Rudolph R. (rudolph)


Lesenswert?

Warum nicht einfach zwei I2C Busse verwenden, einen für intern, einen 
für extern?

von Joe F. (easylife)


Lesenswert?

Matthias K. schrieb:
> Kurz:
> i2c-Adressen auf Modulen = fest
> i2c- Adressen im Gerät = fest
> auf Modulträger muß Adreßkonflikt gelöst werden

Besser kann man ein verkacktes Konzept nicht beschreiben.

von Klaus R. (klara)


Lesenswert?

Matthias K. schrieb:
> Wie arbeitet nun so ein Switch?

Der Switch heißt eigentlich "I2C-bus multiplexer".


Paul schrieb:
> Verwende den PCA9544.

Schau Dir das Datenblatt des PCA9544 an. Der PCA9544 hat einen Eingang 
und vier Ausgänge. Bei einem Adresskonflickt muß ein extra I2C - Bus 
eingerichtet werden. Der 4-fach Multiplexer schaltet jetzt den 
ursprünglichen I2C-Bus auf einen der 4 Ausgänge. Im nächsten Turn 
schaltet man den Multiplexer auf einen der anderen Ausgänge, ganz nach 
belieben.
mfg klaus

von Wolfgang (Gast)


Lesenswert?

Klaus R. schrieb:
> Der Switch heißt eigentlich "I2C-bus multiplexer".

Blöde Bezeichnung.

In Richtung vom Gerät/Master zu den Modulen/Slaves funktioniert der 
natürlich genauso gut und arbeitet dann als Demultiplexer.

von Klaus R. (klara)


Lesenswert?

Wolfgang schrieb:
> Klaus R. schrieb:
>> Der Switch heißt eigentlich "I2C-bus multiplexer".
>
> Blöde Bezeichnung.
>
> In Richtung vom Gerät/Master zu den Modulen/Slaves funktioniert der
> natürlich genauso gut und arbeitet dann als Demultiplexer.

Dann lies das Datenblatt. Der erste Satz der Beschreibung lautet:
"The PCA9544A is a 1-of-4 bidirectional translating multiplexer, 
controlled via the I2C-bus."
mfg Klaus

von Gerd E. (robberknight)


Lesenswert?

Klaus R. schrieb:
> Dann lies das Datenblatt. Der erste Satz der Beschreibung lautet:
> "The PCA9544A is a 1-of-4 bidirectional translating multiplexer,
> controlled via the I2C-bus."

Wobei ich vermute daß sich das "translating" darauf bezieht, daß die 
einzelnen Busse unterschiedliche Spannungspegel verwenden können, nicht 
darauf daß der sich irgendwie intelligent ins I2C-Protokoll einmischt.

Vom Konzept her funktioniert das Ding wie ein per I2C gesteuerter 
Analogschalter. Er schaltet einen der 4 Ausgangsbusse mit Deinem 
Master-Bus zusammen. Welcher das sein soll, kontrollierst Du per 
I2C-Befehl auf dem Master-Bus.

von Wolfgang (Gast)


Lesenswert?

Klaus R. schrieb:
> Dann lies das Datenblatt.

Habe ich, deshalb die Bemerkung "blöde Bezeichung" - eben genau weil das 
Ding für beide Datenrichtungen arbeitet.

Als Multiplexer fungiert er für die von den Slaves kommenden Daten und 
als Demultiplexer für die vom Master kommenden.

von Stefan F. (Gast)


Lesenswert?

Wie würdest du denn so ein Kombi-Produkt nennen, wenn nicht 
"bidirektionaler Multiplexer". Etwa "Multiplexer/Demultiplexer" oder 
"De-/-Multiplexer". Das sieht mir zu sperrig aus.

Ich sage ja auch nicht "Wagen-Heber/-Senker" oder 
"Wagenheber/Wagensenker".

von Wolfgang (Gast)


Lesenswert?

Stefanus F. schrieb:
> Wie würdest du denn so ein Kombi-Produkt nennen, wenn nicht
> "bidirektionaler Multiplexer". Etwa "Multiplexer/Demultiplexer" oder
> "De-/-Multiplexer". Das sieht mir zu sperrig aus.

Hersteller setzen da eher auf funktional richtige Benennung und kümmern 
sich nicht um sperrig.

4052
https://www.ti.com/lit/ds/symlink/sn74lv4052a.pdf
https://assets.nexperia.com/documents/data-sheet/74HC_HCT4052.pdf

von Stefan F. (Gast)


Lesenswert?

Wolfgang schrieb:
> Hersteller setzen da eher auf funktional richtige Benennung

Offensichtlich nicht alle.

von Klaus R. (klara)


Lesenswert?

Gerd E. schrieb:
> Wobei ich vermute daß sich das "translating" darauf bezieht, daß die
> einzelnen Busse unterschiedliche Spannungspegel verwenden können, nicht
> darauf daß der sich irgendwie intelligent ins I2C-Protokoll einmischt.
>
Ja, man kann auch unterschiedliche Spannungspegel verwenden.

> Vom Konzept her funktioniert das Ding wie ein per I2C gesteuerter
> Analogschalter. Er schaltet einen der 4 Ausgangsbusse mit Deinem
> Master-Bus zusammen. Welcher das sein soll, kontrollierst Du per
> I2C-Befehl auf dem Master-Bus.

Diese Beschreibung trifft es. Mit dem Begriff "Demultiplexer" kann ich 
in diesem Zusammenhang nichts anfangen.
mfg Klaus

: Bearbeitet durch User
von NichtWichtig (Gast)


Lesenswert?

Unglaublich.

i2c Multiplexer sind bei Fachleuten täglich Brot und liefern locker die 
Anforderung des TO

Was auch immer man möchte läßt sich kaskadieren und schwubs sind X 
identische i2c-Gerätschaften ansprechbar.

Etwas smarte Ansteuer-Software brauchts es dann schon, aber die Guten 
kriegen das hin.

von Wolfgang (Gast)


Lesenswert?

Klaus R. schrieb:
> Diese Beschreibung trifft es. Mit dem Begriff "Demultiplexer" kann ich
> in diesem Zusammenhang nichts anfangen.

Ein Multiplexer fädelt Signale von mehreren Leitungen/Datenströmen auf 
eine gemeinsame Leitung/Datenkanal, ein Demultiplexer fädelt die Daten 
am anderen Ende wieder auseinander.

von Wolfgang (Gast)


Lesenswert?

Oder kurz:
Ein Multiplexer hat mehrere Eingänge und einen Ausgang,
ein Demultiplexer hat einen Eingang und mehrere Ausgänge.

Bei bidirektionalen Bausteinen sind beide Richtungen möglich und 
folglich sind beide Funktionen vorhanden.

von Matthias K. (oskito)


Lesenswert?

Joe F. schrieb:
> Matthias K. schrieb:
>> Kurz:
>> i2c-Adressen auf Modulen = fest
>> i2c- Adressen im Gerät = fest
>> auf Modulträger muß Adreßkonflikt gelöst werden
>
> Besser kann man ein verkacktes Konzept nicht beschreiben.

Es wäre zu einfach, wenn man alle Fäden in der Hand hätte.
Hier geht es aber darum, zwei Welten (unterschiedliche Hersteller) 
sinnvoll zusammenzubringen.
Die Fachleute streiten sich.
Ich glaube an eine elegante Lösung.
Die Beiträge sind schonmal sehr lehrreich.
Ich fürchte nur, daß mir nicht genug Zeit gelassen wird, alle 
Möglichkeiten intensiv zu studieren.

> Geht so etwas ohne Mikrocontroller?
- bezieht sich darauf, daß an der Hardware nur auf dem Modulträger 
Veränderungen möglich sind. Dort soll keine eigene Software nötig sein, 
um die i2c-Welten zusammenzubringen.

Translater wie LTC4316 ~17 ~18 könnten eine Lösung sein, wenn die 
Beschaltung tatächlich so einfach funktioniert.

In die Möglichkeiten von PCA9544 oder PCA9548 muß ich mich reinlesen.

von Klaus R. (klara)


Lesenswert?

Wolfgang schrieb:
> ein Demultiplexer fädelt die Daten
> am anderen Ende wieder auseinander.

Und das ist beim I2C-Bus nicht erforderlich.
mfg Klaus

von H.Joachim S. (crazyhorse)


Lesenswert?

Matthias K. schrieb:
> Ich fürchte nur, daß mir nicht genug Zeit gelassen wird, alle
> Möglichkeiten intensiv zu studieren.

Naja, so umfangreich ist das Thema ja nun nicht, mehr als einen Tag 
solltest du dafür nicht brauchen :-)

von Wolfgang (Gast)


Lesenswert?

Klaus R. schrieb:
> Wolfgang schrieb:
>> ein Demultiplexer fädelt die Daten
>> am anderen Ende wieder auseinander.
>
> Und das ist beim I2C-Bus nicht erforderlich.

Und wie werden dann, bei gleicher I2C-Adresse der Module, die Daten die 
an die verschiedenen Slaves gehen, auseinandersortiert?

Genau mit einem Demultiplexer, der dafür sorgt, dass jedes der Module 
die passenden Daten zugeschoben bekommt.

von Axel S. (a-za-z0-9)


Lesenswert?

Wolfgang schrieb:
> Klaus R. schrieb:
>> Dann lies das Datenblatt.
>
> Habe ich, deshalb die Bemerkung "blöde Bezeichung" - eben genau weil das
> Ding für beide Datenrichtungen arbeitet.
>
> Als Multiplexer fungiert er für die von den Slaves kommenden Daten und
> als Demultiplexer für die vom Master kommenden.

Dann ist dein Problem, daß du in einer so kleinen Blase lebst, wo 
Multiplexer generell unidirektional sind. Spätestens seit dem Erscheinen 
des 4051 (das war so in den 70ern) sind bidirektionale aka 
Analog-Multiplexer gebräuchlich. Und daß ein Multiplexer für einen Bus 
mit bidirektional genutzten Leitungen auch bidirektional sein muß ... 
das erschließt sich auch einem Nicht-Nobelpreisträger. OK, außer dir 
natürlich.

Für jemanden, der aus der Netzwerk-Ecke kommt, ist "Multiplexer" auch 
ein besserer Begriff als ausgerechnet "Switch". Denn in einem Netzwerk 
verteilt ein Switch Pakete automatisch anhalt ihres Inhaltes. Der 
genannte IC tut das nicht. Von der Funktion her ist das ein simpler 
Schalter, der den Master-Bus mit einem der Slave-Busse verbindet. Diese 
Verbindung bleibt dann so lange bestehen, bis man sie explizit ändert. 
Keinerlei Automatismus im Spiel.

von NichtWichtig (Gast)


Lesenswert?

Wolfgang schrieb:
> Klaus R. schrieb:
>> Wolfgang schrieb:
>>> ein Demultiplexer fädelt die Daten
>>> am anderen Ende wieder auseinander.
>>
>> Und das ist beim I2C-Bus nicht erforderlich.
>
> Und wie werden dann, bei gleicher I2C-Adresse der Module, die Daten die
> an die verschiedenen Slaves gehen, auseinandersortiert?
>
> Genau mit einem Demultiplexer, der dafür sorgt, dass jedes der Module
> die passenden Daten zugeschoben bekommt.

Nö

Das muß die schlaue Software schon selber machen welche Daten an die i2c 
Slaves senden will.
Sie muß die Kontrolle über die dazwischen liegenden Multiplexer haben 
und eventuell vor dem Endslavezugriff den Multiplexer umschalten.

Der Eisenbahnfreak wird Parallelen zu seinem Weichewerk erkennen.
1 Gleis kommt Richtung Bahnhof und teilt sich mit z.B. insgesamt 3 
Weichen erst auf 2 Gleise und dann auf 2 * 2 = 4 Gleise auf.
Der Zug rollt immer nacheinander über 2 Weichen egal auf welches Gleis 
er muß.
Das geht, wie beim i2c-Multiplexer, in beide Richtungen.


Ist doch wirklich nicht soo schwer zu verstehen.
Es gibt kaum simplere i2c Bausteien als Multiplexer.

von Klaus R. (klara)


Lesenswert?

Wolfgang schrieb:
> Und wie werden dann, bei gleicher I2C-Adresse der Module, die Daten die
> an die verschiedenen Slaves gehen, auseinandersortiert?

Es wurde eigentlich schon alles gesagt. Der I2C - Master geht auf den 
Eingang des Multiplexers und wählt seinen gewünschten I2C - Kanal zum 
I2C - Slave an. Beim PCA9544 hat man 4 I2C Kanäle die angewählt werden 
können. Es sind dann auch 4 I2C - Slaves mit gleicher Adresse 
einsetzbar. Da immer nur der angewählte Kanal aktiv ist gibt es auch 
keine Adresskonflicke zwischen den 4 Slaves mit gleicher Adresse.

Eine praktische Sache. Temperatursensoren brauchen schon mal einige 
zehntel Sekunden. Also initiere ich die Sensoren der Reihe nach. Danach 
kann ich dann der Reihe nach die Werte abfragen.

Man kann auch am Kanal einen weiteren Multiplexer anschliessen. So 
könnte man einen ganzen Baum aufbauen.

Den Hauptkanal in mehrere Kanäle aufzuteilen bringt noch den Vorteil das 
die Reichweite erhöht werden kann. Anstatt das 8 I2C - Slaves mit ihren 
Eigen- und Leitungskapazitäten die Reichweite begrenzen, könnte man mit 
2 I2C-Bussen die Kapazitäten dann deutlich vermindern und wieder ein 
paar Meter Länge gewinnen oder die Taktfrequenz erhöhen.
mfg Klaus

von Wolfgang (Gast)


Lesenswert?

Axel S. schrieb:
> Dann ist dein Problem, daß du in einer so kleinen Blase lebst, wo
> Multiplexer generell unidirektional sind. Spätestens seit dem Erscheinen
> des 4051 (das war so in den 70ern) sind bidirektionale aka
> Analog-Multiplexer gebräuchlich.

Dann guck mal auf das Datenblatt so eines 4051.
Da liest du: "... analog multiplexer/demultiplexer..."
Auf seinen Bruder, den 4052 hatte ich oben als Beispiel schon verwiesen.

Wolfgang schrieb:
> ... 4052 ...

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.