オンラインのサンプルコードの多くでは、セットアップブロックにSerial.begin(9600)
という行を追加しています。
公式ドキュメントでSerial.begin()
が何であるかを調べると、ビット/秒のデータ転送を制御していると書かれています。
つまり、明らかな質問です。最高の転送速度である28800を使用してみませんか?なぜ人々は9600に落ち着くのですか?ここでの制限は何ですか?
コメント
- USBサポートに接続されたarduinoの最高値は実際には115200であり、57600が2番目に一般的です。ボーが表示されます。
回答
なぜ人々は落ち着く?
十分に速いので、人々は落ち着きます。最も一般的な使用法は、debuggin用に端末にいくつかのものを印刷することです。 9600ボーは、毎秒960文字、つまり毎秒12 x80文字の行です。どれくらい速く読むことができますか? 🙂
プログラムがバルクデータ転送にシリアルポートを使用している場合は、解決しないことを選択します。
とは制限…
シリアルの制限は高いです。プログラムで直接115200ボーを使用でき、それは問題なく機能します。 Arduinoターミナルでは最大115200が許可されますが、RealTermなどの他のプログラムではそれよりも高く実行できます。
ハードウェアシリアルは1Mボーまで実行されます。周りを読むと、UARTを直接制御することで最大1Mを使用していることがわかります。ブルートゥースチップを介した送信などの用途では、高いボーレートのメリットが得られる場合があります。ハードウェアシリアルインターフェイスを使用して、わずかな距離でチップ間を交換する場合は、1Mボーが完全に実現可能です。 1MHzのクロックレートで正常に動作するすべてのSPIおよびI2Cデバイスについて考えてみてください。
長距離では、ロジックレベル(プレーン0〜5V)の信号を使用するとノイズの問題が発生し始めます。より長い距離を使用するには、トランシーバーを追加して堅牢な信号を提供します。通常はRS-232で、あまり一般的ではありませんがRS-485です。 RS-232を使用すると、10 “フィートの距離でメガビットを実行できます。
マイクロプロセッサのクロック速度が実際の制限になります。ハードウェアUARTを使用する場合、プロセッサはUARTに1バイトをロードする必要があります。 10ビットごと(N81の場合)。したがって、1 Mボーに達すると、16MHzプロセッサがUARTにデータを供給し続けることが課題になります。160クロックティックごとに新しいバイトが送信されます。これは非常に少ない行です。短いデータバーストの場合、そのレートを達成できる可能性があります。メッセージは、UARTが制限になる前に、プロセッサの速度が不足することです。
注:これはすべて
HardwareSerial 、ソフトウェアシリアルは大きく異なります。
コメント
- 2Mはhwシリアルでアーカイブ可能ですが、arduino 'の実装は遅すぎて大量のゴミを送信することに注意してください。速度を倍増させる魔法のビットを見つけるには、atmega328pdsを参照してください。また、9800ボーは非常に古い標準であり、多くのxbee、gpsなど、より多くのセンサーを構成できる場合でも、多くのセンサーがその値を標準として使用します。また、シリアルオーバーUSB使用の自動ボーレートネゴシエーションウィッチは、選択したボーデートをオーバーライドする場合がありますが、arduinoでは使用されていないと思います(ただし、leonardoで使用されている可能性があります)
- 96008N1も事実上のデフォルト設定です。シリアルインターフェースを備えた多くのデバイスはこの設定で提供され、別の速度(またはデータビット、パリティビット、ストップビット)が必要な場合は構成する必要があります。
- "それは十分に速いです"-良い答えですが、私はこの点にいくぶん同意しません。ほとんどのデバッグ出力の実装はブロックしているため、コード実行時間の過度の変更を防ぐために、デバッグ出力をできるだけ速くすることが非常に望ましいです。
- '一括データ転送を行っています。理想的には' SPIを使用しますか?