I2C Slave-Adresse umadressieren?

OP #4860761
Lesenswert?

Moin.

Ich habe eine Frage zum I2C-Bus. Es gibt ja Module, die eine feste 
Adresse haben, die sich nicht ändern lässt. Wenn man davon aber mehrere 
gleichartige am selben Bus ansprechen möchte, die dann alle die selbe 
Adresse hätten - gibt es sowas wie Adressumsetzer, die zwischen Slave 
und Master sitzen, und das möglich machen?

Thom
#4860980
Lesenswert?

Wumo schrieb:
> grundschüler schrieb:
>> Thomas P. schrieb:
>>> Es gibt ja Module, die eine feste
>>> Adresse haben
>>
>> Meistens -wenn es Sinn macht- lässt sich die Adresse einstellen.
>
> Bei den Modulen, die eine feste Adresse haben, läßt sich diese Adresse
> einstellen?
>
Grundschüler wollte wohl damit sagen, dass es mit besagtem I2C-Slave 
wohl keinen Sinn hätte.
Der  I2C Bus - Multiplexer ist schon die beste Lösung. Den gibt es schon 
für zwei Busse im 8 poligen Gehäuse.
http://www.nxp.com/documents/data_sheet/PCA9540B.pdf
Gast #4861046
Lesenswert?

Klaus R. schrieb:
> Grundschüler wollte wohl damit sagen, dass es mit besagtem I2C-Slave
> wohl keinen Sinn hätte.


Nein ich wollte damit sagen, dass ein TO der das verwendete Modul nicht 
bezeichnen kann, möglicherweise einfach nicht weiß, ob und wie man die 
Adresse ändern kann.
#4861056
Lesenswert?

Teilweise gibt es auch mehrere Typen von I²C Devices. Die unterscheiden 
sich dann geringfügig in der Bauteilbezeichnung und eben in der Adresse, 
sind aber ansonsten identisch.

Hatte irgendwann mal ausversehen auf ein Layout den falschen Typ 
bestückt (hatte noch ein angestelltes "A") und mich ewig gewundert, 
warum der Mist nicht läuft, obwohl doch in den vorherigen Tests immer 
alles gut ging.
Gast #4861059
Lesenswert?

grundschüler schrieb:
> Klaus R. schrieb:
>> Grundschüler wollte wohl damit sagen, dass es mit besagtem I2C-Slave
>> wohl keinen Sinn hätte.
>
> Nein ich wollte damit sagen, dass ein TO der das verwendete Modul nicht
> bezeichnen kann, möglicherweise einfach nicht weiß, ob und wie man die
> Adresse ändern kann.

Da er es schon selbst angesprochen hat und weiß, daß es Module mit und 
ohne Adressierungsänderung gibt, darf man ihm schon zutrauen, daß es 
sich in seinem Fall um Module handelt, die sich nicht ändern lassen.
Gast #4861181
Lesenswert?

Man  kann  auch den I2C- slave mit einem Mikrokontroller "beschummeln".

Ein BUS-Pin von ihm ist an den Bus angeschlossen, ein Slave-Pin an den 
I2C-Slave.

Wenn der Slave bereits angesprochen ist, reicht der Kontroller die bits 
einfach durch.

Beim Adressbyte gehts anders: Der Kontroller liest bitweise die Adresse 
am Bus  mit, gibt aber dabei an den Slave die dem Slave eigene Adresse 
aus.
Wenn der Kontroller seine eigene Adresse empfangen hat, gibt er am Bus 
ein ACK aus. Der Kontroller reicht das ACK allerdings nur dann an den 
Bus weiter, wenn er die "neue" Adresse erkannt hat.

 Dazu müsste dann aber noch eine Flankenerkennung kommen, mit der die 
Start- oder die Stop-Bedingung erkannt wird.

Klingt vielleicht etwas kompliziert, aber mit einem Atiny 13 oder dgl. 
wäre das im Einzelfall eine durchaus machbare Lösung.
Gast #4861269
Lesenswert?

Thomas P. schrieb:
> gibt es sowas wie Adressumsetzer, die zwischen Slave
> und Master sitzen, und das möglich machen?

Die genannten Bus-Multiplexer können das. Für einen Ausgang lässt sich 
das mit einem  Atiny13 machen:

