Mehrere Arduinos via I2C verbinden

Hallo Leute, ich brauche mal wieder euer Wissen, ich habe vor für eine Schaltung 3 Unos via I2C zu verbinden. Jeder UNO soll werte auf ein 2x16 I2C Display ausgeben.
Jetzt meine Frage, ist es sinnvoller je UNO ein Display anzuklemmen, oder einen vierten UNO zu verwenden an den alle Displays angeschlossen werden, Sozusagen nur für die Grafische Ausgabe der werte?

Try to do your whole project with a single Arduino board, that is easier (a lot easier).
In most cases, with good code, you only need one Arduino board. Only in a few rare cases you need more Arduino boards.

Sometimes displays can be set to a different I2C address, sometimes it is possible to create software I2C buses. Here is an example with 30 I2C buses:

An das I²C Bussystem kannst du alles anschließen was der I²C Adressbereich hergibt.

dafür wissen wir zu wenig über dein Projekt, sehen keine schematische Darstellung, keine Sketche von dir, keine Entfernungen der Unos. Alles im trüben.

Auf Verdacht würde ich so wenig Microcontroller wie möglich nehmen. Meist reicht einer.

Solange das nur 1 I2C Bus ist, an dem alle Geräte hängen, ist es ziemlich egal, wo die Displays an den Bus angeschlossen werden. Es stellt sich allerdings die Frage, wie lang dieser Bus wird, ob er noch ordentlich funktionieren kann. Und ob jedes angeschlossene Gerät eine eindeutige Adresse erhalten kann.

Zudem kommtnoch hinzu, wenn es ein I2C-Multimaster werden soll. Das wird nicht einfacher.

2 AVR als Master ist kein Problem.
Der dritte ist da schon eher mit Sorgen belastet.

Aber machbar ist das alles.....
z.B. in dem ein AVR dazu verdonnert wird die gesamte Kommunikation zu übernehmen.

Ich habe nicht geschrieben, dass es nicht geht.

Und ich habe geschrieben wie es geht!

Also:
min. 2te mal...
Ich werde dich nicht mehr zitieren.

th-239827384

Dann sage ich es: Zwei Master am Bus werden nie zuverlässig funktionieren (mit der Arduino Wire library).

Kannst du das begründen?

1 Like

Beide Master sollten den Rückgabewert von Wire.endTransmission() und Wire.requestFrom() überprüfen und dann mit Wiederholungsversuchen beginnen. Aber wie viele Wiederholungsversuche reichen aus?

Ich habe noch keinen guten Code gesehen. Wenn ich versuche selbst etwas zu machen, dann scheitert es mit einem kleinen Stresstest.

Es hat viele Jahre gedauert, die Fehler aus der Wire-Bibliothek für den Arduino Uno für den normalen Gebrauch zu entfernen. Ich weiß nicht wie gut es ist um Kollisionen im Bus zu erkennen.

Es ist ganz einfach: Fortgeschrittene Arduino-Programmierer meiden einen I2C-Multi-Master-Bus. Nur Anfänger halten es für eine gute Idee :wink:

(via Google Translate)

Wiederholen muß nur der unterlegene Master.

Das sollten sie immer!

Bis es geklappt hat.

Ah, ja.....

Du weißt es nicht, ist auch ein Grund....

Ich sage es dir:
Die I2C Bus Arbitrierung wird von der TWI Einheit abgehandelt.
Wire sieht das gar nicht.

Ich bin also Anfänger.....
Danke, für das Vertrauen.

1 Like

Das Timeout hat die Wire library für den Arduino Uno verbessert. Theoretisch sollte es fast funktionieren.

Das twi_writeTo() gibt einen Fehler an Wire.endTransmission() zurück, das ebenfalls diesen Wert zurückgibt. Daher gibt der Rückgabewert von Wire.endTransmission() an, ob die Daten erfolgreich übermittelt wurden.

Hier geht es um die Wire library für die AVR boards. Das ist meines Wissens die einzige Bibliothek, in der der Arduino zuverlässig als Slave arbeiten kann. Ein Multi-Master I2C Bus geht noch einen Schritt weiter.

Es war ein Scherz. Ik hat dich getrollt.

(via Google Translate)

Gegen welches Problem ist ein Timeout überhaupt notwendig?

Hauptsächlich Busfehler.

Das gilt dann aber nur für schlecht konstruierte Busse? Da wird jede Kommunikation unsicher, egal auf welchem Bus.

Nicht nur.
I2C ist recht störempfindlich.

Richtig: Man kann das recht sicher gestalten.
Aber: Man weiß nicht wie stark der nächste EM Impuls sein wird.

Bei Anwendungen die unkritisch sind, ist alles egal. Einmal Strom weg und wieder dran, dann funktioniert das wieder.

Aber bei SensorNodes im Hochgebirge, wo man nur per Hubschrauber ran kommt, wird man mehr Aufwand betreiben wollen.

z.B. Suchtipp: "I2C frei takten"