I2C - gleichzeitig Master und Slave

Gast #5626783
Guten Tag,

ich suche nach einem AVR der gleichzeitig sowohl Slave wie auch Master 
sein kann. Dabei habe ich mir überlegt, dass doch theoretisch die 
Eingänge INT0/INT1 als Slave und das eigentliche TWI-Modul als Master 
benutzt werden kann, oder?

Ich konnte dazu nur relativ wenig Informationen finden.

Beste Grüße
Felix.
Gast
Beim Mikrocontroller hast Du das per Programm in der Hand den 
Betriebsmodus im laufenden Betrieb zu ändern. Können alle, die 2 Pins 
frei haben, entweder Hardware TWI oder Software TWI
Gast
Wahrscheinlich heißt I2C bei Atmel deshalb TWI, weil nicht alle Teile 
der I2C-Spezifikation umgesetzt wurden. Spart wohl Lizenzabgaben.

Multimaster ist schon der richtige Weg. Nur wenn du dich dranmachst, 
solltest du das tBUF-Problem nicht aus den Augen verlieren.
Gast
Vielleicht auch mal überlegen, ob ein anderer Bus vielleicht besser ist. 
Bei CAN z.B. ist Multi-Master sehr einfach, da macht das alles die 
Hardware.
Gast
Dr. Sommer schrieb:
> Vielleicht auch mal überlegen, ob ein anderer Bus vielleicht besser ist.

Ja vor allem weil die MasterSlaves vor lauter Protokoll-
Chaos nicht wissen wann wer sprechen darf. Gibt schöne
Bus-Kollisionen und viel Spass.
Gast
FelixB schrieb:
>> Spricht etwas dagegen, den Modus je nach Bedarf umzuschalten?
> Müsste ich dann nicht auch eine feste Adresse für den Slave auswählen?

Als Slave braucht er eine Adresse - logisch. Auch diese ist zur Laufzeit 
änderbar.

Kann es sein, dass du einen Codegenerator benutzt, der dich dazu zwingt 
jeden I/O Pin vor dem eigentlichen Programmstart für eine bestimmte 
Verwendung festzunageln?
Moin,

Ich kann nur waermstens vom I2C-Multimaster Mode abraten. Da muss nur 
mal ein kleiner Glitch oder eine zu langsame oder zu schnelle Flanke 
vorkommen, schon denkt jeder Master, er waere grad' nicht drann und 
wartet ... und wartet ... und wartet...

Gruss
WK
FelixB schrieb:
> Müsste ich dann nicht auch eine feste Adresse für den Slave auswählen?

Jeder Slave braucht eine Adresse, sonst kann er nicht am Bus teilnehmen.
Und die Adresse sollte konstant sein, sonst schaut der Master ziemlich 
dumm aus der Wäsche, wenn ein Slave plötzlich nicht mehr reagiert.
Dergute W. schrieb:
> Ich kann nur waermstens vom I2C-Multimaster Mode abraten. Da muss nur
> mal ein kleiner Glitch oder eine zu langsame oder zu schnelle Flanke
> vorkommen, schon denkt jeder Master, er waere grad' nicht drann und
> wartet ... und wartet ... und wartet...

Die alten Philips P80C552, P87C751 und P89C668 hatten damit keinerlei 
Probleme. Sie haben sich an die Spezifikation gehalten.
Leider wurden sie ersatzlos abgekündigt. Beim Ersatz durch AVRs habe ich 
leider gemerkt, daß Atmel die Spezifikation nicht verstanden hat. Ich 
habs dann nur mit Timeout-Interrupts wieder zum Laufen gekriegt.
Chaos Master schrieb:
> Ja vor allem weil die MasterSlaves vor lauter Protokoll-
> Chaos nicht wissen wann wer sprechen darf. Gibt schöne
> Bus-Kollisionen und viel Spass.

Bei I2C gibt es keine Kollisionen. Ein Master gewinnt die Arbitration 
und kann seinen Transfer fortsetzen. Es wird kein Paket zerstört und es 
gibt auch kein Protokoll-Chaos.
Gast
> Jeder Slave braucht eine Adresse, sonst kann er nicht am Bus teilnehmen.

Das stimmt natürlich. Was aber, wenn der Slave nur "lauschen" soll, also 
die Übertragung mitlesen kann ohne darauf zu reagieren, der AVR trotzdem 
aber gleichzeitig Master sein kann.
Gast
FelixB schrieb:
>> Jeder Slave braucht eine Adresse, sonst kann er nicht am Bus teilnehmen.
>
> Das stimmt natürlich. Was aber, wenn der Slave nur "lauschen" soll, also
> die Übertragung mitlesen kann ohne darauf zu reagieren, der AVR trotzdem
> aber gleichzeitig Master sein kann.

Nur lauschen geht mit "richtigen" Slaves nicht. Sniffer musst du ohnehin 
"zu Fuß" programmieren - denke ich jedenfalls.
Gast
> Nur lauschen geht mit "richtigen" Slaves nicht. Sniffer musst du ohnehin
> "zu Fuß" programmieren - denke ich jedenfalls.

Ah ja, Sniffer war das Wort welches ich gesucht habe.
Kann ich den Master mit dem TWI Modul machen und den Slave über die 
ION0/INT1 ?
Gast
FelixB schrieb:
>> Nur lauschen geht mit "richtigen" Slaves nicht. Sniffer musst du ohnehin
>> "zu Fuß" programmieren - denke ich jedenfalls.
>
> Ah ja, Sniffer war das Wort welches ich gesucht habe.
> Kann ich den Master mit dem TWI Modul machen und den Slave über die
> ION0/INT1 ?

Man kann, ob du das kannst, kann ich nicht beurteilen. Man kann das auch 
ganz ohne Interrupts machen - hängt sehr davon ab, womit du deinen µC 
sonst noch so belastest.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.