Forum: Mikrocontroller und Digitale Elektronik I2C und Multiplexer


von Thomas (Gast)


Lesenswert?

Hallo Zusammen,

ich habe eine Frage zum Thema Multiplexer. Ich habe ein Board mit 
fertigen Treibern, dass ich als Control Einheit verwende. Auf dem Board 
ist ein I2C Bus und ein Multiplexer. Ich möchte einen der internen DACs 
ansteuern. Dazu muss ich den Multiplexer auf den gewünschten Bus 
schalten und dnan sozusagen eine Sequenz für den DAC absetzen. Aber was 
ist genau damit gemeint?

Ich habe ein Kommando ähnlich I2C 0 71 x xz
Wobei 0 das R/W, 71 wahrscheinlich A0 bis A6 also 7MSB denke ich,x die 
Schreibrichtung und y der Kanal. Aber was genau kann ich tun um als 
erstes den Multiplexer auf den gewünschten i2c bis zu schalten. Kann ich 
dann über die Kommandoshell eines Rechners, an dem das Board per USB 
angeschlossen ist, machen? Oder muss das auch in dem Protokolfile sein, 
dass ich dann für den Controller schreibe, um dann Gerste über I2C 
anzusteuern?

von Jim M. (turboj)


Lesenswert?

Da fehlen alle relevanten Infos (Board Typ etc.) um die Frage auch nur 
im Ansatz sinnvoll beantworten zu können. Meine Glaskugel ist in 
Reparatur.

von Bestromer (Gast)


Lesenswert?

Jim M. schrieb:
> Da fehlen alle relevanten Infos (Board Typ etc.) um die Frage auch
> nur
> im Ansatz sinnvoll beantworten zu können. Meine Glaskugel ist in
> Reparatur.

....quatsch,Du hast bloß keine Ahnung!
Den Multiplexer erreichst Du ganz bequem über das Kommando 
(write,<adresse>,<wert>)

von Stefan F. (Gast)


Lesenswert?

@Bestromer:
Hä? Wir wissen ja noch nichtmal, um welches Board es geht. Kennt ihr 
euch persönlch, oder woher weist du mehr?

von Thomas (Gast)


Lesenswert?

Es handelt sich dabei um kein kommerzielles Board. Mir geht es nur
darum:

Es wird an einem Raspberry Py per USb angeschlossen und verfügt intern
bereits über alle Treiber. Meine Frage ist nur wie ich den internen
Multiplexer dieses Boards auf einen der I2C-Bus schalte? Aus der
Kommandoshell aus? Mir geht es einfach nur um das Prinzip!

von W.A. (Gast)


Lesenswert?

Thomas schrieb:
> Meine Frage ist nur wie ich den internen
> Multiplexer dieses Boards auf einen der I2C-Bus schalte? Aus der
> Kommandoshell aus? Mir geht es einfach nur um das Prinzip!

So, wie es vom Entwickler des Boards vorgesehen ist. Andere 
Möglichkeiten sind nicht ausgeschlossen, aber doch eher selten. So ist 
das im Prinzip immer.

von Hä? (Gast)


Lesenswert?

Thomas schrieb:
> Es handelt sich dabei um kein kommerzielles Board.

Und deshalb darfst du uns nicht verraten welches es ist?

von Programmierer (Gast)


Lesenswert?

Das geht so: du schickst die richtigen Befehle per USB und wertest die 
Antworten aus. Wie die Befehle auszusehen haben, steht in der 
Dokumentation des Boards.

von Programmierer (Gast)


Lesenswert?

PS: Befehle schicken & empfangen geht zB per libusb in einem C-Programm, 
welches du über deine Kommandoshell kompilierst und ausführst.Alternativ 
passt vielleicht ja ein im Kernel vorhandener Treiber auf die 
gewünschten Befehle, den du dann über seine spezifische Schnittstelle ( 
/dev Dateien oder so ) ansprechen kannst.

von Planlos (Gast)


Lesenswert?

Hier kennt sich ja wieder keiner aus, schrecklich...

Der per USB steuerbare I²C Multiplexer ist natürlich völlig zweifelsfrei 
Conrad # 409667.


Dummerweise gibt es zum Kanal-Wechseln nur eine Windows-Software.

Deshalb:

Thomas schrieb:
> Aber was genau kann ich tun um als
> erstes den Multiplexer auf den gewünschten i2c bis zu schalten. Kann ich
> dann über die Kommandoshell eines Rechners, an dem das Board per USB
> angeschlossen ist, machen?

von W.A. (Gast)


Lesenswert?

Planlos schrieb:
> Der per USB steuerbare I²C Multiplexer ist natürlich völlig zweifelsfrei
> Conrad # 409667.

Na du hast ja eine tolle Glaskugel ...

