TWI Interrupt-Leitung

Gast #1616733
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 :)
#1616756
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.
Gast #1616788
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.
Gast #1616874
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
Gast #1617374
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 ;)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 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.