www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik TWI I2C Problem, mehrere mikrokontroller verbinden


Autor: René Rötzer (rene)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo alle zusammen,

ich möchte mehrere ATmegas miteinander kommunizieren lassen. Problem, 
sie sollen sich selbst automatisch addressieren. Sie sind in 
verschiedenen Geräten die ich mit einem Gerät ansteuer und sie sollen 
automatisch z.B.  die addressen 1-... bekommen. Hat jemand sowas schon 
gemacht? Oder ne Ahnung ob das überhaupt funktioniert?

Vielen Dank schonmal an alle

Autor: Bernhard S. (bernhard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo René,

Du kannst problemlos während des Betriebes die Slave-Adresse eines 
ATmegas ändern.

Ich hab's bei mir so gelöst:

Nach dem programmieren, bzw. Reset auf "Werkseinstellung" befindet sich 
der SLAVE auf einer definierten Adresse Bsp: 127.

Ich spreche ihn an und ändere seine Adresse nach meinen Wünschen.

Gruß

Bernhard

Autor: Metaller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Grundsätzlich ist das fast möglich ;) Einer muß schon eine fixe Adresse 
haben, der aus einem Pool die anderen Adressen verteilt. Und noch eins 
ist wichtig. Die uC's, die noch keine Adresse bezogen haben, dürfen nur 
nacheinander eingesetzt, bzw. eingeschltet werden, da die Neuen per 
General Call angesprochen werden. Sobald einer eine Adresse bekommen 
hat, kann er diese im EEProm abspeichern und muß nicht immer neu 
beziehen.

So könnte es gehen. Aber mal abwarten was die anderen dazu sagen, die 
ein bischen mehr Ahnung davon haben als ich.

Autor: Feadi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann man den µC nicht in den Master-Mode schalten und auf eine Adresse 
zugreifen, wenn keine Antwort kommt ist diese frei. Müsste doch gehen, 
oder?

Gruß, Feadi

Autor: FirePhoenix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo René
ich arbeite zur Zeit an einem Projektseminar, und darin werde ich auch 
eine TWI Verbindung aufbauen, könntest du mir evt. deinen Quellcode zur 
Verfügung stellen um mir das einarbeiten zu erleichtern?

Danke

Autor: Bernhard S. (bernhard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Kann man den µC nicht in den Master-Mode schalten und auf eine Adresse
>zugreifen, wenn keine Antwort kommt ist diese frei. Müsste doch gehen,
>oder?

Das funktioniert auch.

Musst nur anschließend die alle Adressen scannen, um zu erfahren, wo 
sich welcher Slave herum tummelt ;)

Bernhard


Autor: René Rötzer (rene)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen vielen Dank an alle, bin schon viel schlauer als vorher, nur das 
einzige Problem was ich jetzt noch habe ist, dass die Addressierung der 
Geräte an der Leitung so aussehen sollte:
1 - 2 - 3 - 4 - 5 - 6 -.....

das tut sie auch, wenn ich, wie Metaller schon gesagt hat, alle 
nacheinander einschalte. Das ist schon super, dank Euch. Wenn der Source 
fertig ist poste ich ihn, dauert aber noch ein bisschen.

Nun zu meinem Problem, wenn ich alle gleichzeitig einschalte siehts so 
aus (was auch logisch ist):

3 - 1 - 6 - 5 - 2 - 4 - ......

Gibt es eine möglichkeit die Adressen w2irklich der Reihe nach zu 
vergeben ohne sie nacheinander einschalten zu müssen? Ich dachte an 
sowas wie die antwortzeit zu messen und dem schnellsten die eins,.... zu 
geben. ist das überhaupt möglich? Oder ist die Zeitverzögerung zu 
gering? (liegen immer ca. 40cm Kabel dazwischen)

Vielen Dank schonmal

Autor: Reinhard Pölzleithner (carnival)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wird das ein Multimaster System oder werden die µC's als Slave 
betrieben?

Mein Vorschlag wäre, ähnlich wie bei TCP/IP, einen µC als "DHCP-Server" 
arbeiten zu lassen. Um gleichzeitiges Einschalten zu ermöglichen 
bräuchte man dann nur noch eine Kollisionserkennung.
Der µC der dann für die Adressvergabe zuständig ist hat halt dann eine 
fixe Adresse.

Ablauf:

Einschalten

->Alle wollen Senden ->Kollision erkannt
->jeder angeschlossenen µC generiert eine Zufallszahl die er dann
   als Wartezeit bis zum nächsten Sendeversuch nimmt

Nach der µC mit der niedrigsten Zufallszahl beginnt mit der 
Adressanfrage.
(voreingestellt ist eine bei allen µC's die gleiche Adresse)
Der "DHCP" µC sendet nun auf die Voreingestellte Adresse die neue
Adresse. Alle anderen µC's können diesen Datentransfer ignorieren.

Nun hat der erste mal seine Adresse und das Spiel beginnt von neuem.
Alle erkenne dass der Bus fei ist und beginnen zu Senden ...


Dieses Spiel wiederholt sich solange bis alle zugewiesen sind.
zum Abschluß kann man den "DHCP" nochmal eine Anfrage an die allgemeine
Adresse senden lassen. Wenn nichts mehr retour kommt dann sind alle 
angeschlossenen µC's konfiguriert.

Auf diese Weise kann man auch ein "HotPlugging" zusätzlich relativ 
leicht
realisieren. Wenn ein neuer µC angeschlossen wird wartet dieser zuerst 
mal bis der Bus frei ist und sendet nun seinerseits eine Anforderung an 
den "DHCP"

Die Reihenfolge der Adressen läßt sich hier natürlich nicht 
vorherbestimmen.

Mit einem Zusatz ginge es allerdings: wenn du jedem angeschlossenen µC 
noch eine "MAC Adresse" gibst.
Der "DHCP" speichert die MAC und die von ihm zugewiesene Adresse ab. 
Jedes mal wenn nun eine Anforderung kommt schaut dieser in seiner 
Tabelle nach ob er die MAC schon kennt und gibt demensprechend was 
zurück. Wenn nun ein "neuer" angeschlossen wird, bekommt der halt eine 
Adresse die noch nicht vergeben ist.

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.