Ich Plane ein Projekt anfänglich mit zwei UNO's eine Daten Verbindung per I2C die später ausgeweitet werden soll auf mehrere Geräte.
Die Verbindung selber per Tutorial war nun kein Problem.
Nun möchte ich eigentlich das der Master nicht ständig den Slave fragt, sondern wenn man am Slave einen Knopf drückt, das er den Befehl an den Master sendet.
Ich habe mal ein Beitrag gelesen, die Kommunikation zwischen zwei Master, aber dies schein nicht zu Funktionieren:
Wie gesagt, das ist nur ein Test, der Später ausgebaut werden soll.
du könntest den Slave über eine separaten Leitung den Master Informieren dass er neue Daten hat. Bekommt der Master das Signal - fragt er den Slave mit I2C ab. Zumindest machen das viele I2C ICs so.
3 Schritte zurück könnte man sich auch die Frage stellen, wozu man überhaupt 2 Microcontroller braucht und das ganze nicht auch auf einem Microcontroller unterbringt.
Dies hat was mit Modelleisenbahn zutuen, vom Steuerpullt bis zum kontakt sind es 3 bis 4 Meter und da mehrere Einheiten die Gesteuert werden sowie am Pullt, I2C soll die vielen Kabel ersetzen.
Wenn man ein viertes Kabel ansetzt können dann alle Slave über dieses Kabel den Befehl am Master geben?
a)
Warum man I2C als Kabelbus über so eine Entfernung nutzen will, werde ich nie verstehen wollen.
CAN, RS485,... das alles sind Bus Systeme die man mit Kabel nutzen könnte.
b)
wenn mehrere Slaves die gleiche Signalleitung nutzen dann muss der Master halt auch beide Slaves abfragen obs was neues gibt.
Das ist natürlich Unsinn!
I2C ist immer eine Master zu Slave Kommunikation!
Das ist natürlich Unsinn!
I2C ist immer eine Master zu Slave Kommunikation!
I2C kann per Definition den Multimaster Betrieb.
Also auch jederzeit die Rollen tauschen.
Mit AVRs, wie dem UNO kann es Probleme geben, wenn mehr als 2 Master am Bus hängen, aber das ist bei dir nicht der Fall.
Also sehe ich da kein Problem!
Habe selber solche Konfigurationen im Dauerbetreib laufen.
Also: Machbar!
Der Schaltplan in dem Verlinkten Beitrag ist natürlich falsch!
Kann kaum funktionieren, da die Pullup fehlen.
Schon gar nicht über 4m. Was sowieso für I2C eine riesige Entfernung ist.
Bist Du auch zu ChatGPT übergelaufen? Was ist da Unsinn?
I2C tauscht bei jeder Kommunikation die Rollen. Normalerweise sind alle Teilnehmer Slaves, bis einer etwas übertragen möchte und als Master den Bus taktet.
Wenn bei dir 2 Slaves mit einander quatschen können, dann frage ich mich, und du solltest das auch tun, in welchem Kopf da was durcheinander geraten ist.
Merke:
Die Master Slave Definition ist glasklar spezifiziert.
Ebenso der Rollenwechsel!
Ein IC wie z.B ein PCF8574 der lt. Datenblatt eben nur ein Slave ist?
Wobei ... ist dies jetzt irgendwie relevant?
Der TO hat ein Multimaster Beispiel das er nicht zu laufen bekommt.
Ist es jetzt Ziel ihm eine funktionierende Kommunikation vorzuschlagen oder worum gehts jetzt noch?
Ich habe mich jetzt einmal dem verlinkten Artikel gewidmet. Er enthält 2 gravierende Fehler, nämlich die fehlenen Pullups und die ungültige Slave Adresse 0. Kein Slave darf auf einen General Call antworten.
Danke, du sprichst mir aus der Seele. Ich Denke fast das das Thema I2C ich abhaken kann, auch nur wegen der Entfernung, 485 sieht da schon anderes aus, müsste mal ein Script ausdenken, wie es vereinfacht ist den Serial jedem Slave zu deklarieren.
Was ich gesehen hab ist ein ESP32 mit wlan, so spart man sich gleich die Verkabelung, da wäre die frage ob es sich Lohnen würde und wie schnell die Übertragung ist, gut viel kommt nicht rüber aber soll ja auch nicht Sekunden dauern.
Leider hat der ESP nur 3V, würde dies reichen von dort aus in einem ATTiny zugehen um mit einem Servo zu steuern?
besorg dir einen makerfreundlichen ESP32 (sprich mit USB) und probier es aus.
Der Servo bekommt eine Betriebsspannung von 6V und ein Sensorsignal vom ESP32 - das wird schon klappen (habe sowas nur mit einem ESP8266 - der läuft auch nur mit 3V3). Den ATTiny sehe ich nicht notwendig.