Forum: Mikrocontroller und Digitale Elektronik I2C - gleichzeitig Master und Slave


von FelixB (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

I2C kann Multimaster, wobei das beim AVR sehr verbugt ist.
Falls Du 2 getrennte I2C willst, dann das HW-I2C als Slave und 
Single-Master-I2C in SW.
Bzw. der ATmega328PB hat 2 I2Cs.

von Stefan F. (Gast)


Lesenswert?

Spricht etwas dagegen, den Modus je nach Bedarf umzuschalten?

von Winzer (Gast)


Lesenswert?

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

von neuer PIC Freund (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

neuer PIC Freund schrieb im Beitrag #5626797:
> solltest du das tBUF-Problem nicht aus den Augen verlieren.

Was soll das sein?

von Dr. Sommer (Gast)


Lesenswert?

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.

von Chaos Master (Gast)


Lesenswert?

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.

von FelixB (Gast)


Lesenswert?

> Spricht etwas dagegen, den Modus je nach Bedarf umzuschalten?

Müsste ich dann nicht auch eine feste Adresse für den Slave auswählen?

von Stefan F. (Gast)


Lesenswert?

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?

von Dergute W. (derguteweka)


Lesenswert?

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

von H.Joachim S. (crazyhorse)


Lesenswert?

Ich habe I2C-Multimaster auch noch nie benutzt. Und ehrlich gesagt auch 
nicht gebraucht.

von Peter D. (peda)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

von FelixB (Gast)


Lesenswert?

> 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.

von Stefan F. (Gast)


Lesenswert?

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.

von FelixB (Gast)


Lesenswert?

> 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 ?

von Stefan F. (Gast)


Lesenswert?

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.

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.