Forum: Mikrocontroller und Digitale Elektronik TWI Interrupt-Leitung


von G. Ast (Gast)


Lesenswert?

Hallo,

ich hab folgendes Problem: Per TWI sind ein Master mit ca 10 Slaves 
verbunden. Jetzt müssen die Slaves aber auch die Möglichkeit haben, 
Daten an den Master zu senden. Folgendes ist mir dazu eingefallen:

a) Interruptleitung
Eine Leitung die von den Slaves von Low auf High wieder auf Low gezogen 
wird. Der Master merkt das und fragt alle Slaves durch, ob sie was zu 
melden haben.

Problem: Was passiert, wenn mehrere Slaves gleichzeitig Daten anfragen, 
also die Leitung gleichzeitig auf High schalten?

b) Kontinuerlich Nachfragen
Der Master fragt kontinuierlich von den einzelnen Slaves Daten an.

Problem: Belastet den Bus und den Master?

c) sperate TWI-Leitung zum handeln der Daten
Auf einem Seperaten TWI-Bus wird kontinuierlich nachgefragt, ob Daten 
anliegen.

Problem: Setzt vorraus, dass jeder uC 2 TWIs hat.

Was soll ich machen?

Viele Grüße :)

von Tobias K. (kurzschluss81)


Lesenswert?

Was evtl. zu überlegen wäre ist wenn jeder mal Master ist.
Das heißt dein Master ist der einzige der Anweisungen gibt. wenn er 
nichts zu tun hat macht er sich zum Slave.
Deine Slaves machen sich nur dann zum Master wenn sie etwas loswerden 
wollen. So kannst du dir die zusätzliche Interrupt Leitung sparen.
Das geht aber nur wenn die Slaves auch als Master eingesetzt werden 
können.

von G. Ast (Gast)


Lesenswert?

Gute Idee, aber der Master muss Master bleiben, da er per UART an einen 
Rechner angebunden ist und die Kommunikation auf dem Bus loggt und auf 
manche Daten reagiert.

von Jens (Gast)


Lesenswert?

Hallo

> a) Interruptleitung
> Eine Leitung die von den Slaves von Low auf High wieder auf Low
> gezogen wird. Der Master merkt das und fragt alle Slaves durch,
> ob sie was zu melden haben.

> Problem: Was passiert, wenn mehrere Slaves gleichzeitig Daten
> anfragen, also die Leitung gleichzeitig auf High schalten?

Ich habe hier so etwas Ähnliches am laufen, mit einer „Bussy“ Leitung. 
Am Slave wird an einem freien Port ein NPN- Transistor angeschlossen. 
Wenn der Slave Daten zum abholen hat, dann setzt er das „Bussy“ und der 
Transistor schaltet nach Masse durch. Diese Leitung wird einfach mit dem 
Master verbunden, dass muss nicht einmal ein Interrupt sein (es muss nur 
der interne Pull-Up Widerstand eingeschaltet sein). Wenn der Port am 
Master also gegen Masse gezogen wird, dann hat irgendein Slave Daten die 
abgeholt werden müssen. Der Master kann nun den I2C-Bus abklappern und 
die Daten einsammeln. Werden die Daten von dem Slave abgeholt der das 
„Bussy“ gesetzt hat, dann löscht der Slave das „Bussy“ nachdem die Daten 
erfolgreich ausgelesen wurden wieder. Die „Bussy“ Leitung geht damit 
wieder gegen High. Bleibt die „Bussy“ Leitung aber weiterhin auf Low, 
dann hat auch noch ein anderer Slave ein „Bussy“ gesetzt und wartet 
darauf dass die Daten ausgelesen werden. Auf diese Art und Weise können 
keine Daten „verschluckt“ werden und der Master weis auch immer wann 
Neue Daten abgeholt werden müssen...

LG Jens

von Tobias K. (kurzschluss81)


Lesenswert?

Uart hat doch mit TWI nichts zu tun. Wenn er über UART befehl bekommt 
irgendetwas auf die TWI Leitung zu schreiben macht er sich eben solange 
wieder zum Master der TWI Leitung

von G. Ast (Gast)


Lesenswert?

Tobias Korrmann schrieb:
> Uart hat doch mit TWI nichts zu tun. Wenn er über UART befehl bekommt
> irgendetwas auf die TWI Leitung zu schreiben macht er sich eben solange
> wieder zum Master der TWI Leitung

der master soll aber u.A. auch alles auf dem TWI Bus auf dem Rechner 
loggen

klingt gut, Jens, so werd ichs machen, vielen dank ;)

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.