Forum: Mikrocontroller und Digitale Elektronik 2-Draht-Bus mit dynamisch zuweisbaren Adressen


von panikplauze (Gast)


Lesenswert?

Tach auch,

Wie der Betreff schon sagt, möchte ich einen 2-Draht-Bus mit dynamisch 
zuweisbaren Slaveadressen implementieren. Das ganze soll schlank und 
einigermaßen einfach zu benutzen sein, auf µC's laufen und wenig Strom 
brauchen. Typische Anwendungen haben max. 5 Geräte am selben Bus, um 
sich nichts zu verbauen wäre eine maximal erlaubte Anzahl von 50..100 
Teilnehmer wünschenswert. Hotplug sollte auch unterstützt werden.

Nun dachte ich an den SMBus, der seit der Version 2.0 eine Form von ARP 
(Address Resolution Protocol) unterstützt. Damit wäre die dynamische 
Adressierung gewährleistet. SMBus bietet auch genug freie Adressen, das 
passt also auch. Dass die Logik für die Initialisierung u.U. etwas 
aufwändiger wird kann man durch geschicktes kapseln sicher in dem Griff 
bekommen, sollte also machbar sein.

Um jedoch entsprechende Slaves aufzubauen, müsste der µC ARP-fähig sein, 
was bedeutet, dass er auf mehrere Adressen lauschen können muss (siehe 
Atmel App Note AVR316). Leider finde ich bei den üblichen Verdächtigen 
(Atmel, TI, ...) keinen µC, der das kann.

Nun die Fragen an euch:

1. Gibt es eine alternative Lösung für SMBus-ARP mit gängigen µC's?
2. Welche anderen Protokolle/Schnittstellen könnten die o.g. Forderungen
   erfüllen?
3. Habt ihr andere sachdienliche Hinweise?

Grüße

von Peter D. (peda)


Lesenswert?

panikplauze schrieb:
> Leider finde ich bei den üblichen Verdächtigen
> (Atmel, TI, ...) keinen µC, der das kann.

Doch, z.B. ATmega48:

"The TWAMR can be loaded with a 7-bit Salve Address mask. Each of the 
bits in TWAMR can
mask (disable) the corresponding address bits in the TWI Address 
Register (TWAR)."


Peter

von panikplauze (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Doch, z.B. ATmega48:

Guter Hinweis, danke.

Jetzt muss ich bloß noch herausfinden, ob die doppelte Adressierung das 
einzige Hindernis ist.

Hat sich schon jemand hier mit der ARP-Thematik beschäftigt?

Grüße

von panikplauze (Gast)


Lesenswert?

Ziemlich coole Idee, vielleicht bringt es irgendwann jemanden weiter:

"Every node are multi-master mode.
Let's introduce the concept of arbiter that replaces you actual master 
to not confuse terms.
Let's assign a fixed slave address for your arbiter (which will act as a 
master most of the time but must answer request too).
Let node request a slave address to the arbiter after a random delay to 
minimize chances of collision.
Here you go! Simple and effective scheme with no external pins."

http://www.linkedin.com/groups/Methods-enumerating-I2C-slaves-autoassigning-4023060.S.113408032

Das schöne ist, man braucht keine spezielle Hardware, Multi-Master-Mode 
ist wesentlich gängiger.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Alles wurde schonmal erfunden. Sieh mal Apple ADB-Bus. RS232 mit 
Tristate-Treibern wäre auch eine Idee. Und das Stichwort Tristate bringt 
uns dann in die Ecke CAN und RS485 mit jeweils einem dritten Zustand 
eben.

von amateur (Gast)


Lesenswert?

Das normale Zweidrahtprotokoll sieht dies nicht vor. Es geht von einem 
Master aus der mit bekannten Adressen kommuniziert.
Wolltest Du das ändern, so müsstest Du sehr viel intelligentere Slaves 
installieren und eine Schicht einbauen, die das volle Programm von 
Anmelden über Adressverteilen bis hin zum Abmelden implementiert und 
natürlich nebenbei den Datenaustausch übernimmt.
Ein großer Vorteil von I²C und Konsorten ist: Die Slaves sind sehr 
einfach, dass Protokoll übersichtlich.
Wohl gemerkt: Es gibt so etwas. Es wurde bereits verwandt. Schau Dir mal 
die Struktur des USB-Protokolls an und im Bereich von CAN und Konsorten 
gibt es auch die Möglichkeit On-The-Fly Empfänger und Sender 
nachzurüsten.
Nur mit einfach läuft dann nichts mehr.

von panikplauze (Gast)


Lesenswert?

amateur schrieb:
> Nur mit einfach läuft dann nichts mehr.

Das ist das Ding. Ich denke die Idee von Richard P. ist bestechend 
einfach, in meiner konkreten Anwendung ist das ein guter Ansatz.

Ein wenig Hirnschmalz muss ich noch in die 'Denumeration' stecken, meine 
Slaves sind i.d.R. immer online, auch wenn sie nicht am Bus hängen. Hier 
kann man gut mit einem Timeout arbeiten. Auf Master-Seite ist das 
einfacher zu erkennen.

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.