Go Down

Topic: Kommunikation zwischen 2 "Arduinos" (Read 4794 times) previous topic - next topic

Nathax

#15
Oct 12, 2012, 10:10 pm Last Edit: Oct 12, 2012, 11:22 pm by Nathax Reason: 1
Ok, das mit der Synchronisation wäre eine Überlegung Wert, ich halte dieses Vorgehen allerdings nicht für sehr gut,
da ich vom PC an Arduino1 und von Arduino1 an Arduino2 mittels Serial die Daten sende und das deshalb lieber so machen möchte, dass er immer den gesamten Frame sendet.

Edit: Ich habe die Strings genommen, um die durch Serial.read erhaltenen Werte aneinanderzuhängen, also z.B. 2 5 5 zu 255.
Wie soll ich das ganze mit einem byte-Array für die Pixelfarben und der Übertragung in bytes machen?

Komisch ist ja auch, dass mit 9600-baud alles klappt (2FPS) und wenn ich die baud-Rate erhöhe, es nicht mehr funktioniert.

Nathax

Außerdem, wie soll ich die Kommunikation ohne Kommata durchführen?
Wenn ich die z.B. 0, 50, 0 habe, woher soll der Arduino wissen, dass 0500 dieser Farbe entspricht?
Andersrum: Wie könnte ich das machen um das so zu senden: 000050000?

pylon

Quote
Ok, das mit der Synchronisation wäre eine Überlegung Wert, ich halte dieses Vorgehen allerdings nicht für sehr gut, da ich vom PC an Arduino1 und von Arduino1 an Arduino2 mittels Serial die Daten sende und das deshalb lieber so machen möchte, dass er immer den gesamten Frame sendet.


Es geht ja gerade darum, immer den gesamten Frame zu senden, eine Synchronisation ist trotzdem notwendig.

Quote
Wie soll ich das ganze mit einem byte-Array für die Pixelfarben und der Übertragung in bytes machen?


Jedes Byte ist eine Pixel-Grundfarbe, 3 Bytes sind also ein ganzes Pixel.

Quote
Komisch ist ja auch, dass mit 9600-baud alles klappt (2FPS) und wenn ich die baud-Rate erhöhe, es nicht mehr funktioniert.


Solange Du SoftwareSerial verwendest, wundert mich das nicht.

Quote
Außerdem, wie soll ich die Kommunikation ohne Kommata durchführen?


Hast Du Dir den Code von mir angeschaut? Dort wird jeweils ein Byte pro Pixel und Farbe gesendet und Du hast überhaupt keinen Trennbedarf.

Nathax

Ich verwende kein Softserial und trotzdem klappt es nur bei 9600baud.
Bei deinem wird doch ein zusätzlicher Pin benutzt, für die Synchronisation, oder?

pylon

Quote
Bei deinem wird doch ein zusätzlicher Pin benutzt, für die Synchronisation, oder?


Das war eine Anmerkung, falls Du eine Synchronisation brauchst. Wenn Du sicherstellen kannst, dass die Arduinos immer in der richtigen Reihenfolge gestartet werden und jedes Byte wirklich über die serielle Schnittstelle geht, kannst Du Dir das auch sparen. Falls Du eine Synchronisation willst/brauchst, habe ich Dir eine rein softwaremässige Möglichkeit auch aufgezeigt. Liest Du meine Posts überhaupt?

Nathax

#20
Oct 15, 2012, 04:31 pm Last Edit: Oct 15, 2012, 04:49 pm by Nathax Reason: 1
Ja, sicherlich lese ich deine Posts, und die haben mir ja auch schon weitergeholfen.
In dem Punkt mit der Synchronisation haben wir uns einfach falsch verstanden.  :)
Ich werd deinen Sketch sobald wie möglich nochmal ausprobieren.
Ich muss das ganze dann aber umschreiben für PC-Arduino.

pylon

Quote
Ich muss das ganze dann aber umschreiben für PC-Arduino.


Was ist PC-Arduino?

Quote
Ich verwende kein Softserial und trotzdem klappt es nur bei 9600baud.


Wie verhält es sich denn, wenn es nicht klappt? Werden falsche Werte angezeigt oder bleibt das Ganze einfach stehen?

Nathax

Ich muss zunächst eine stabile Verbindung zwischen PC und Arduino herstellen, später kümmer ich mich dann auch um Arduino<->Arduino.

Wenn ich die baud-Rate erhöhe wird manchmal der falsche RGB-Wert eingetragen oder das erste Pixel nicht ausgefüllt.

JuergenR

Hallo,

bei serieller Übertragung bin ich immer für einen CRC-Check. Evtl. solltest Du diesen noch mit einbauen. Oft reicht zur Fehlererkennung ein einfaches XOR über alle Daten.

Grüße,
Jürgen

pylon

Quote
Wenn ich die baud-Rate erhöhe wird manchmal der falsche RGB-Wert eingetragen oder das erste Pixel nicht ausgefüllt.


Das wäre dann eben die fehlende Synchronisation. Der Arduino muss ja wissen, wo angefangen wird. Klar kannst Du einfach definieren, dass der Arduino warten muss und wenn der PC dann beginnt, Daten zu schicken, dann muss er einfach immer schön im Takt bleiben, aber solche ideale Zustände hast Du in der Praxis häufig nicht. Das ist genau der Grund, wieso ich den Trick mit den reservierten 255-Werten (0xFF) verwendet hätte. Den kannst Du schon vom PC aus verwenden.

Du solltest wahrscheinlich Deinen ganzen Code posten, damit wir ihn mal durchsehen können. Die grundsätzliche Kommunikation mit dem PC sollte auch bei hohen Baudraten zu keinen Problemen führen, bis 57600 hatte ich nie Probleme. Deshalb vermute ich ein Problem in Deinem Sketch.

Nathax

Ich hab momentan nicht viel Zeit.
Ich werde aber sobald wie möglich den Sketch posten, das könnte allerdings noch etwas länger dauern.

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy