I2C Kommunikation 2er Arduinos

Hallo ich bin neu hier keine Ahnung ob ich das richtig mache mit einem Thema verzeiht mir also bitte fehler.

Ich programmiere gerade eine Steuerung für meinen Traktor. Der Arduino Mega hat ein 7 zoll Touchscreen und ist der Master. In der Motorhaube des Traktors sitzt ein weiterer Arduino UNO und misst Drehzahl und 9 Temperatursensoren. mein Plan ist es das der Mega den UNO nach Daten fragt und der diese dem Mega dann schickt so dass dieser sie auf dem Touchpad anzeigen kann. Ich habe schon so einiges probiert aber ich bekommes es nicht hin das er die Werte nacheinader schickt. Hatt jemand eine Idee wie sowas funktioniet oder kann mir I2C allgemein verständlich erklären dafür wäre ich sehr dankbar.
Code kann ich keinen zeigen da alles was ich programmiert habe Müll ist und nicht geht.
Danke
mfg

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

Die kleinen ATmega Arduinos funktionieren nur schlecht als I2C Slaves. Am besten funktioniert es, wenn der Master Daten Byte für Byte von einem Arduino Slave abholt.

Ah ok wusste ich nicht
Wie geht das wenn ich fragen darf ?

Da sagt meine Erfahrung etwas Anderes aus. Bei mir hat das problemlos funktioniert.

Hier ein Beispiel, wie ein Nano als Slave von einem NodeMCU (ESP 8266) gesteuert wird.

Gruß Tommy

Das Schreiben auf einen Slave funktioniert ganz gut, nur sollen jetzt Daten vom Slave übertragen werden - requestFrom().

Ja und? Mache ich dort doch auch.

Gruß Tommy

Auch das ist kein Problem!

Was aber sicher Sorgen macht, sind die Entfernungen und Störungen.
I2C ist das falsche Mittel.

RS485, CAN, LIN alle diese sind besser geeignet.

Tuns bestens, als I2C Master und als Slave.

Multimaster:
Die Probleme fangen erst mit dem dritten Master an.

Mich würde interessieren wie du darauf kommst, dass die AVR nicht funktionieren?

Ja, denke schon!

Der Wikipedia Artikel ist ganz gut
Dann gibts sogar eine Spezifikation
Eine Arduino Wire Doku
Wire Beispiele
usw.

Konkrete Fragen?

Kann ich mir nicht vorstellen dass du das stabil hinbekommst.
Fahrzeug: --> Nimm CAN als Bus.

Doch, ist es, wie in anderen Threads schon festgestellt. Es ist unbekannt, unter welchen Umständen das Lesen funktioniert oder versagt.

Lassen wir doch den OP die Kommunikation nach Tommys Muster implementieren und berichten.

Würde mich trotzdem interessieren....
Der Thread ist wohl an mir vorbeigegangen.

Bei mir läuft soviel I2C in reichhaltigen Kombinationen, dass ich sagen kann, dass das stabil ist, solange man sich an die Spezifikation hält.
Ausnahme: Mehr als 2 AVR als Master.
Dann muss man sich etwas strecken!

Nein ist es nicht.
Sobald man gegen die Spezifikation/Datenblätter verstößt, knallt es.

Fuß stampfen und Suchen an der falschen Stelle trägt zur Klärung nicht bei :frowning:

Welche ist die richtige?

der Wikipediaartikel ist irgenwie an mir vorbei werde ihn gleich durchlesen.

Die Verbindungslietung ist ca 5 meter denke ich geht das da indemfall nicht?

Never-ever. I²C klappt im Bereich bis 25, vielleicht 50cm in kontrollierter Umgebung, danach geht es schief (Störeinstrahlung, Leitungskapazität verschleift die Signalflanken).

Da dürften 5m wohl weit außerhalb der Spec sein.

Gruß Tommy

Ich habe von Nick Gammon gelernt: I2C - Two-Wire Peripheral Interface - for Arduino

Das sollte zwischen Mega und UNO problemlos funktionieren, wenn beide nebeneinander auf dem Schreibtisch liegen. Der Mega hat 10 kΩ PullUps eingebaut.

Da kommt der elektromagnetische Störenfried ins Spiel, der den I2C-Bus stört. Das wird leider nichts.

Stattdessen brauchst Du verdrillte und abgeschirmte Kabel und Hardware für Differenzsignale wie RS485 oder CAN-Bus, dann hat Dein Plan eine Chance.

Ah oke dann muss ich wohl auf CAN Bus.
Aber intressieren würde es mich schon wie die normale vorgehensweise ist bei I2C kommunikation.
Woher wüsste der Master welchen wert von Welchem sensor ist? Villeicht ist die frage auch dumm für erfahrene Programmierer aber mir ist das nocht nicht klar wie ich es machen müssen hätte.

Du müsstest Dir ein Schema überlegen, an welcher Adresse der "Sensor-Arduino" welchen Sensorwert zur Verfügung stellen will. Und damit ist dann auch beim Master klar, welchen Wert er liest.

Weil der Master den Slave fragt!
Woher sollte da ein anderes Ergebnis kommen?

Dank der "repeated start condition" kann auch keiner dazwischen quatschen.