Serial.begin (): Warum nicht immer 28800 verwenden?

In vielen Beispielcode-Online-Benutzern wird die Zeile Serial.begin(9600) im Setup-Block hinzugefügt.

Wenn ich nachschaue, was Serial.begin() in der offiziellen Dokumentation steht, heißt es, dass es die Datenübertragung pro Bit steuert.

Also die offensichtliche Frage ist, warum nicht 28800 verwenden, die höchste Übertragungsrate? Warum geben sich die Leute mit 9600 zufrieden? Was ist die Einschränkung hier?

Kommentare

  • Zu Ihrer Information: Der höchste Wert, den ein an USB-Unterstützung angeschlossenes Arduino hat, ist tatsächlich 115200, und 57600 ist häufig der zweithäufigste Baud sehen Sie.

Antwort

Warum tun Menschen erledigen?

Leute lassen sich nieder, weil es mehr als schnell genug ist. Am häufigsten wird nur ein Teil des Debuggins auf einem Terminal gedruckt. 9600 Baud sind 960 Zeichen pro Sekunde oder 12 x 80 Zeichenzeilen pro Sekunde. Wie schnell kannst du lesen? 🙂

Wenn Ihr Programm die serielle Schnittstelle für die Massendatenübertragung verwendet, würden Sie sich dafür entscheiden, nicht abzurechnen.

Was ist die Einschränkung …

Die Einschränkungen für serielle Dateien sind hoch. Direkt können Sie 115200 Baud in Ihren Programmen verwenden und es wird einfach funktionieren. Das Arduino-Terminal erlaubt maximal 115200, aber andere Programme wie RealTerm lassen Sie höher laufen.

Die Hardware-Serie läuft mit 1 M Baud. Wenn Sie herumlesen, werden Sie feststellen, dass Personen bis zu 1 M verbraucht haben, indem Sie den UART direkt steuern. Sie können von hohen Baudraten profitieren, wenn Sie beispielsweise über einen Bluetooth-Chip senden. Wenn Sie die serielle Hardware-Schnittstelle verwenden, um mit kurzer Entfernung von Chip zu Chip zu wechseln, ist 1 M Baud vollständig realisierbar. Denken Sie an alle SPI- und I2C-Geräte, die mit einer Taktrate von 1 MHz einwandfrei funktionieren.

Bei größeren Entfernungen treten bei Verwendung der Signalisierung mit logischem Pegel (normal 0 bis 5 V) Probleme mit Rauschen auf. Um größere Entfernungen zu verwenden, würden Sie einen Transceiver hinzufügen, um eine robuste Signalisierung bereitzustellen, üblicherweise RS-232 und weniger häufig RS-485. Mit RS-232 können Sie ein Mega-Bit in Entfernungen von 10 Fuß ausführen.

Die Taktrate des Mikroprozessors ist die eigentliche Grenze. Bei einem Hardware-UART muss der Prozessor ein Byte in den UART laden alle 10 Bits (für N81). Wenn Sie also 1 M Baud erreichen, ist es für den 16-MHz-Prozessor eine Herausforderung, den UART mit Daten zu versorgen. Alle 160 Takt-Ticks wird ein neues Byte gesendet, was sehr wenige Zeilen sind Für einen kurzen Datenstoß können Sie diese Rate erreichen. Die Meldung lautet, dass dem Prozessor die Geschwindigkeit ausgeht, bevor der UART das Limit erreicht.

Beachten Sie, dass dies alles für HardwareSerial , Software-Serien sind sehr unterschiedlich.

Kommentare

  • Bitte beachten Sie, dass 2M mit hw serial archivierbar ist, aber die Implementierung von arduino ‚ scheint zu langsam zu sein und viel Müll zu senden. Siehe atmega328p ds, um das magische Bit zu finden, mit dem Sie Ihre Geschwindigkeit verdoppeln können. Fügen Sie hinzu, dass 9800 Baud ein sehr alter Standard ist und viel von Sensoren verwenden diesen Wert standardmäßig, auch wenn sie für mehr wie xbee, gps und mehr konfiguriert werden können. Auch serielle über USB verwenden Auto-Baudrate-Aushandlung, die ausgewählte Baudate überschreiben kann, aber ich denke, wird nicht von Arduino verwendet (aber es kann auf Leonardo sein)
  • 9600 8N1 ist auch eine De-facto-Standardeinstellung. Viele Geräte mit serieller Schnittstelle werden mit dieser Einstellung geliefert und müssen konfiguriert werden, wenn eine andere Geschwindigkeit (oder Datenbits, Paritätsbit, Stoppbit) erforderlich ist.
  • “ es ist mehr als schnell genug “ – Gute Antwort, aber ich bin mit diesem Punkt nicht einverstanden. Die meisten Debug-Ausgabe-Implementierungen blockieren, daher ist es sehr wünschenswert, die Debug-Ausgabe so schnell wie möglich zu machen, um übermäßige Änderungen der Code-Ausführungszeit zu verhindern.
  • Wenn Sie ‚ Wenn Sie eine Massendatenübertragung durchführen, verwenden Sie im Idealfall ‚ SPI, richtig?

