Reset beim Start serieller Kommunikation nervt !?

Scheint ja hier schon öfter mal zum Anlass gegeben zu haben, hier Fragen zu stellen ... Und es scheint ja auch einige Lösungen (mit Widerständen und Kondensatoren) zu geben, was diesen leidigen Zustand zur Laufzeit löst ... Problem wurde aktuell ab hier wieder mal diskutiert: http://forum.arduino.cc/index.php?topic=177280.msg1323213#msg1323213 Da der Bezug zum Thema dort wegen des nicht ganz passenden Topic-Names nicht ganz passt und ich da nicht den Fred weiter aufbohren will, hier halt ein neuer:

Wie in o.g. Fred schon beschrieben, ist mir das aufgefallen, nachdem ich mein eigenes Kommunikatios-Proggies mit Windoof gebastelt habe. Da passierte das nämlich eben nicht - in normalen Terminal-Programmen und im Serial-Monitor der Adruiono-IDE eben doch. Dauernd - was viele hier genervt hat und zu Basteleien angeregt hat, wie man das denn bittsehr wegbekommt ....

Offensichtlich also eine eher unerwünschte Sache ? Liest z.B. der Arduino NUR irgendwas, mag es nicht weiter tragisch sein, wenn er dabei gestört wird. Von etwaigem Datenverlust wie auch immer mal abgesehen ... Steuert der Arduino jedoch irgendwas und möchte / darf dabei nicht gestört werden, kann das ggf. erheblich unerwünschte Folgen bis zu massiven mechanischen Schäden (z. B. CNC-Steuerung) führen, die niemand haben will !

Der auslösende Effekt ist ganz offensichtlich ein Befehl des sendenden COM-Ports (euer Programm), an den (virtuellen) Pin des empfangenden COM-Ports einen s.g. Data-Terminal-Ready (DTR) zu senden, welcher NICHT über die TX/RX-Leitungen läuft, sondern separat ausgewertet wird. Seht dazu mal die Funktionalität einer RS-232-Schnittstelle hier: (ein bischen runtersrollen) http://de.wikipedia.org/wiki/RS-232#Verkabelung_und_Stecker

Für den UpLoad eines neuen Sketches seitens der Arduino-IDE ist das sicherlich wünschenswert und notwendig, einen definierten Zustand herbeizuführen. ABER: Es ist eher wenig wie o.g. hilfreich, wenn sich das Board bei reinem "Kontakt" resettet ! Besagten "DTR-Pin" scheinen wohl die meisten Terminal-Programme zu senden - warum auch immer ... als eine Art "Clear-Befehl" ? Nicht immer ist das wie hier benannt gewünscht.

Ich kann hier nur über meine Versuche mit Delphi (7) und der aktuellen VCL-Komponente "comport411f" sprechen. "Ziehe" ich die die visuelle Komponent "ComPort(Cport)" auf meine Form und nutze sie "so", wird offensichtlich immer ein DTR-Befehl bei der Initialisierung ausgelöst. In einem anderem Versuch mit einer rein nackten Klasse MegaStepper in eine NICHT-visuellen Form muss ich alles "von Hand" initialisieren und machen - da passiert das eben nicht !

Ich bastele mal zeitnah ein taugliches Terminal-Programm ala "Serial-Monitor"-Ersatz (leider nur für Windoof), wo man halt eben oben besagten Effekt aus- und einschalten kann und stelle das hier (wo ? ) zur freien Nutzung rein.

Ein kleines Problem scheint es ohne DTR-Initialisierung jedoch zu geben, was man nicht vergessen sollte:

Ohne DTR-Signal scheint der Arduino zu Kommunikationsbegin noch irgendwelche Zeichen im Empfangs- oder auch Sende-Puffer zu haben. Mir ist folgendes sehr unangenehm aufgefallen: - Ich sende eine Zeichenkette mit abschließendem CR, welche die auswertende Seite auf dem Arduino (mittels messenger) EINMALIG zum Start nicht versteht ! - Sende ich rein prophylaktisch (wie DTR) ein einzelnes CR vorweg, wird das mit meiner Auswertung als unbekannter Befehl erkannt. Daten-Schrott halt. - Sende ich weitere Befehle der Art, ist alles gut.

... also Obacht mit "Leichen" im Befehlszeilenspeicher !

Das Resetieren beim Start des Termnals der IDE ist teilweise nützlich, teilweise kann es auch zu Problemen führen.

Nützlich ist es insofern wenn man das Terminal als Debug-kanal verwendet startet der Arduino am Anfang.

Wenn Du es nicht willst kannst Du da nicht ein anderes Terminalprogramm zB auch Putty verwenden? Grüße Uwe

Nix für ungut Uwe, aber hast du ausser der Überschrift auch den Text gelesen ?

Also mich nervt es nicht. Während der Programmentwicklung und dem Debuggen über den Serial Monitor bin ich froh drum und wenn es stört (wg. notwendiger Verbindung zum PC zur Laufzeit) lässt es sich problemlos abstellen. Wo ist das Problem einfach einen 120 Ohm Widerstand zwischen Reset und Vcc zu stecken? Wenn man anstatt Vcc einen freien Pin nimmt, kann man das Verhalten sogar noch vom Arduino Programm aus steuern. Bei meinem (einzigen) Arduino Duemilanove nehme ich, wenn es denn mal nötig ist, einfach den besagten Widerstand und gut ist. Meine ganzen Selbstgebauten haben einfach einen Jumper auf der DTR Leitung. Es ist nun mal so, dass für einen AutoReset über die serielle Schnittstelle nicht viele Optionen zur Wahl standen.

