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?
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
> 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
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.
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
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
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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.