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
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
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.
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
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
>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
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
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.
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.