PB0 an SCL, PB1 an SDA desI2C bus mit Master und den andren slaves
PB3 an SCl PB4 an SDA des slave mit deoppelt auftretender Adresse

Wenn halt eine Adresse auf den Bus gegeben wird, unterdrückt der 
Umsetzer die Originaladresse und gibt die ihm einprogrammerte Adresse 
weiter. Ansonsten reicht der Umsetzer die andren Bytes oder Signale wie 
Stop und Start unverändert weiter.
Von der Hardware her eigentlich nichts besonderes.
Von der Software her etwas mühsam, aber machbar.
OP #4861610
Lesenswert?

Moin.

Das sind ja mal ne Menge antworten, Danke schonmal.

> möglicherweise einfach nicht weiß, ob und wie man die Adresse ändern kann

Im konkreten Fall geht es um HMC5883L. Weil ich aber nicht die Anwendung 
diskutieren wollte, sondern die Frage grundsätzlich beantwortet haben 
wollte, hatte ich das weggelassen.

> Man  kann  auch den I2C- slave mit einem Mikrokontroller "beschummeln".

Das war bisher meine einzige Idee, habe da aber etwas Sorge, dass das 
Timing dann nicht mehr so richtig klappt. Mag unbegründet sein.

> die SCL's der nichtselektierten ICs mit je einem Oder-Gatter auf high
> festhält und nur den selektierten IC freigibt

Die Idee finde ich gut, und an sowas hatte ich auch gedacht, als ich das 
Kontrollregister vom Multiplexer gesehen habe. Wenn ich das richtig 
verstanden habe, macht der nämlich genau das, nur mit dem Unterschied, 
dass der das Chipselect nicht über zusätzliche PIO Leitungen macht, 
sondern dass diese Infos über den I2C selbst an den Multiplexer 
geschickt werden. Oder-Gatter habe ich rumliegen, Multiplexer nicht.

Warum macht man das auf der Taktleitung? Intuitiv hätte ich die 
Datenleitung genommen.

> Du brauchst nur immer, wie bei einer Eisenbahn, einmal den gewünschten
> Bus mit einem I2C-Write freischalten. Das war es.

Das verstehe ich nicht (habe keine Eisenbahn). Kannst du das bitte für 
etwas doofere wie mich erklären?

Thom.
OP #4861614
Lesenswert?

>> die SCL's der nichtselektierten ICs mit je einem Oder-Gatter auf high
>> festhält und nur den selektierten IC freigibt

> Warum macht man das auf der Taktleitung? Intuitiv hätte ich die
> Datenleitung genommen.

Oh, ich glaube, ich habe es verstanden. Der Takt wird ja eh vom Master 
kontrolliert, und wenn die Taktleitung vom Chipselect dauerhaft auf Low 
gezogen wird, dann sieht der Slave nicht, wie die Zeit vergeht, und der 
ganze Verkehr auf der Datenleitung rauscht einfach an ihm vorbei.

Oder?

Thom.
#4861722
Lesenswert?

Thomas P. schrieb:
> Warum macht man das auf der Taktleitung? Intuitiv hätte ich die
> Datenleitung genommen.

Außerdem ist die Datenleitung bidirektional... Da wäre ein Ausblenden 
deutlich komplizierter.
Wir haben aktuell auch so einen I²C Mutliplexer im Einsatz (TCA9548A) 
Das funktioniert recht zuverlässig. Man kann auswählen, ob man nur einen 
Slave mit einer Nachricht beglücken will oder mehrere. (Letzteres macht 
natürlich nur Sinn, wenn die Kollegen keine Daten übermitteln wollen, 
sonst gibt's Kauderwelsch
Gast #4862088
Lesenswert?

Christian B. schrieb:
> Das Datenblatt schweigt sich darüber
> jedoch aus.

Clock-Stretching interessiert den Multiplexer nicht.

Der macht einfach nur ein Tor auf.
Oder um bei den Schienen zu bleiben; der Weiche ist es egal, wie viel, 
wie schnell, oder welche Züge drüber fahren. Es ist ein Problem des 
Zuges, in Spur zu bleiben. Die Weiche hat keine Chance, da irgendwie 
differenzieren zu können. Sie verändert auch nicht den Zug.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren