2xArduino verbinden

Hallo !

Ich möchte im Rahmen eines kleinen Projekts zwei Arduinos miteinander kommunizieren lassen. Und zwar möchte ich, dass Arduino A auslesen kann, ob Arduino B 2 bits gesetzt hat, und dann soll Arduino A selber 2 bits setzen, welche dann von Arduino B ausgelesen werden.

Kurz zum Hintergrund: an Arduino B ist ein kleiner Servo angeschlossen. Eines der beiden Bits wird gesetzt, sobald sich der Servo links- oder rechtsherum soweit gedreht hat wie möglich und in Endstellung steht. Die beiden bits die Arduino A setzt, bestimmen die Richtung in die Arduino B den Servo dreht. Im Endfall soll Arduino A B quasi ‚regeln‘ und dafür sorgen, dass der Servo immer von einer Endstellung zur nächsten Fährt.

Nunja, die einfachste Möglichkeit für die Kommunikation wäre, wenn ich einfach 4 pins der beiden Arduinos miteinander verbinde (natürlich mit entsprechendem Widerstand, falls kein PullUp/PullDown vorhanden ist) und dann auf beiden Seiten unterschiedlich als Input oder Output definiere.

Meine Frage ist jetzt, ob dabei noch irgendwas beachtet werden muss ?
Gibt es da sonst noch etwas zu beachten ? Von wegen Massepotential oder galvanische Trennung ?
Die beiden Arduinos werden beide über USB bzw. Steckernetzteil betrieben und bilden ja damit eigendlich unterschiedliche Stromkreise.

Ach ich hab vergessen zu sagen, dass das hier die Arduinos sind von denen ich spreche:

http://www.arduino.cc/en/Main/ArduinoBoardDuemilanove

geht schon
Hallo,

Nunja, die einfachste Möglichkeit für die Kommunikation wäre,
wenn ich einfach 4 pins der beiden Arduinos miteinander
verbinde (natürlich mit entsprechendem Widerstand, falls kein
PullUp/PullDown vorhanden ist) und dann auf beiden Seiten
unterschiedlich als Input oder Output definiere.

Eine Kommunication über UART wäre natürlich auch möglich,
aber wen du nur je 2 Bist melden willst und die Digitalleitungen
eh hast, ist deine Lösung generell sinnvoll und einfach.

Da mußt du natürlich drauf achten, dass eine Seite immer Sender
(also Port als Ausgang programmiert) und die andere Seite
Empfänger ist (also als Eingang programmiert).

Nun ist es bei uC meist so, dass nach einem Power-On-Reset oder
sonstigen Reset die Ports erst mal hochohmig sind und somit
keinen definierten Pegel haben. Um da gleich von Anfang an
definierte Verhältisse zu haben, sind PullUp oder Pulldown
immer eine gute Idee.

Außerdem kann es beim Basteln (Programmieren) immer mal passieren,
dass man versehentlich was falsch mach oder das Prog. anders
reagiert, als man es sich gedacht hat. Um da Kurzschlüsse
(z.B. weil 2 Portsignale gegeneinander als Ausgang arbeiten)
zu vermeiden, sind Entkopplungs-R (z.B. 1k…10k) als Schutz
ganz nützlich. Manche uC sind da sehr empfindlich.

Wenn man längere Leitungen hat, sollte auch noch ein
Überspannungsschutz und evtl. RC-Tiefpass vorgesehen werden.

Bei noch längeren Leitungen dann Leitungstreiber und galv. Trennung
z.B. per Optokoppler (brauchst du aber aber natürlich nicht).

Wenn du die Bits auch sehen willst, dann klemme noch kleine
Kontroll-LED mit an die Ausgänge dran.
Da reichen auch 0,5…1mA allemal aus,um zu sehen ob ein Bit
gerade low oder high gemeldet wird.
Gruß Uwi

Meine Frage ist jetzt, ob dabei noch irgendwas beachtet werden
muss ?
Gibt es da sonst noch etwas zu beachten ? Von wegen
Massepotential oder galvanische Trennung ?
Die beiden Arduinos werden beide über USB bzw. Steckernetzteil
betrieben und bilden ja damit eigendlich unterschiedliche
Stromkreise.

Hallo Uwi,

Das mit den LEDs war ursprünglich der Plan.
Also LEDs, 1k Ohm Entkopplungswiderstände und 10k Ohn PullDown Widerstand.

Danke für deine Hilfe !

Hallo RedWraith,

kein Problem.

Das Stichwort heißt I2C-Bus.

Hierzu verbindest du die Pin 4 (SDA) und 5 (SCL) der beiden Arduinos miteinander.

Dazu jeweils einen 10K-Widerstand von SDA und SCL an +5V und haben fertig.

Ein Beispiel findest du hier

http://macherzin.net/article31-Arduino-Sensoren-Luft…

auch wenn es sich dort um die Verbindung eines Arduino mit einem Sensor handelt, ist das Vorgehen identisch.

Code-Beispiele findest du - nach Installtion der Wire-Bibliothek - unter Files > Examples, z.B.’:

#include

void setup()
{
Wire.begin(); // join i2c bus (address optional for master)
Serial.begin(9600); // start serial for output
}

void loop()
{
Wire.requestFrom(2, 2); // request 2 bytes from slave device #2

while(Wire.available()) // slave may send less than requested
{
char c = Wire.receive(); // receive a byte as character
Serial.print©; // print the character
}

delay(500);
}

Viel Spaß

godam

Nachtrag
Hallo,

hier noch weitere Links:

http://www.instructables.com/id/I2C-between-Arduinos/

http://digitalcave.ca/resources/avr/arduino-i2c.jsp

http://tronixstuff.wordpress.com/2010/10/20/tutorial…

Viel Erfolg

godam

Hallo,

Das mit den LEDs war ursprünglich der Plan.
Also LEDs, 1k Ohm Entkopplungswiderstände und 10k Ohm PullDown
Widerstand.

Da kannst du die LED mit Vorwiderstand auch gleich als PullDown
ansehen. Ein extra PullDown lohnt dann nicht mehr.
Das gilt für Gegentaktausgänge.
Hast du aber OpenDrain-Ausgänge, dann kannst du die LED auch
gleich mit Vorwiderstand als PullUp gegen +Ub schalten.

Gruß Uwi