Forum: Mikrocontroller und Digitale Elektronik i2c multiplexing


von krach (Gast)


Lesenswert?

Hallo,

ich habe hier ein Problem, vielleicht kann mir jemand dabei helfen.
Ich habe 4 i2c Sensoren, die ich nacheinander auslesen will. Alle 4 
besitzen die gleiche HW Adresse. Die Leitungslänge beträgt ca 2m.

Die direkte Kommunikation (mit einem Sensor) funktioniert. Um nun alle 4 
anzusprechen verwende ich einen Multiplexer (4052BE). Allerdings bekomme 
ich keine Daten mehr von den Sensoren, sobald der Mux dazwischen hängt.

In den Sensoren sind 10k Pullups verbaut. Die SDA und SCL Leitungen habe 
ich schon versucht mit jeweils 10k vor dem µC hoch zu ziehen. Mit dem 
gleichen Erfolg. Ich habe leider kein Oszi, um mir die Leitung 
anzugucken.

Hat vielleicht jemand noch eine Idee?

Danke!

von lassativ (Gast)


Lesenswert?

warum stellst du die Adressen nicht ein ?...fertig !

von krach (Gast)


Lesenswert?

Die können nicht eingestellt werden. Sind fest.

von Jörg S. (joerg-s)


Lesenswert?

Benutz lieber einen speziellen I2C Multiplexer wie PCA9548 oder PCA9547. 
Den 9548 gibt's bei Reichelt und funktioniert bei mir problemlos.

von krach (Gast)


Lesenswert?

Hallo Jörg,

weisst du, ob es den als DIP gibt? Oder kriegt man den 9548 einigermaßen 
gelötet?

Danke!
Alex

von Jörg S. (joerg-s)


Lesenswert?

Ist in SO-24 Gehäuse, das sollte man schaffen :)
Für max. 4 Kanäle kannst du auch den 9546 nehmen (SO-16 Gehäuse).

von krach (Gast)


Lesenswert?

Super, dann werde ich den mal testen.

Vielen Dank!

von lassativ (Gast)


Lesenswert?

...ein weitsichtiger Sensorhersteller !

von Olaf (Gast)


Lesenswert?

> Hat vielleicht jemand noch eine Idee?

Also theorethisch sollte das was du da machst funktionieren. Es ist nur 
wichtig das es nie zu undefinierten Pegeln an den nicht aktivierten 
Devices kommt!
Jetzt sagst du aber da in deinen Devices 10k Pullupseingebaut sind. Bist 
du dir da sicher? Das ist naemlich eigentlich Murks da man dann ja nicht 
viele Devices an einem Bus verwenden kann. Ein Hersteller der etwas 
standardconformes baut der wird immer OpenDrain Ausgaenge verwenden.

Wenn du die interne I2C Hardware deines Controllers verwendest dann 
musst du natuerlich sehr sicher sein erst umzuschalten wenn die 
Uebertragrung beendet ist. Es koennte sein das dich die Statemaschine 
beluegt, also bereits sagt sie sei fertig wenn sie noch das letzte Byte 
oder Bit uebertraegt. Mach da mal Testweise eine Wartezeit hin?

> Ich habe leider kein Oszi, um mir die Leitung
> anzugucken.

Und? Das ist doch I2C und kein 1Wire Abfall. Mach die Uebertragung 
einfach so langsam das du es mit deinem Multimeter oder zwei 
Leuchtdioden verfolgenkannst. Oder lass es mit 1kHz laufen und schau es 
dir mit deiner Soundkarte an.


Ansonsten koenntest du I2c auch noch in Software machen. In deinem Falle 
waere sogar eine Routine moeglich die alle drei ICs ohne Aufwand 
gleichzeitig einliesst.

Olaf

von krach (Gast)


Lesenswert?

Hallo Olaf,

ja bzgl der 10k bin ich mir sicher. Es steht im Datenblatt.
Man kann eigentlich den Fehler beim Umschalten ausschliessen - denn mit 
dem MUX kann ich nicht mal einen Sensor ansprechen.

Viele Grüße
Alex

von Plan (Gast)


Lesenswert?

Hallo,

Hier gibts einen Schaltplan mit Multiplexer, der Funktioniert.
Beitrag "Re: Heizungssteurung im Eigenbau"

Weil so viele Sensoren dran hängen muss gemultiplext werden.

von eklige Tunke (Gast)


Lesenswert?

krach schrieb:
> Ich habe 4 i2c Sensoren
Ist der Sensor ein Geheimnis? Wie heisst der denn?

von Olaf (Gast)


Lesenswert?

> denn mit
> dem MUX kann ich nicht mal einen Sensor ansprechen.

Dann machst du wohl was falsch.
Wie hast du denn die DREI Betriebsspannungsanschluesse angeschlossen?

Olaf

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.