Go Down

Topic: Geschwindigkeit Serial.begin (Read 395 times) previous topic - next topic

Chris72622

Dec 04, 2013, 07:13 pm Last Edit: Dec 05, 2013, 08:39 am by Chris72622 Reason: 1
Hallo,

ich würde gerne eine Funktion programmieren um einem bestimmten Gerät per RS232-Befehl einen Factory-Reset zu verpassen.

Da das Gerät mit unterschiedlichen Baudraten arbeiten kann, habe ich vor, diesen "Befehl" nacheinander in unterschiedlichen Baudraten zu senden, so dass das Gerät in jedem Fall/ unter jeder Baudrate den Factory Reset ausführt.

Im Anschluss an den Factory-Reset startet das Gerät dann mit der vom Hersteller "vordefinierten" Baudrate (bereits getestet).

In diesem Zusammenhang frage ich mich nun, wie lange ein Arduino Mega brauchen würde um die Baudrate an einem seiner seriellen Anschlüsse zu wechseln.

Am Liebsten würde ich es gerne (in Pseudocode ausgedrückt) so machen:

Serial3.begin(blabla);
if(Serial3.begin ready) Serial3.println("RESET")
Serial3.begin(blabla);  // nächst höhere Baudrate
if(Serial3.begin ready) Serial3.println("RESET")
Serial3.begin(blabla);  // nächst höhere Baudrate
if(Serial3.begin ready) Serial3.println("RESET")
...

Wie macht "man" das am sichersten?

Gruß Chris
https://github.com/jeffThompson/DarkArduinoTheme

pylon

Quote
In diesem Zusammenhang frage ich mich nun, wie lange ein Arduino Mega brauchen würde um die Baudrate an einem seiner seriellen Anschlüsse zu wechseln.


Er macht das praktisch instantan, Du kannst also sofort nachdem Serial.begin() zurückkehrt, die Ausgaben auf die Schnittstelle machen.
Die Frage ist mehr, was macht Dein Gerät, wenn es extrem kurz hintereinander "Müll" in unterschiedlicher Geschwindigkeit kriegt. Ich würde schon deshalb eine vernünftige Zeit warten. Was vernünftig ist, hängt sehr vom verwendeten Gerät und den zu testenden Baudraten ab.

uwefed

Braucht es kein serial.end() vor dem neuerlichen Serial.begin() ?
Grüße Uwe

pylon


Braucht es kein serial.end() vor dem neuerlichen Serial.begin() ?


Nicht zwingend, ein Serial.flush() würde auch reichen, aber Du liegst richtig, dass das Ziel, die Bytefolgen auch wirklich an das Gerät zu schicken, sonst wahrscheinlich nicht erreicht wird. Für die korrekte Funktionalität von Serial.begin() ist ein Serial.end() nicht notwendig, aber es würde das komplette Leeren des Ausgabe-Puffers abwarten, was hier erwünscht ist.

Go Up