Ich betreibe momentan ein I2C Multimaster System mit 2 Mastern. Der eine schickt dem anderen ein Datenpaket worauf der andere antwortet (oder auch nicht). Nun möchte ich das ganze auf 6 Geräte ausweiten. Funktioniert das noch so gut? Was ist wenn gerade ein Gerät sendet, wartet dann das andere oder versinkt alles im Chaos?
Theoretisch würde es auch im Slave/Master Betrieb funktionieren, jedoch empfängt jedes Modul von jedem anderen Modul Daten, quasi mehrere Vebrindungen in einem Netz und das ist mit einem Master ziemlich aufwendig (er müsste dann quasi alle Daten verwalten und an den jeweiligen Slave schicken). Auch ist die Größe und das Intervall der Datenpakete unterschiedlich.
Indem ich beide Arduinos mit ihrer ID den Bus joine.
Damit sind die Arduinos als Slave auf dem Bus. Wenn Du dann Daten schickst, nehmen sie temporär den Master-Status ein. Das ist aber kein richtiger MultiMaster-Modus, in einem solchen würde der Master nämlich zuerst auf dem Bus lauschen, ob Aktivität vorhanden ist. Finder er welche legt er sich für eine zufällige Zeit schlafen. Ansonsten sendet er auf dem Bus und lauscht dann, um Kollisionen zu detektieren. Bei Kollisionen legt er sich wieder für eine zufällige Zeit schlafen. Sonst ist er etabliert und schickt seine Befehle über den Bus.
Dieser echte MultiMaster-Mode funktioniert auch für 6 Geräte, Dein "jeder-macht-was-ihm-gerade-gefällt"-Modus hat bei 2 Geräten schon Probleme, bei 6 dürfte das grosse Chaos ausbrechen.
Okay, also ist das in meinem obigen link nur der "jeder-macht-was-ihm-gefallt" Modus? Gibt es eine Möglichkeit den richtigen Multimaster Modus anzusprechen?
Bisher hat das ganze zwar funktioniert, jedoch habe ich es auch noch nicht richtig überprüft (mit zwei arduinos). Ich habe ein protokoll gesucht mit dem jeder mit jedem reden kann, dachte da wäre der i2c Multimaster Modus für geeignet (ist er ja eigentlich auch, jedoch kann man ihn anscheinend nicht nutzen)
Nagut, ich habs mir mal durch den Kopf gehen lassen. Anscheinend muss ich mich wohl mit dem normalen Master Slave Modus zufrieden geben, sonst gibt es nachher nur Probleme.
In Kapitel 21.4 des ATmega328-Datenblatts ist der MultiMaster-Betrieb eines I2C beschrieben. Ich denke, die notwendigen Ergänzungen in der Wire-Bibliothek sind nicht allzu aufwändig, je nach Anforderungen müsste aber das API leicht angepasst werden.
Wenn Du mit dem Master/Slave-Modus einigermassen leben kannst, würde ich den empfehlen, Leute mit Erfahrung in dem Bereich sagen, dass der MultiMaster-Modus nie so zuverlässig hinzukriegen ist.