Antwort

Zusätzlich zu allen interessanten Antworten ist zu erwähnen, dass das Einstellen der seriellen Geschwindigkeit auf XXX Bits / s nicht unbedingt XXX Bits impliziert / s auf der Hardware.

Uhren – auch auf Quarzbasis – sind unvollständig und unterliegen einer Drift. Da der serielle Takt normalerweise durch einen Zweiteiler-Vorteiler und einen (ganzzahligen) Zähler erzeugt wird, kann bei einer Basistaktfrequenz nicht jeder Wert genau erhalten werden. Mit Hilfe der Start / Stopp-Bits kann die asynchrone serielle Kommunikation gegenüber einer gewissen Taktdrift tolerant sein. Dies hat jedoch Grenzen.

Wenn Ihr ATmega328PA beispielsweise mit 1 MHz läuft, können Sie 9600 b / s bei 0,2% des Fehlers erreichen. Bei 14400 b / s beträgt der Fehler jedoch -3,5% (tatsächlich Kommunikation bei 13900 b / s). Und bei 28800b / s beträgt der Fehler + 8,5% (tatsächlich Kommunikation bei 31200b / s).Alle diese Zahlen stammen aus dem Datenblatt ATmega48PA-88PA-168PA-328PA, S. 200 .

Dies ist kein Problem, wenn zwei identische Geräte miteinander kommunizieren (da tatsächlich mit gleicher Geschwindigkeit kommuniziert wird). Bei der Kommunikation zwischen verschiedenen Geräten kann ein Problem auftreten.

Durch Erhöhen der Basisfrequenz muss die Genauigkeit nicht wesentlich verbessert werden. Wenn Sie beispielsweise denselben ATmega328PA wie oben bei 2 MHz ausführen, erzielen Sie keine besseren Ergebnisse, da diese hauptsächlich auf Rundungsfehler zurückzuführen sind. Wenn Sie es jedoch mit 1,8432 MHz betreiben, erhalten Sie sehr genaue Bit / s von 2400 b / s bis 57,6 kHz.

Antwort

Ich denke, es ist eine Eine Art Tradition, eine Übertragungsrate zu verwenden, die nicht die langsamste ist (300), aber auch nicht die, die bei einigen Setups (28800 oder sogar 115200) Probleme verursachen kann. Die serielle PC-Schnittstelle (meistens ein FTDI232-USB-Adapter) kann höhere Raten verarbeiten, Ihre DIY-Hardware jedoch möglicherweise nicht. 9600 bps haben sich also als eine Art Standardübertragungsrate für Codebeispiele etabliert.

Antwort

Zurück im Nebel der Zeit Der „Goldstandard“ für Remote-Tastaturen (mit einem Telefonmodem und Teletypen, wenn Sie sich daran erinnern) betrug 9600 Baud und war zunächst nur über eine dedizierte Telefonleitung erreichbar. Die Zeit vergeht langsam; technologische Fortschritte schnell; und das Gedächtnis bewegt sich noch langsamer als die Zeit (wie es scheint). Wir können routinemäßig, zumindest über mehrere Meter, mit einigen Größenordnungen schneller als 9600 Baud kommunizieren. Was einst als Goldstandard galt, ist nicht mehr Gold, sondern wird immer noch als Standard angesehen.

tl; dr: Es ist Geschichte, keine Technologie.

Antwort

Ich denke, der Hauptgrund, warum Leute 9600 die meiste Zeit verwenden, ist, dass dies die Standard-Baudrate in der Arduino-IDE ist. Schnellere Datenraten können auch unzuverlässig sein, wenn das serielle Signal einen langen Weg zurücklegen muss – obwohl ich keine Ahnung habe, warum dies als optimale Geschwindigkeit ausgewählt wurde.

Antwort

Reaktionszeit des Menschen

Weil den seriellen Monitor stoppen kann, wenn Ihr Arduino auf den Port schlägt wird von Benutzern zu 100% benötigt, und die maximale Übertragungsgeschwindigkeit ist erforderlich. kleiner als 100% der Zeit.

9600 Baud ist ein Kompromiss zwischen „leicht zu tötender außer Kontrolle geratener Prozess“ und „ärgerlich langsam“.

Kommentare

  • 100% hey … interessant;)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.