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!
3-Bit Steckercodierung vom Slot scheidet aus? Notfalls analog mit 8 Pegeln, das braucht nur 1 ADC-Pin.
Anonsten kann der Tiny ja sich als Master versuchen und die 8 möglichen Adressen abklappern. Macht den I2C ein bischen komplexer weil Multimaster.
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 !
Gleichzeitig können es nur 8 werden. Die aber wie gesagt willkürlich vom endnutzer zusammengesteckt. Grüße
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.