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
Es gibt spezielle Multiplexer für I2C z.B.: http://docs-europe.electrocomponents.com/webdocs/0b4c/0900766b80b4cb7e.pdf
Guter Hinweis! Klingt nach dem, was ich suche, muss ich erstmal lesen. Danke. Thom.
Thomas P. schrieb: > Es gibt ja Module, die eine feste > Adresse haben Meistens -wenn es Sinn macht- lässt sich die Adresse einstellen.
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? ---reboot brain and think again---
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
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.
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.
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.
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.
Peter R. schrieb: > Ein BUS-Pin von ihm ist an den Bus angeschlossen, ein Slave-Pin an den > I2C-Slave. Das habe ich jetzt nicht verstanden. Gibts dazu einen Schaltplan?
Man könnte auch eigene Chip-Selects einführen, sodaß man die SCL's der nichtselektierten ICs mit je einem Oder-Gatter auf high festhält und nur den selektierten IC freigibt. Mit zusätzlichen PIO-Ausgängen selektiert man dann den jeweiligen IC.
Hallo Die ICs PCA .. finde ich sehr inetressant. Habe mir die Datenblätter angesehen. Gibt es ein kleines Beispiel für einen Code in C?
Hallo, Du brauchst nur immer, wie bei einer Eisenbahn, einmal den gewünschten Bus mit einem I2C-Write freischalten. Das war es. mfg klaus
:
Bearbeitet durch User
MaWin schrieb: > Das habe ich jetzt nicht verstanden. Gibts dazu einen Schaltplan? Welcher MaWin ???
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.
MaWin schrieb: > Peter R. schrieb: >> Welcher MaWin ??? > > Ich bin MaWin. Aber ich hab es jetzt verstanden und brauche keinen Schaltplan mehr.
Würde es gern machen. Hardware kein Problem für mich. Habe mir die Erklärung zur Umschaltung in den Datenblättern angesehen. Ist mir noch unklar.
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.
>> 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.
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
:
Bearbeitet durch User
Christian B. schrieb: > Datenleitung bidirektional. Takt kann auch bei Clock-Stretching... Gruss Chregu
Man kann auch das I2C in SW machen und dann den Master 8 SCL- und eine gemeinsame SDA-Leitung erzeugen lassen. Welche SCL-Leitung aktiv ist, legt man mit einem Maskenbyte fest. Damit kann man dann 8 Sensoren ansteuern.
MaWin schrieb: > Peter R. schrieb: >> Welcher MaWin ??? > > Ich bin MaWin. https://youtu.be/oKqqRrITlWg ???
Christian M. schrieb: > Takt kann auch bei Clock-Stretching... Das geht dann jedoch nicht mehr. Ob das mit dem Multiplexer funktioniert müsste man mal recherchieren. Das Datenblatt schweigt sich darüber jedoch aus.
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.
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.