> Dummerweise gibt es zum Kanal-Wechseln nur eine Windows-Software.

Auch die wird USB-Konforme Dinge über den USB schicken, die man dann 
natürlich auch unter dem (unbekannten) Betriebssystem des Rechners des 
TOs irgendwie auf den Weg bekommen würde.

von Planvoll (Gast)


Lesenswert?

Planlos schrieb:
> Der per USB steuerbare I²C Multiplexer ist natürlich völlig zweifelsfrei
> Conrad # 409667.

Thomas schrieb:
> Es handelt sich dabei um kein kommerzielles Board.

Aha ...

von Programmierer (Gast)


Lesenswert?

W.A. schrieb:
> die man dann natürlich auch unter dem (unbekannten) Betriebssystem des
> Rechners des TOs irgendwie auf den Weg bekommen würde.

Linux auf Raspberry PI:
Beitrag "I²C - Buch oder Tutorial in C"

von Planlos (Gast)


Lesenswert?

W.A. schrieb:
> (unbekannten) Betriebssystem des Rechners des TOs

Nachdem der Rechner ein Raspi (erm, RasbPy?) ist, wird das OS darauf 
nicht allzu unbekannt sein.... Oder ist das Raspi-Windows10 schon 
fertig?

Thomas schrieb:
> Es wird an einem Raspberry Py per USb angeschlossen und verfügt intern
> bereits über alle Treiber. Meine Frage ist nur wie ich den internen
> Multiplexer dieses Boards auf einen der I2C-Bus schalte? Aus der
> Kommandoshell aus? Mir geht es einfach nur um das Prinzip!

von Peter D. (peda)


Lesenswert?

Thomas schrieb:
> Mir geht es einfach nur um das Prinzip!

Das Prinzip ist immer dasselbe.
Schau in die Doku zu dem unbekannten Board und richte Dich danach.

Ich habe für I2C noch nie nen Multiplexer gebraucht. Ist schon recht 
komisch Dein Board. Hast Du mal den Schaltplan?

von STK500-Besitzer (Gast)


Lesenswert?

Peter D. schrieb:
> Ich habe für I2C noch nie nen Multiplexer gebraucht. Ist schon recht
> komisch Dein Board. Hast Du mal den Schaltplan?

Dann hast du noch nicht mit einem oder mehreren COTEK-Netzteilen und 
einem EEPROM auf einem Bus gearbeitet. ;)

von Planlos (Gast)


Lesenswert?

Peter D. schrieb:
> Hast Du mal den Schaltplan?

Den braucht er ja nicht.
Denn:

Thomas schrieb:
> Ich habe ein Board mit
> fertigen Treibern,

und wenn die Linux-Treiber für das (unbekannte) Board laufen, werden sie 
den (unbekannten) I²C Multiplexer ansprechen können.

Alle Details über den Multiplexer werden Kernel-Intern gehandhabt.
Für die Userspace-Programme stehen einfach mehrere I2C-Bus-Devicenodes 
zur Verfügung.

Richtiges Devicenode verwenden => Kernel kümmert sich um den Rest.

Hier noch ein Link mit schickem ASCII-Art Bild für die Graphisch 
Orientierte Leserschaft:

https://i2c.wiki.kernel.org/index.php/I2C_bus_multiplexing


Zitat:
1
If your system has one (or more) I2C controller(s) and one (or more) I2C
2
multiplexer(s), you should be able to access each I2C device on any
3
segment without doing "strange" operations but i2c classic ones.
4
In other words, the user shouldn't have to know the I2C bus topology 
5
details nor the multiplexer internals. By considering each i2c multiplexer
6
branch as an independent segment we can reach the goal, in fact the user 
7
simply can exchange data with an I2C device by accessing to the relevant 
8
segment.


Stand so aber auch schon im Parallel-Thread.

Timmo H. schrieb:
> dann erledigt Linux die Umschaltung automatisch wenn du
> den i2c bus ansprichst (i2c-0, i2c-1 ...)

von Peter D. (peda)


Lesenswert?

Zur Auswahl mehrerer I2C-Slaves mit gleicher Adresse kann man auch 1..16 
PCF8574/A benutzen. Die Slaves müssen nur mindestens einen Adreßpin 
haben.

von Bestromer (Gast)


Lesenswert?

Stefan U. schrieb:
> @Bestromer:
> Hä? Wir wissen ja noch nichtmal, um welches Board es geht. Kennt ihr
> euch persönlch, oder woher weist du mehr?

...ich weis natürlich nicht mehr wie alle Anderen auch....mit den 
spärlichen Angaben des TO kann man nix Anfangen, genau so wenig wie mit 
meiner Antwort....beides sehr rätselhaft und Zeitverschwendung....das 
war die Botschaft dahinter :)

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.