www.mikrocontroller.net

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


Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Jiro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meinst so ne Art DHCP für I2C ja ?

Autor: Andreas K. (a-k)
Datum:

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

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: John Small (linux_80)
Datum:

Bewertung
0 lesenswert
nicht 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 !

Autor: Steffen (Gast)
Datum:

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


Grüße

Autor: John Small (linux_80)
Datum:

Bewertung
0 lesenswert
nicht 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 !

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Autor: Michael F. (jiro)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.