@MaFu: Selbstverständlich kann man einen Reset auch auf diese Art und Weise unterbinden ! Diese 'Bastelei' muss ich aber vor jedem neuen Upload wieder entfernen .... und was ist, wenn es sich z.B. um was 'Fertiges' in einem Kasten handelt, den ich erst (umständlich) aufschrauben müsste ? Oder wenn es sich um einen 'Datensammler' handelt, der alles so gut wie es geht im RANM speichert, NICHT resettet werden soll und ich diese Daten einfach nur mal so BTW. abrufen will ? Oder ...., oder ..... Solange man einen Reset durch DTR am COM-Port softwaremäßig umgehen kann, sollte man dass doch auch tun / können - oder ?

Beim Upload aus der IDE ist das logo unverzichtbar. Aber warum muss das beim Monitor so sein ? Damit es jeder nach belieben machen kann wie er will, könnte man ja mal zur nächsten Version in den Einstellungen eine weitere Möglichkeit verpassen wie z.B. einen Check-Button ala "Send Reset on Start/Stop communication".

An wen müsste man sich denn da betreff Verbesserungsvorschlag wenden ?

hi,

An wen müsste man sich denn da betreff Verbesserungsvorschlag wenden ?

bei uns in wien würde man sagen: “an’s salzamt”

aber im ernst, die idee ist schon gut und richtig. beim upload natürlich immer resetten, aber im monitor sollte man’s ausschalten können.

gruß stefan

Danke Stefan, wenigstens einer versteht meine krausen Gedanken, die viele andere noch krauserere verhindern sollen, wenn .... :grin: Das eben erfolgte Daten-Einschreiben mit Rückschein an den MEGA hat dieser nicht korrekt quittiert .... 8)

:D Oder einfach VisualStudio/AtmelStudio mit dem VisualMicro Plugin verwenden. Da gibt es im SerialMonitor einen DTR Schalter.

Oh, fühlst du dich unverstanden ? Da müssen wir mal drüber reden :wink:

DTR heisst eigentlich Data Terminal Ready
und ist deshalb gern auf LOW, wenn keine Verbindung besteht.

On many operating systems, including Windows, the DTR line is held low while the serial port is unused and not being controlled by any applications.

Ich denke, TERWI’s Trick besteht darin, es einfach auf LOW zu lassen, und trotzdem zu senden, während “normale” Terminal-Programme das Signal HIGH ziehen. ( Gibt es eigentlich einen Reset, wenn man SerialMonitor beendet ??? )

Vorausgesetzt, der USB-Treiber und der 16U2 auf dem UNO bzw. früher der FTDI, oder die CP21xx der üblichen USBtoTTLSerial-Module geben die Signale (alle) weiter.

michael_x: Oh, fühlst du dich unverstanden ? Da müssen wir mal drüber reden ;)

Wer ? Ich ? Niemals ... 8)

Ich denke, TERWI's Trick besteht darin, es einfach auf LOW zu lassen, und trotzdem zu senden, während "normale" Terminal-Programme das Signal HIGH ziehen. ( Gibt es eigentlich einen Reset, wenn man SerialMonitor beendet ??? )

Korrekt erkannt ! 100 Arduino-Punkte ! Wenn, dann "zupfe" ich da nur für ca. 5ms nach HIGH. Da reicht schon. Das kann man auch wenn man will, zwischendurch mal machen - falls der arme Herr A. sich irgendwo verhaspelt hat und den Weg in die LOOP nicht mehr findet ..... !

Nein, der Monitor scheint das nur bei der Verbindungsherstellung zu machen. (... da flackert nix beim DisConnect)

M.E.n. scheint zumindestens scheint Billy Boy Gates da vor Jahrhunderten schon seine Probleme gehabt zu haben, um aus dem Ruder gelaufenen COM-Teilen wieder Gehör aufzwingen zu wollen und das ist bis heute "State of the Art". Wie gesagt: Benutze ich die grafische COMPort-Komponente (immer noch auf DELPHI hier...) , macht die das in den Untiefen der Selbstinitialisierung durch Auflegen in der Form auch selbst. Verwende ich die 'Nichtgrafisch', muss man alles per Hand machen ..... manchmal nicht so verkehrt - nicht nur beim proggen ..... 8) :roll_eyes: :astonished:

Verwende ich die 'Nichtgrafisch', muss man alles per Hand machen ..... manchmal nicht so verkehrt - nicht nur beim proggen .....

und wieder bestätigt sich, daß wir alle nerds sind...

gruß stefan

TERWI: Benutze ich die grafische COMPort-Komponente (immer noch auf DELPHI hier...) , macht die das in den Untiefen der Selbstinitialisierung durch Auflegen in der Form auch selbst. Verwende ich die 'Nichtgrafisch', muss man alles per Hand machen ..... manchmal nicht so verkehrt - nicht nur beim proggen ..... 8) :smiley-

Korrigiers doch einfach in der Komponente, dass sie standardmäßig die Finger von DTR lässt.