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