Forum: Mikrocontroller und Digitale Elektronik TWI/I2C Adressen "aushandeln"


von Steffen (Gast)


Lesenswert?

Hallo,

folgendes Problem hab ich. An einen Atmega Master (644) werden per I2C 
und "hotswap" 8 verschiedene attiny slaves angesteckt (kann auch 
gleichzeitig beim einschalten alles angeschlossen sein), die vorher 
nicht bekannt sein können (es gibt sehr viele von diesen slave 
baugruppen)


Gibt es eine übliche Methode in so einem Fall die Slaveadressen 
auszuhandeln? Eine Feste für jeden möglichen slave scheidet durch die 
Gesamtzahl aus. Es müssten also irgendwie die Adressen ausgehandelt 
werden.

Das Gerät in dem der Master steckt hat 8 Slots, insgesamt gibt es ein 
paar hundert slaves, die da zufällig reingesteckt werden können.


Grüße!

von Jiro (Gast)


Lesenswert?

Meinst so ne Art DHCP für I2C ja ?

von Andreas K. (a-k)


Lesenswert?

3-Bit Steckercodierung vom Slot scheidet aus? Notfalls analog mit 8 
Pegeln, das braucht nur 1 ADC-Pin.

von Andreas K. (a-k)


Lesenswert?

Anonsten kann der Tiny ja sich als Master versuchen und die 8 möglichen 
Adressen abklappern. Macht den I2C ein bischen komplexer weil 
Multimaster.

von Peter D. (peda)


Lesenswert?

Steffen wrote:
> Gibt es eine übliche Methode in so einem Fall die Slaveadressen
> auszuhandeln?

Nein, weder eine übliche, noch eine unübliche.

Slaves, die die gleiche Adresse haben, kannst Du nicht unterscheiden.
Entweder sie sind adressiert oder nicht.
Sind 2 Slaves zum Senden adressiert, empfäng der Master die 
UND-Verknüpfung aus beiden Daten, also totalen Stuß.


Peter

von John S. (linux_80)


Lesenswert?

Wieviele können es den max. Gleichzeitig werden ?
Denn theoretisch gibts nur 127 Adressen, im 8-Bit-Modus.
Du könntest Dir falls es mehr sind, mal nach dem 10-Bit Mode erkundigen, 
weiss aber nicht wie sich das in den AVRs realisieren lässt, also wenn 
man TWI verwendet.
Bei den Tinys, die ja meist USI haben, oder direkt per Software I2C 
machen, ist 10-Bit auch kein Problem.

Zu I2C-DHCP, könnten die Slaves beim Start Master spielen und beim 
grossen Master anklopfen und sich dort registrieren, und eine Adresse 
abfragen. Es muss natürlich stark auf Multimasterfähigkeit geachtet 
werden, damit sich die beim Start nicht ins gehege kommen !

von Steffen (Gast)


Lesenswert?

Gleichzeitig können es nur 8 werden. Die aber wie gesagt willkürlich vom 
endnutzer zusammengesteckt.


Grüße

von John S. (linux_80)


Lesenswert?

Ist das Stecksystem schon fertig?
Denn man könnte in den Stecker die Adresskodierung integrieren, also was 
auf Platz 1 steckt hat die Adresse 0x50 usw. !?
Da es nur 8 geben soll, wären es nur diese 3 Bits, bzw Pins !?

Aja, wurde ja schon vorgeschlagen !

von Steffen (Gast)


Lesenswert?

Am Stecksystem kann man leider nix mehr ändern; Einen Pin könnte ich 
aber entbehren.

Dann könnte man es wie folgt machen:

Master selektiert einen Slave via "select-pin", der schaltet sein TWI 
auf eine festgelegte Adresse, empfängt seine endgültige Adresse, 
konfiguriert sich und dann kommt der nächste drann.

Das funktioniert beim einschalten wenn alle stecken. Ich kann mit dem 
bisherigen design des Stecksystems erkennen, dass ein neuer Slave 
gesteckt wurde -> der kriegt dann seine adresse mitgeteilt.


Sollte doch funktionieren ;-)

von Michael F. (jiro)


Lesenswert?

Wenn man die Slots schaltbar macht könnte der Master beim Start sie der 
reihe nach einschalten und über eine Standart Adresse ansprechen und 
ihnen die endgültige Adresse geben. Im laufendem Betrieb muß der Master 
dann nur schauen ob Module getauscht worden sind z.b. dursch abfragen ob 
ein Modul mit dieser Standart Adresse vorhanden ist

von Stefan (Gast)


Lesenswert?

...Mach doch einach an den "Slavekästchen" ein kleines Hexrädchen oder 
Mäuseklavier dran. Der Benutzer muss dann damit seine 8 Gerätechen nur 
noch eindeutig Adressieren und gut ist.

>Master selektiert einen Slave via "select-pin",
Naja, dann kannst du gleich allen Slaves eine einzige feste Adresse 
geben und jenachdem mit wem du kommunizieren willst deinen select-pin 
setzen.

von Andreas K. (a-k)


Lesenswert?

Steffen wrote:

> Am Stecksystem kann man leider nix mehr ändern; Einen Pin könnte ich
> aber entbehren.
> Master selektiert einen Slave via "select-pin",

Das heisst ja wohl, dass 1 Pin vom Stecker und 1 Pin vom Controller 
verfügbar sind. Dann ist der Weg für eine geografische Adressierung 
frei, d.h. der Pin vom Stecksystem liefert an einem Pin aller 8 Slots 
eine jeweils unterschiedliche Spannung, die vom Slave gemessen wird und 
damit jedem eine von 8 Adressen zuteilt. Jeder Slot hat also seine 
eigene Adresse.

Welchen Typ der Slave hat wird er ja wohl selber wissen. Wenn alle 
paarhundert Slaves eindeutig sein müssen, kann man ihnen einen weitere 
Nummer (nicht die I2C-ID) beim allerersten Mal zuteilen, die im EEPROM 
landet und die der Master dann abfragt.

So weiss der Master nach 8 Zugriffen wer alles wo drinsteckt und normale 
8-Bit Adressierung reicht aus. Wenn jeder der paarhundert Slave eine 
eigene I2C-ID hat, braucht er dafür etwas länger und 10-Bit Adressierung 
ist nötig.

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.