I2C Slaves temporär "taub" schalten

OP #7909999
Lesenswert?

Ich habe mich bei der Bestellung der Sensoren für ein Projekt verschaut und versehentlich AS5600 anstatt AS5600L gekauft.

Das bedeutet ich habe etliche Sensoren die alle mit der selben unveränderlichen Adresse am I2C Bus hängen.

Klar könnte ich einen Busmultiplexer verwenden oder die richtigen Sensoren kaufen.

Da das Ganze erst einmal nur ein Prototyp wird, um zu schauen ob das so funktioniert wie ich es mir vorstelle, möchte ich das Ganze so simpel halten wie möglich.

Ich habe mir überlegt ob ich nicht einfach die Slaves die nicht angesprochen werden sollen taub schalte indem ich jedem Slave eine eigene SCL Leitung spendiere die auf Masse gezogen wird.

Das müsste ohne negative Überraschungen funktionieren. Oder habe ich etwas übersehen?

#7910011
Lesenswert?

Barny F. schrieb:

jedem Slave eine eigene SCL Leitung spendiere die auf Masse gezogen wird.

Ruhepegel auf SDA und auf SCL ist High-Pegel.

Wenn SDA auf High gehalten wird, gibt es für diesen Slave keine Start-Condition. Die folgenden SCL-Pulse sollten dem betreffenden Slave dann egal sein.

Alternativ mit z.B. einem '4066 Analogschalter (bidirektional!) beide SCA SCL abkoppeln. Braucht Pullups am Master und an jedem Slave. Statt 4k7 eben jeweils 10k.

mfg mf

#7910015
Lesenswert?

Das müsste ohne negative Überraschungen funktionieren. Oder habe ich etwas übersehen?

Grundsaetzlich geht das, allerdings bekommen dann deine Slaves irgendein halbes Kommando weil Low nicht der Ruhepegel ist. Wenn du sicher Funktion sicherstellen willst dann musst du die Teile danach neu initialisieren.

schalte indem ich jedem Slave eine eigene SCL Leitung spendiere die auf Masse gezogen wird

Und die hast du? Wo kommen die her? Du koenntest allen Slaves dasselbe SCL geben und dies durch ein OR-Gate schicken und so bei den nicht angesprochenen Slaves SCL auf High halten. Klappt aber nur falls dein Slave nicht selber mit SCL klappern will. Manche machen das, Datenblatt aufmerksam lesen!

Vanye

#7910109
Lesenswert?

Vanye R. schrieb:

Klappt aber nur falls dein Slave nicht selber mit SCL klappern will. Manche machen das, Datenblatt aufmerksam lesen!

Es geht hier nicht um /irgendeinen/ Slave, sondern genau um den AS5600. Bei dem ist SCL ausschließlich ein Input. Dafür reicht es, im Datenblatt die Tabelle Fig.4 auf S.3 anzusehen (SDA Input/Output, SCL Input). Dazu muss man gar nicht tiefer einsteigen. Clock stretching macht der AS5600 nicht und als Master kann er auch nicht agieren.

Barny F. schrieb:

Das bedeutet ich habe etliche Sensoren die alle mit der selben unveränderlichen Adresse am I2C Bus hängen.

"etliche", in Zahlen ausgedrückt, ist wieviel?

OP #7910118
Lesenswert?

Achim M. schrieb:

Wenn SDA auf High gehalten wird, gibt es für diesen Slave keine Start-Condition. Die folgenden SCL-Pulse sollten dem betreffenden Slave dann egal sein.

Eigentlich wollte ich nur die SCL Leitung schalten um den Kabelverhau zu minimieren.

Denn wenn ich SCL für ausgewählte Slaves hoch halte müsste der doch bei Kommunikation auf der Datenleitung in die Startbedingung laufen? Oder ist das nicht wichtig wenn die Startbedingung vor dem ersten SCL Takt kommt?

Vanye R. schrieb:

Und die hast du? Wo kommen die her? Du koenntest allen Slaves dasselbe SCL geben und dies durch ein OR-Gate schicken und so bei den nicht angesprochenen Slaves SCL auf High halten. Klappt aber nur falls dein Slave nicht selber mit SCL klappern will. Manche machen das, Datenblatt aufmerksam lesen!

Bei Halten auf VCC hätte ich eine Oder- und bei Ziehen auf Masse die Und-Beschaltung verwendet um den originalen SCL-Pin weiterzuleiten.

Das Datenblatt sagt nichts darüber ob der Slave etwas mit der Taktleitung macht. Da steht nur dass der AS5600 immer ein Slave ist und die Adresse fix ist.

Rainer W. schrieb:

Und "etliche", in Zahlen ausgedrückt, ist wieviel?

Für die ersten Funktionstests sind es 5 Stück. Später, wenn es funktioniert, werden es mit dem AS5600L je nach Konfigurierung 10 bis 15 + zusätzliche Slaves anderer Art. Aber da wird das Ganze ohne dieser Takt-Spielerei betrieben.

Ich wollte nur sicher gehen das theoretisch funktioniert nicht das ich mich beim Debugging sinnlos im Kreis drehe.

Danke für eure Hilfe

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