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!
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
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 !
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 !
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 ;-)
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
...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.
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.