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
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.
Wenn es ein echter I2C ist, dann sollten beide Master Multimastermode kennen. Da kann dann einer der Master zum Slave werden, falls erforderlich. Oliver
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.
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.
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.
Wie Zeitkritisch sind denn die Messwerte? Am einfachsten wäre es den I2C zu muxen und einfach alle paar Sekunden umzukonfigurieren zwischen Master/Slave
...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.
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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.