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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Lex (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
2 lesenswert
nicht 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)


Bewertung
2 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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 :)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.