Forum: Mikrocontroller und Digitale Elektronik I2C Slaves temporär "taub" schalten


von Barny F. (barny)


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?

von Achim M. (minifloat)


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

von Vanye R. (vanye_rijan)


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

von Harald K. (kirnbichler)


Lesenswert?

Man könnte statt des Analogschalters auch einen Analogmultiplexer à la 
4051 für die SCL-Leitung verwenden, das über Pullups gesagte bleibt 
davon allerdings unberührt.

Der 4051 ist ein 1:8-Multiplexer.

von Rainer W. (rawi)


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?

: Bearbeitet durch User
von Barny F. (barny)


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

von Nemopuk (nemopuk)


Lesenswert?

Barny F. schrieb:
> Oder ist das nicht wichtig wenn die Startbedingung vor dem ersten SCL
> Takt kommt?

Die Startbedingung kommt immer vor dem ersten Takt. Danach wartet der 
Slave (vielleicht für immer) auf die ersten 9 Takte.

Wenn schon, musst du die SDA Leitung hoch halten.

: Bearbeitet durch User
von Barny F. (barny)


Lesenswert?

Danke für den Hinweis.
Das hatte ich übersehen.

von Wastl (hartundweichware)


Lesenswert?

Barny F. schrieb:
> Für die ersten Funktionstests sind es 5 Stück.

Dann kaufe ich mir einfach fünf von der richtigen Sorte und
vermeide diese elende Frickelei und Herumtrickserei am I2C Bus.
Völlig unnötiger Zeit-, Arbeits- und Materialaufwand.

von Rainer W. (rawi)


Lesenswert?

Barny F. schrieb:
> Das Datenblatt sagt nichts darüber ob der Slave etwas mit der
> Taktleitung macht.

Doch, ein Input kann nichts mit der Taktleitung machen, sonst wäre es 
kein reiner Input.

Rainer W. schrieb:
> 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).

: Bearbeitet durch User
von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Barny F. schrieb:
> Klar könnte ich einen Busmultiplexer verwenden
Das ist die richtige Wahl.
Denn genau dafür wurden die Dinger erfunden.

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.