Raspberry + Arduino + LCD am I2C-Bus

Hallo zusammen,

bisher hatte ich einen Raspberry Pi 3 und einen Arduino Uno betrieben, welche über den I2C-Bus kommunizieren. Der Raspberry als Master und der Arduino als Slave. Alles funktioniert! Nun habe ich noch ein LCD (klick), welches auch am I2C-Bus betrieben werden soll. Der Arduino soll auf das LCD Daten schreiben.

Wenn ich nur den Arduino mit dem LCD verbinde, wird mein Text auf dem LCD angezeigt. Sobald ich aber auch den Raspberry an den Bus hänge (bisher nur ausgeschalteter Raspberry) funktioniert das LCD nicht mehr.

Es müsste doch möglich sein, mehr als 2 Geräte am Bus zu betreiben oder nicht? Wo ist das Problem? Die Verkabelung müsste passen? Muss ich noch etwas anderes beachten? Muss ich Softwaremäßig etwas anpassen?

Viele Grüße

Du hast ein Multimasterproblem. Sowas geht, ist aber nicht ganz trivial.
Hier gibt es Infos und hier auch.

Gruß Tommy

Vielen Dank für die Links! Daran habe ich auch schon gedacht. Aber warum tritt das Problem dann schon bei NUR ANGEKLEMMTEM Raspberry auf, OHNE dass der Raspberry mit Spannung versorgt wird?

Das heißt anders herum: Wenn ich meine Idee für den Anfang soweit umbaue, dass das LCD vom Raspberry beschrieben wird, hätte ich das Problem wohl nicht?! Dann gäbe es ja nur den Raspberry als Master und Arduino + LCD als Slave.

(Bin in der Hinsicht leider Anfänger...)

Elektronik (Prozessor) ohne Spannungsversorgung an einem versorgten Bus sollte man generell nicht machen, da dabei parasitäre Ströme die Signale stören und manches Mal auch die Hardware.

Gruß Tommy

berryfox:
Vielen Dank für die Links! Daran habe ich auch schon gedacht. Aber warum tritt das Problem dann schon bei NUR ANGEKLEMMTEM Raspberry auf, OHNE dass der Raspberry mit Spannung versorgt wird?

Das heißt anders herum: Wenn ich meine Idee für den Anfang soweit umbaue, dass das LCD vom Raspberry beschrieben wird, hätte ich das Problem wohl nicht?! Dann gäbe es ja nur den Raspberry als Master und Arduino + LCD als Slave.

(Bin in der Hinsicht leider Anfänger...)

Oder du verwendest den Arduino als Master. Dann bleibt das LCD wo es ist.

HotSystems:
Oder du verwendest den Arduino als Master. Dann bleibt das LCD wo es ist.

Ja das wird wohl am meisten Sinn machen! Gibt es eine einfache Möglichkeit, den Master und Slave einfach umzudrehen bzw. zu tauschen? Die Implementierung läuft ja schon, nur eben jetzt "falsch herum". Es sieht so aus, dass das eine Gerät einen kleinen Block Daten schickt und das andere Gerät einen kleinen Block Daten antwortet. Das umdrehen der Logik wird bei mir nichts kaputt machen.

Wenn der Arduino der Master wird, braucht der Pi eine I2C-Adresse. Unter dieser fordert der Arduino dann Aktionen vom Pi an. Das können Daten sein oder auch etwas zu tun, wobei ich dafür zumindest einen Bestätigungscode mit vorsehen würde.

Gruß Tommy

Ja, das weiß ich, auch die Vorgehensweise ist mir bekannt. Probleme macht mir grad die Implementierung. Im Arduino sieht mein Code jetzt so aus:

void setup() {
    Wire.begin();
}

void loop() {
    Wire.beginTransmission(0x25);
    Wire.write("hallo");
    Wire.endTransmission();
}

Aber was muss ich im Python auf dem Raspberry tun? Klar, ich lasse eine Schleife auf der Adresse 0x25 horchen und schicke bei einem eingehenden Signal wieder etwas zurück. Aber wie sieht der Code dafür aus? Nutzen werde ich wohl diese Methoden:

com.write_i2c_block_data()
com.read_i2c_block_data()

Im Arduino würde ich die empfangenen Daten wie folgt empfangen und auswerten?!

void receiveData(int byteCount) {

  while (Wire.available()) {
     // verarbeiten
  }

}

Mit Fragen zu Python auf RasPi bist Du hier wohl im falschen Forum.

Gruß Tommy