PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I²C Adresse ändern/maskieren



sebi87
12.06.2014, 17:00
Hallo zusammen,

ich stehe vor dem Pronblem, das ich in meinem System mehrere Beschleunigungssensoren nutzen muss. Der Ausgewählte Sensor kann 2 I²C Adressen annehmen, leider benötige ich mehr als nur zwei Sensoren.

Jetzt hatte ich die Idee die Adresse mithilfe eines Microkontoller zu maskieren. Also Jeder Sensor bekommt ein Mikrokontroller, welcher als I²C Slave koniguriert ist und die Daten an den Sensor weiter reicht.

28368

Die Daten an den Sensor werden dann per Software-I²C weitergegeben.
Somit ist die Adresse des Sensors frei programmierbar.

Was meint ihr? Machbar?

Gibt es hierfür eventuell schon ein Beispiel?


Viele Grüße
Bastii

BMS
12.06.2014, 17:32
Hallo,
ehrlich gesagt finde ich das sehr umständlich. Nimm doch einfach einen Multiplexer, der SDA und SCL auf den entsprechenden Slave schaltet, z.B. 74HC4052.
Mit dem 74HC4052 lassen sich dann 4 Slaves mit gleicher Adresse verwenden. Der Bus-Master benötigt nur zwei zusätzliche Pins (bzw. zusätzlich Enable wenn gewünscht) um den Multiplexer zu konfigurieren.
Die Slaves brauchen dann lediglich eigene Pullup-Widerstände, damit die Busleitungen der ungenutzten Sensoren definierten Pegel hat.
Grüße, Bernhard

sebi87
12.06.2014, 17:39
Hallo Bernhard,

du hast recht das ganze ist etwas umständlich, aber leider MUSS das ganze an einen I²C Bus und nicht an 4 bzw mehrere getrennte Bussysteme.

Viele Grüße
Bastii

Valen
12.06.2014, 17:42
Jeder Sensor ein Mikrocontroller anhängen ist vielleicht etwas viel aufwand. Und zu verzögerung von die Daten leiten. Ich wurde multiplexing versuchen mit mehrere I2C-busses, wo an jeder nur 2 Sensoren angeschaltet sind. Die eine Mikrocontroller könnte dann den gewünschte Bus wählen mit weitere IO pins, und die andere abschalten.


Mit diese Mosfet-lösung geeignet für Spannungsniveau-trennung muss im Prinzip auch für abschalten der ganzen Bus funktionieren:

http://www.nxp.com/documents/application_note/AN10441.pdf

sebi87
12.06.2014, 17:46
Hallo Valen,

danke für den Link,

aber wie Oben schon beschreiben ist es Plicht das alle Sensoren am gleich Bus hängen. Es darf somit nur ein Bus geben.

Viele Grüße
Bastii

Valen
12.06.2014, 17:58
Mit ein Mikrocontroller an jeder Sensor wirst du 5 getrennte I2C-Busses haben. Wieso MUSS das so sein?

- - - Aktualisiert - - -

Die einzige andere Lösung das ich mich Vorstellen kann ist die Spannungsversorgung zu den ungewünschte Beschleunigungssensoren ab zu schalten mit ein Bipolären PNP Transistor oder P-mosfet. Ist aber nicht so nett, und könnte Einstellung und Kalibrierung Problemen geben in dem Werten.

sebi87
12.06.2014, 18:06
Da hast du vollkommen recht, im Prinzip sind es 5 Bussysteme. Alle münden aber un einem zentalren Bus und das ist Plicht. Das ganze soll variabel auf einem Bus aufgebaut werden können.

BMS
12.06.2014, 19:28
Hallo,
wie oft müssen die Sensoren abgefragt werden und mit welcher Frequenz soll SCL getaktet werden?
Die Auslastung des Busses sollte im Voraus berechnet werden.
Bei zu hoher Abtastraten oder zu vielen Slaves wird der Bus zum Flaschenhals.
Wie viele Sensoren sollen maximal am Bus hängen?
Und noch viel wichtiger: Wie lange wird die Busleitung (??? cm).
Grüße, Bernhard

sebi87
12.06.2014, 19:43
Hallo,
die Sensorden befinen sich auf einem Stück von ca 20cm Busleitung.
Die Clock soll im Optialfall mit 400kHz getacktet sein. (mindestens 100kHz)

Das ganze wurde schon einmal grob berechntet, der Bus ist auf alle fälle nicht der Flaschenhals. Das Problem ist momentan nur die Addressierung

redround
12.06.2014, 21:05
finde auch, dass der Multiplexer die einfachere Variante ist ... und ganz nebenbei: die mit den wenigsten I2C Bussen :-) Wenn Du mit dem Controller die Maskierung übernehmen willst, brauchst Du einen, der 2 I2C's zur Verfügung stellt. An einen kommt der Sensor - denn der kann ja nur I2C und über den zweiten kommuniert der Controller als Slave. Das ist also weit ENTFERNT VON EINEM I2C. Und ja, es müssen in diesem Szenario 2 getrennt Busse pro Controller sein, da Du ja sonst wieder in das Adress-Dilema kommst, wenn alle Sensoren am gleichen Bus hängen. Bei Verwendung eines Multiplexers hängen alle am GLEICHEN I2C ... welche Lösung ist denn da jetzt wohl näher an Deiner Ausgangs-Frage-Stellung? ;-)

Um nicht einen Controller mit zwei I2C Bussen verwenden zu müssen, könnte man die Controller untereinander auch über einen anderen Bus wie z. B. 1Wire kommunizieren lassen ... allerdings brauchst Du dann am Ende der Signalkette wieder einen Controller, der aus 1Wire I2C macht:

Sensor --> I2C --> Slave-Controller --> 1Wire -|
Sensor --> I2C --> Slave-Controller --> 1Wire --> Master-Controller --> I2C --> Rest Deines Projektes
Sensor --> I2C --> Slave-Controller --> 1Wire -|

Klebwax
12.06.2014, 21:39
NXP hat eine ganze Familie von I2C Switches und Multiplexer (http://www.nxp.com/products/interface_and_connectivity/i2c/i2c_multiplexers_switches/#products). Die sind z.B. dafür gemacht, mehrere Devices mit gleichen Adressen an einem Master zu betreiben

MfG Klebwax