Forum: Mikrocontroller und Digitale Elektronik Mehrere Sensoren mit gleicher Adresse an einem I2C Bus


von Helmut F. (fritz01h)


Lesenswert?

Hallo,
mit einem MSP430FR5739 möchte ich über einen I2C-Bus mehrere 
Drucksensoren (MPL3115A2 von Freescale, bis zu 10 Stück) auslesen.
Bei einem Drucksensor funktioniert das bereits.
Um mehrere Drucksensoren nacheinander anzusprechen es gibt nur eine 
einzige Adresse für alle), habe ich mir überlegt die Sensoren 
nacheinander einzuschalten, auszulesen und wieder auszuschalten. Leider 
spielt der I2C-Bus dabei nicht mit.
Hat jemand eine Idee, wie man das alternativ machen könnte?
Hatte auch noch überlegt jedem Sensor einen Baustein am SCL und SDA zu 
spendieren, damit diese Pins nach Abschaltung hochohmig am Bus 
erscheinen und diesen somit nicht mehr beeinflussen.
Hat jemand eine Lösung um mehrere Sensoren gleicher Adresse an einem 
I2C-Bus zu betreiben?
Danke
Helmut

von Flip B. (frickelfreak)


Lesenswert?

I2C multiplexer

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Flip B. schrieb:
> I2C multiplexer

Oder die SCLOCK-Leitung über einen DeMultiplexer.

von Helmut F. (fritz01h)


Lesenswert?

Danke,
doch ein Multiplexer vervielfältigt leider auch die Anzahl der 
Busleitungen.

von Helmut F. (fritz01h)


Lesenswert?

Hallo Dennis,
das mit der "SCLOCK-Leitung über einen DeMultiplexer" versteh ich nicht. 
Ist mir unbekannt.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Helmut Fritz schrieb:
> Danke,
> doch ein Multiplexer vervielfältigt leider auch die Anzahl der
> Busleitungen.



Die SDA-leitung bleibt für alle gleich beim Demultiplexer, nur die SCL 
wird für jeden eigens verdrahtet.

So in der Art ... 
http://www.onsemi.com/pub_link/Collateral/AND9061-D.PDF

Wenn dir der Aufwand ja nicht zu groß ist :) nimm einen sehr sehr sehr 
sehr kleinen Tiny und nehm ihn als I2C-Bridge vor den MPL3115A2.
Den kannste ja dann auf individuelle Adressen reagieren lassen und sogar 
von Master-Seite mit OneWire oder anderen Protokollen betreiben.

: Bearbeitet durch User
von Helmut F. (fritz01h)


Lesenswert?

Danke, beide Lösungen sind sehr interessant.

Zu 1.: Bei der ersten könnte jedoch weiterhin ein Problem bestehen, da 
SDA ja keine Entkopplung erfährt. Das werde ich aber testen.
Vorteilhaft wäre auch, dass ich alle Sensoren ohne Unterbrechung mit 
Strom versorgen könnte.
Zum Strom-Sparen würde man dann die Sensoren in den Sleep-Modus 
versetzen.

Zu 2.: Gibt es für die Tiny-s bereits Beispiellösungen?
Ja, es scheint aufwändig zu sein, denn jedes Teil muss vor dem Einbau 
programmiert und verwaltet werden.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Helmut Fritz schrieb:
> Danke, beide Lösungen sind sehr interessant.
>
> Zu 1.: Bei der ersten könnte jedoch weiterhin ein Problem bestehen, da
> SDA ja keine Entkopplung erfährt. Das werde ich aber testen.
> Vorteilhaft wäre auch, dass ich alle Sensoren ohne Unterbrechung mit
> Strom versorgen könnte.
> Zum Strom-Sparen würde man dann die Sensoren in den Sleep-Modus
> versetzen.
>
> Zu 2.: Gibt es für die Tiny-s bereits Beispiellösungen?
> Ja, es scheint aufwändig zu sein, denn jedes Teil muss vor dem Einbau
> programmiert und verwaltet werden.

Der Tiny wäre ein I2C-Client und ein I2C-Master in einem.
Bei nem Tiny25 z.b. I2C-Client über USI und I2C-Master über 
Software-I2C.
Die Adresse des I2C kann man sich ja über eine 2te I2C-Adresse in den 
EEPROM programmieren, wenn das Gerät allein am I2C-Bus hängt.
Es wäre ja auch möglich noch die Abfrage etc. dem Tiny25 zu überlassen 
und er gibt nur noch fertige Ergebnisse weiter per I2C-Bus.

von Jonas G. (jstjst)


Lesenswert?

Wie hast du die Sensoren an- und ausgeschaltet? Versorgungsspannung 
getrennt?
Soweit ich weiß sind die Pins am I2C Bus im Ruhezustand auf high. 
Eventuell verhalten sie sich anders wenn der Chip aus ist. Du könntest 
es mit pull-up Widerständen versuchen.

Jst

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Andere Frage mal
MSP430FR5739
hast du nicht 10 + 1 Pins am MSP430 frei für eine I2C-Implementierung ?

von Werner M. (Gast)


Lesenswert?

Als Multiplexer gibt es von NXP z.B. den PCA9547 (8 Kanäle). Die 
Kanalumschaltung erfolgt auch über I2C und erfordert somit keine extra 
Steuerleitungen.
http://www.nxp.com/products/interface_and_connectivity/i2c/i2c_multiplexers_switches/#products

von Jobst Q. (joquis)


Lesenswert?

Wenn die Sensoren weit auseinander liegen und keine Sternschaltung 
erwünscht oder möglich ist, könntest du jeden Sensor mit einem 
PCF8574(A) ausstatten und darüber die SCL-Leitung schalten.

von Klaus (Gast)


Lesenswert?

Jonas G. schrieb:
> Soweit ich weiß sind die Pins am I2C Bus im Ruhezustand auf high.
> Eventuell verhalten sie sich anders wenn der Chip aus ist.

Wenn dann dann eine der Signalleitungen auf High geht, versucht sie den 
Chip über die Substratdiode zu speisen. Das funktioniert meist nicht 
besonders gut, der Chip ist dann halb an, halb aus.

Jonas G. schrieb:
> Du könntest es mit pull-up Widerständen versuchen.

Die sind bei I2C sowieso da.

MfG Klaus

von Björn (Gast)


Lesenswert?

Mit 2 Mosfets und 2 Pullups pro Drucksensor sollte die Trennung bei 
Abschaltung der Versorgungsspannung klappen:
http://www.nxp.com/documents/application_note/AN10441.pdf
"isolates a powered-down bus section from the rest of the bus system"

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.