Serielle Kommunikation mit Arduino

Hallo,

ich möchte einen Arduino Mega 2560 mit Xojo per serielle USB Schnittstelle ansteuern. Per Timer wird der Wert eines Sliders alle 200 msec zum Arduino gesendet. Dieser steuert etwas und sendet dann Daten zurück.
Das Problem ist, daß ich das unter Linux testen muss! Xojo ist aber nicht für Linux, sondern für Apple (und Windows) gemacht. Das hat zur Folge, daß wenn ich das gleiche Programm unter Windows starte, der Timer alle 200 msec feuert. Unter Linux (Mint, Tessa, Mate) funktioniert das nicht. Da muss ich runterregeln bis fast 1 sec…

Kann ich daran etwas ändern?

Was ist denn das Problem?
Feuert der Timer zu selten oder ungenau?

Falls ihr das MBS Plugin verwendet, probier mal TimerMBS aus.

Wie schon beschrieben. Wenn ich die App unter Linux starte blockiert der Arduino. Die Kommunikation erfolgt zwar auch mit 200 ms, erkennbar am Flackern der RX-LED, es wird aber anscheinend nur Müll übertragen, der nicht ausgewertet werden kann. Simuliere ich das Gleiche außerhalb von Xojo, dann funktioniert das rasend schnell. Ebenso gut funktioniert das, wenn ich mit Linux in einer virtuellen Maschine Xojo unter Windows10 betreibe. Dann wird USB/Com-Port durch die virtuelle Maschine geschleift.

Funktioniert, ist aber elend aufwändig, da man den Arduino nicht mehr (per USB) programmieren kann. Es muß jedesmal Win10 beendet, dann der Arduino neu programmiert, dann die Virt.Machine mit Win10 und Xojo gestartet werden.
Entweder wird programmiert oder der USB-Port (= Com-Port) wird unter Win10 genutzt, beides gleichzeitig geht nicht.

Deswegen muss das Programm zum Testen unter Linux laufen. Ich habe mir jetzt eine Weiche programmiert:
TargetWindows -> Timerperiod 200 msec
TargetLinux -> Timerperiod 1000 msec
Das funktioniert aber so schnarchlangsam, daß eine Regelung kaum noch möglich ist.
Gibt es keine bessere Lösung?

Wir können nicht in Deinen Code reinsehen. Ich habe auch nicht verstanden, was das Problem ist. Christian hat eine Frage gestellt, die Du noch nicht beantwortet hast:

Auch unter

kann ich mir nicht viel vorstellen. Warum mußt Du den Timer auf 1 Sekunde stellen?

Hallo, ich hatte oben geschrieben:
“Die Kommunikation erfolgt zwar auch mit 200 ms, erkennbar am Flackern der RX-LED, es wird aber anscheinend nur Müll übertragen, der nicht ausgewertet werden kann.”
Das heißt so viel wie: der Timer arbeitet mit 200 ms. Anscheinend auch nicht irgendwie unregelmäßig. Habe ich nicht überprüft. Aber ein Flackern mit 1 Hz und 5 Hz kann ich deutlich unterscheiden.

Warum mußt Du den Timer auf 1 Sekunde stellen?

Weil sonst, wie schon beschrieben, der Arduino einfriert, weil keine (auswertbaren) Daten geliefert werden. Erst ab ca. 900 ms funktioniert wieder alles einwandfrei.

In einem anderen Zusammenhang hatte ich so etwas schon einmal. Unter Windows funktionierts relativ gut unter Linux oder OSX eher schlecht. Das lag bei mir daran, dass der Atmega den internen Oszillator genutzt hat und nicht den externen Quartz. Der interne Oszillator schwingt nicht konstant und ist stark Temperatur abhngig.

This might be useful: https://forum.arduino.cc/index.php?topic=60568.0

Die Kommunikation ist auch nicht das Problem. Die ist immer zuverlssig.
Nur unter Xojo / Linux mu ich ewig warten, bis der Arduino antwortet.

  • alles identisch, nur durch die Virtuelle Box nach Win10 durchgeschleift (!) und es luft wesentlich schneller.

Was ich daran nicht verstehe ist, da alle anderen Programme diesen Fehler nicht erzeugen.
Mit dem Serial Monitor der IDE kann ich rasend schnell feuern.
NUR unter XOJO/Linux habe ich diesen Fehler.
(Ansonsten wre ich im Arduino-Forum)