Ich muss mehrere uC vernetzen. Dabei gibt es 1 Master und viele Slaves. Als Schnittstelle dachte ich an I2C. Die Adresse von den Slaves ist über Jumper einstellbar. Soweit alles kein Problem. Wie kann der Master aber erkennen, dass es mehrere Slaves mit gleicher Adresse gibt ? Da in allen Slaves die gleiche Software läuft, verhalten sich alle gleich, daher fällt diese doppelte Belegung eigentlich nur bei unterschiedlichen Daten auf. Aber dann werden eigentlich die Daten auch nur verfälscht, erkennen kann man das also eigentlich nur wenn der empfangene Wert schon bekannt ist.
Wenn am Bus zwei Slaves mit geicher Adresse hängen, werden sie erstmal beide mit Ack antworten. Es ist nicht erkennbar, ob nur einer oder beide Slaves antworten. Es entfällt also erstmal eine wichtige Funktionskontrolle. Wenn dann beide Slaves Daten liefern sollen, werden sie gleichzeitig auf den Bus brabbeln. Ein Ausweg könnte es sein, in beiden Slaves verschiedene Sekundäradressen einzurichten, sodass nur der Slave mit der richtigen Slave-Adresse weiter aktiv bleibt. Aber das müsste natürlich individuell in die Slaves einprogrammiert werden.
Sorry, Schreibfehler: ... mit der richtigen Sekundäradresse...
Hallo Benedikt, schau mal hier: http://cctools.hs-control.de/home.php I2C-MUX7 I²C-Bus-Multiplexer für Printmontage. Mit Hilfe dieses I²C-Multiplexers ist es möglich zwischen mehreren Sub-Bussen umzuschalten. Dies ist z.B. sinnvoll, wenn mehr Bausteine an verschiedenen Adressen benötigt werden, als zur Verfügung stehen... Gruss KLaus.
@Benedikt K. >Wie kann der Master aber erkennen, dass es mehrere Slaves mit gleicher >Adresse gibt ? Die Slaves müssen auf ein spezielles Kommando hin mit einer zufälligen Antwortzeit antworten. Wenn nun zwei Slaves zeitversetzt antworten gibt es zwei mögliche Fälle a) die Antworten überlagern sich nicht zeitlich -> zwei Antworten b) die Antworten überlagen sich -> Antwort im Eimer MFG Falk
Und wie willst du erkennen, ob eine Überlagerung stattfindet oder ob diese Überlagerung nicht die Antwort eines einzelnen Slaves ist?
@Gugge 73 >Und wie willst du erkennen, ob eine Überlagerung stattfindet oder ob >diese Überlagerung nicht die Antwort eines einzelnen Slaves ist? über die Auswertung des Clock stretching oder eine geschickte Prüfsumme. MfG Falk
Wobei, stimmt, wenn die Antwort bekannt ist, könnte das gehen.
Stimmt, das mit der Checksumme ist eine gute Idee. Bleibt halt nur, dass eine Zufallszahl gebraucht wird, und daher das Verfahren wieder etwas unsicher ist. Ich denke ohne Zufallszahlen oder eindeutige Seriennummer in jedem uC wird es wohl nicht gehen. Irgendwie müssen sich die uC ja unterscheiden.
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.