Go Down

Topic: 2 Arduinos über uart kommunizieren lassen... (Read 230 times) previous topic - next topic

knautschkissen

Oct 11, 2017, 07:19 pm Last Edit: Oct 11, 2017, 07:29 pm by knautschkissen
Hallo
Ich verzweifel an einer vermeintlich simplen Aufgabe...
2 Arduinos über die TX/RX Pins kommunizieren zu lassen...
Ich habe hier einen Uno und einen Micro.
Der Uno so programmiert dass er jede Sekunde eine Zahl sendet mit
Code: [Select]

void setup() {
Serial.begin(9600);

}
String st="";
void loop() {

st="255";
st+='\n'; 
Serial.print(st);
delay(1000);
st="0";
st+='\n'; 
Serial.print(st);
delay(1000);
}

Am Laptop kann ich die Zahl empfangen.
Der Micro soll diese empfangen, die Pin 13 LED kurz flashen lassen wenn Daten zum Lesen da sind und eine LED entsprechen der Zahl dimmen...
Code: [Select]

byte Value;
void setup() {

Serial.begin(9600);
Serial.setTimeout(5);
pinMode(9,OUTPUT);
pinMode(13,OUTPUT);
pinMode(0,INPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
 if (Serial.available())
{
  digitalWrite(13,HIGH);
  string = Serial.readStringUntil('\n');
  Value = string.toInt();
 analogWrite(9,Value);
}
digitalWrite(13,LOW);
}

Sende ich ihm das vom Laptop aus klappt das Prima.
Versorge ich die beiden mit einem 5V Netzteil,  und verbinde den Tx des Uno mit dem Rx des Micro und die Massen passiert.........Garnichts......
Habe sogar am Tx des Uno eine LED dran die auch Flackert wenn er sendet und wenn er nicht sendet dauerhaft an ist.

Wo liegt mein Denkfehler...


HotSystems

Vermutlich im Sketch.
Warum zeigst du uns den nicht.
Wo hast du die Verbindung angeschlossen ?

Poste den Sketch in Code-Tags.
I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

knautschkissen

Vermutlich im Sketch.
Warum zeigst du uns den nicht.
Wo hast du die Verbindung angeschlossen ?

Poste den Sketch in Code-Tags.

Hab ich schon aktualisiert.
habe selbst erst zu spät daran gedacht dass ihr den Sketch braucht...

HotSystems

Der Uno hat Probleme wenn du D0 und D1 (RX und TX) verwendest, da hier auch der USB-Serialwandler angeschlossen ist.
Das solltest du ändern und evtl. SoftwareSerial verwenden.
I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

knautschkissen

Davon habe ich schonmal gehört, daher hatte ich die beiden Arduinos nicht über USB versorgt. Würde das ganze mit z.B. 2 Micros so funktionieren wie ich mir das vorstelle?

Ich hatte gehofft dass ganze ohne softwareserial zu lösen, da das eigentliche projekt dass ich damit realisieren will mit einigen Servos und Schrittmotoren im Modellbaubereich meiner Meinung nach recht Rechenintensiv ist und ich vermeiden möchte dass durch softwarekommunikation sichtebare Einschränkungen in den flüssigen Bewegungen der Schrittmotoren auftreten.

Aber probieren werde ich es auf jeden fall.

ElEspanol

Ich würde erstmal den String Kram rausschmeißen. Readuntil blockiert und den ganzen String Funktionen traue ich sowieso nicht übern Weg.
Wenn ich mit seriell rumspiele, nehme ich zum testen immer Megas

HotSystems

Davon habe ich schonmal gehört, daher hatte ich die beiden Arduinos nicht über USB versorgt. Würde das ganze mit z.B. 2 Micros so funktionieren wie ich mir das vorstelle?
Das hat mit der Spannungsversorgung nichts zu tun.
Da kommt dir einfach der Baustein (IC) in die Quere, der onBoard die Wandlung vornimmt.

Und ja, mit den Micros sollte das funktionieren.
Da ist die UART getrennt herausgeführt.

P.S.
Ich habe schon größere Projekte mit der SoftwareSerial gelöst und konnte keine Probleme feststellen.
I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

uwefed

#7
Oct 11, 2017, 10:32 pm Last Edit: Oct 11, 2017, 10:35 pm by uwefed
Beim Arduino MICRO sind die Pins TX und RX die Schnittstelle Serial1 (Serial EINS). Die USB Schnittstelle ist Serial (Serial ohne Zahl).

Quote from: https://www.arduino.cc/en/Reference/Serial
The Arduino Leonardo board uses Serial1 to communicate via TTL (5V) serial on pins 0 (RX) and 1 (TX). Serial is reserved for USB CDC communication. For more information, refer to the Leonardo getting started page and hardware page.
Grüße Uwe

uwefed

Der Uno hat Probleme wenn du D0 und D1 (RX und TX) verwendest, da hier auch der USB-Serialwandler angeschlossen ist.
Das solltest du ändern und evtl. SoftwareSerial verwenden.
Zwischen ATmega und USB-Serial Wandler (auf viele Arudinos außer solchen mit ATmega32U4 und SAM) sind auf den RX und TX Leitung 500 Ohm Widerstände verbaut. Darum kann eine Serielle Schnittstelle eines anderen Gerätes an TX und RX direkt angeschlossen werden und bekommt "Vorfahrt". Das blockiert die Komunikation zwischen dem ATmega und dem USB-serial wandler und damit dem PC. Wenn die Verbindung zum PC nicht notwendig ist funktioniert das. Zum Upladen eines Sketches über USB muß das Gerät an TX/RX entfernt werden.

Grüße Uwe

HotSystems

#9
Oct 11, 2017, 11:55 pm Last Edit: Oct 12, 2017, 08:24 am by HotSystems
Zwischen ATmega und USB-Serial Wandler (auf viele Arudinos außer solchen mit ATmega32U4 und SAM) sind auf den RX und TX Leitung 500 Ohm Widerstände verbaut. Darum kann eine Serielle Schnittstelle eines anderen Gerätes an TX und RX direkt angeschlossen werden und bekommt "Vorfahrt".
Ok, wenn das dann funktioniert.
Wir wissen aber nicht, welchen der TO einsetzt.
I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

uwefed

Wir wissen aber nicht, welchen der TO einsetzt.
laut ersten Beitrag einen UNO als Sender und einen MICRO als Empfänger.
Grüße Uwe

HotSystems

laut ersten Beitrag einen UNO als Sender und einen MICRO als Empfänger.
Grüße Uwe
Ja, stimmt natürlich. Hatte ich mal eben verdrängt. ;)
I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

combie

Quote
Ich verzweifel an einer vermeintlich simplen Aufgabe...
2 Arduinos über die TX/RX Pins kommunizieren zu lassen...
Vielleicht ist ja I2C die bessere Wahl?
"Freiheit, Gleichheit, Brüderlichkeit!"
Aber wie gelangen wir zu den Tätigkeitswörtern?
Quelle: Stanislaw Jerzy Lec

uwefed

Vielleicht ist ja I2C die bessere Wahl?
Nein man muß am MIKRO nur die richtige serielle Schnitstelle nehmen, der hat nämlich 2 ( UART und USB).
Grüße Uwe

Go Up