Forum: Mikrocontroller und Digitale Elektronik I²C master an anderen master anbinden


von Lex (Gast)


Lesenswert?

Hallo,

Ich habe ein I²C Gerät (SCL ~5kHz) das etwa sekündlich ein paar Werte 
ausgibt. Dieses arbeitet ausschließlich als Master. Der μC der die Werte 
empfangen soll arbeitet auch als Master da da noch diverse Sensoren 
dranhängen. Der Empfänger ist zwar ein SAMD21, ich habe jedoch keine 
SERCOMs mehr frei zum als Slave konfigurieren.

Wie kriege ich die Werte in den μC rein? Gibt es Umsetzer die einfach 
alles auf ner Slave Adresse Empfangene wieder auf einem anderen I²C Bus 
als Slave verfügbar machen können?

Oder muss ich selbst einen Umsetzer mittels zusätzlichem μC realisieren? 
Andere Ideen?

Vielen Dank,
MfG,
Lex

von Peter S. (Gast)


Lesenswert?

Ich würde das einfach mit einem kleinen Zusatz-µC machen.

Kann zwar sein, dass es fertige Chips dafür gibt, aber solche 
Spezial-Chips sind meist unnötig komplex und haben oft ihre Eigenheiten.

von Oliver S. (oliverso)


Lesenswert?

Wenn es ein echter I2C ist, dann sollten beide Master Multimastermode 
kennen. Da kann dann einer der Master zum Slave werden, falls 
erforderlich.

Oliver

von S. R. (svenska)


Lesenswert?

Lex schrieb:
> Oder muss ich selbst einen Umsetzer mittels zusätzlichem μC realisieren?

Wenn du in deinem SAMD noch zwei Pins frei hast, könntest du eine 
Software-I2C implementieren, entweder für den Master oder den Slave.

Du könntest auch zwei I2C-Portexpander (z.B. PCF8574) Rücken-an-Rücken 
zusammenschalten, dann hättest du zwei Slave-Interfaces mit den gleichen 
Daten, welches du vom µC aus sekündlich pollen kannst. Hängt aber davon 
ab, ob du die Slave-Adresse deines Gerätes konfigurieren kannst.

von Guido Körber (Gast)


Lesenswert?

Oliver S. schrieb:
> Wenn es ein echter I2C ist, dann sollten beide Master Multimastermode
> kennen. Da kann dann einer der Master zum Slave werden, falls
> erforderlich.

Nein, ein I2C Device kann Slave, Master oder Master/Slave sein. Ein 
Master sollte zwar multimaster-fähig sein, das hat aber nichts damit zu 
tun, ob er auch als Slave laufen kann, das ist völlig 
implementierungsabhängig.

von Peter D. (peda)


Lesenswert?

Oliver S. schrieb:
> Wenn es ein echter I2C ist, dann sollten beide Master Multimastermode
> kennen.

Leider habe ich die Erfahrung gemacht, daß außer Philips/NXP keiner den 
I2C-Multimastermode wirklich verstanden hat.
Die Atmel AVR/8051 hatten schwerwiegende Bugs. Ohne Timeout mit Retry 
geht da garnichts.
Auch hatte ich mal versucht, den P89C668 durch den Tekmos Nachbau 
TK89C668 zu ersetzen, dessen I2C hängte sich schon im Slave-Scan auf.

Wenn es aber läuft, ist Multimaster-I2C eine feine und elegante Lösung.

Guido Körber schrieb:
> Ein
> Master sollte zwar multimaster-fähig sein, das hat aber nichts damit zu
> tun, ob er auch als Slave laufen kann, das ist völlig
> implementierungsabhängig.

Ein I2C-Multimaster wird automatisch Slave, sobald er die Arbitration 
verliert. Etwas anderes ergäbe auch keinen Sinn.

von Fabian F. (fabian_f55)


Lesenswert?

Wie Zeitkritisch sind denn die Messwerte? Am einfachsten wäre es den I2C 
zu muxen und einfach alle paar Sekunden umzukonfigurieren zwischen 
Master/Slave

von S. R. (svenska)


Lesenswert?

...oder einfach zwei I2C-Portexpander Rücken-an-Rücken 
zusammenzuschließen. Dann hat man auf beiden Seiten einen I2C-Slave - 
auf den einen schreibt man, vom anderen liest man. Fertig.

von Jobst Q. (joquis)


Lesenswert?

Nimm einfach ein I2C-RAM oder EEPROM als Zwischenspeicher,den der eine 
Master beschreibt und der andere ausliest. Beide Master müssen natürlich 
aufeinander achten, dh Multimasterfähig oder synchronisiert sein.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Lex schrieb:
> Der Empfänger ist zwar ein SAMD21

Der kann schonmal kein Multimaster.
Man kann aber leicht einen I2C-Singlemaster mit Bit-Banging mit 2 
beliebigen IO-Pins realisieren.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Ich weiss nicht, ob's ein Einzelfall war, aber ich hab' mal ziemlich 
Malheur mit I2C Multimaster gehabt. Wuerde ich nicht einsetzen. Das war 
so ein oller Coldfire, bei dem muss wohl irgendein SAP-Informatiker die 
I2C Hardware gestrickt haben.
IIRC war da die Multimasterfaehigkeit nicht abschaltbar. Und leider 
irgendwie auch arg nervoes, d.h. der hat andauernd gedacht, ein anderer 
(tatsaechlich nicht vorhandener) Master haette den Bus uebernommen und 
er muesste jetzt warten, bis er ihn wieder kriegt (Was natuerlich nie 
passiert ist...).
Deshalb wuerd' ich auch fuer den schon vorgeschlagenen Zweit-µC aus dem 
Zweit-Post plaedieren.

Gruss
WK

von Lex (Gast)


Lesenswert?

S. R. schrieb:
> Du könntest auch zwei I2C-Portexpander (z.B. PCF8574) Rücken-an-Rücken
> zusammenschalten, dann hättest du zwei Slave-Interfaces mit den gleichen
> Daten, welches du vom µC aus sekündlich pollen kannst.

Das wäre elegant, gute Idee! Mein Slave muss die Adresse 0x34 haben, den 
PCF8574 kann ich leider nicht darauf konfigurieren. Ich werde mal 
nachforschen ob es sonstige Port Expander gibt die ich auf die Adresse 
einstellen kann.

Fabian F. schrieb:
> Am einfachsten wäre es den I2C
> zu muxen und einfach alle paar Sekunden umzukonfigurieren zwischen
> Master/Slave

Auch eine Idee, danke!


Vielen Dank euch, das hilft mir schon mal weiter :)

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.