Fast OT: Arduino mit Debian Linux anquatschen

Hallo zusammen,

wie geschrieben, fast Off-Topic, aber vielleicht kann mir doch jemand helfen.

Ich versuche mit dem Arduino seriell zu kommunizieren - das klappt auch sehr gut - nur nicht unter debian lenny.
Die Kommunikation an sich macht mir da allerdings wenig Probleme - der Arduino z.B spuckt per Serial.println("hallo Welt") "hallo Welt" aus und Debian erhält es auch. Wenn ich allerdings etwas von Debian aus an den Arduino sende, kann er es nicht verarbeiten, weil er resettet.

Ich hab mich jetzt schon überall im Internet umgeschaut und weiß, dass es am DTR/DSR Handshake liegt, allerdings weiß ich nicht, wie ich diesen Handshake verhindern kann. Unter DOS (Windows 7 Eingabeaufforderung) wird ein derartiger Handshake nicht durchgeführt, wenn man z.B. echo hallo Welt >> COM1 eingibt.

Ich hab auch schon verschiedene Konfigurationen per stty ausprobiert, leider ohne Erfolg. Einmal hab ich es durch Zufall hinbekommen, allerdings war es nach einem neustart wieder weg und nicht reproduzierbar.

Habe mir auch schon den Playgroundartikel (Arduino Playground - LinuxTTY) durchgelesen, leider funktioniert dieser auch nicht. ein" echo -n "hallo" >> /dev/ttyS0 " löst immer einen reset aus. ttyS0 ist korrekt, da Debian in einer VM läuft und so der Arduino über die Host-Pipe durchgeschleift wird. Auch Arduino-IDE funktioniert fehlerfrei unter Debian.

Was mach ich falsch?

EDIT:
eine (seltsame) Lösung ist das verhindern des Resets per Hardware.
Siehe:Preventing Arduino fromauto-reset when Port opens\closes

Trotzdem wäre mir eine Softwarelösung lieber.

Kannst Du das Uebertrgungsprotokoll (Handshake) einstellen. Moeglichkeiten sind: gar keines, Xon/Xoff und Hardwareprotokoll. Du musst auf "keines" stellen.
Das Protokoll ist dazu da, dass der Sender nur sendet wenn der Empfaenger bereit ist zu empfangen.
Gruesse Uwe

Hi Uwe,

das ist genau das, was ich versuche. Ledier bislang erfolglos.
Wenn ich mir auf die schnelle ein c-Programm zusammenschnitze, dass in etwa folgendes macht:

1.Port öffnen
2.Hallo an Port senden
3.Port schließen

funktioniert alles einwandfrei, wenn ich warte, bis der Arduino nach dem reset durchgestartet hat (etwa 1.1 Sekunden).
Aber ich will diesen reset umgehen, damit ich ihn auch ohne zu warten füttern kann.

das simple C-Program sieht etwa so aus:

#include <fcntl.h>
#include <stdio.h>

int fd;

int main()
{
   fd = open("/dev/ttyS0", O_RDWR);
   char buf[] = "hallo";
   
   usleep(1100000); // wartet 1.1 Sekunden
   write (fd, buf ,sizeof(buf));
   close(fd);

   return 0;
}

wie bekomm ich unter Linux die Flusskontrolle / Handshake ausgeschaltet?

man stty

Alles andere müsste ich jetzt auch da raus suchen! Hoffe das ist genug Hilfe zur Selbsthilfe.

Gruß,
Lupus