オンラインの多くのサンプルコードSerial.begin(9600)
では、セットアップブロックに行を追加しています。
Serial.begin()
公式ドキュメントの内容を調べると、ビット/秒のデータ転送を制御していると書かれています。
したがって、明らかな質問は、最高の転送速度である28800を使用してはどうですか?なぜ人々は9600に落ち着くのですか?ここでの制限は何ですか?
オンラインの多くのサンプルコードSerial.begin(9600)
では、セットアップブロックに行を追加しています。
Serial.begin()
公式ドキュメントの内容を調べると、ビット/秒のデータ転送を制御していると書かれています。
したがって、明らかな質問は、最高の転送速度である28800を使用してはどうですか?なぜ人々は9600に落ち着くのですか?ここでの制限は何ですか?
回答:
なぜ人々は落ち着くのですか?
それは十分に速いため、人々は落ち着きます。最も一般的な使用法は、debugginのために端末上にいくつかのものを印刷することです。9600ボーは、1秒あたり960文字、つまり1秒あたり12 x 80文字行です。どれくらい速く読むことができますか?:)
プログラムがバルクデータ転送にシリアルポートを使用している場合は、解決しないことを選択します。
制限は何ですか...
シリアルの制限は高いです。直接、プログラムで115200ボーを使用できますが、動作します。Arduinoターミナルでは最大115200が許可されますが、RealTermなどの他のプログラムではより高い実行が可能です。
ハードウェアシリアルは1 Mボーで実行されます。読んでみると、UARTを直接制御することで1Mまで使用していることがわかります。Bluetoothチップを介した送信などの用途では、高いボーレートの利点が得られる場合があります。ハードウェアシリアルインターフェイスを使用して、チップ間をわずかな距離で交換する場合、1 Mボーは完全に実行可能です。1 MHzのクロックレートで正常に動作するすべてのSPIおよびI2Cデバイスを考えてください。
距離が長くなると、ロジックレベル(プレーン0〜5V)の信号を使用すると、ノイズの問題が発生し始めます。より長い距離を使用するには、トランシーバを追加して堅牢な信号を提供します。通常はRS-232で、あまり一般的ではないRS-485です。RS-232を使用すると、数十フィートの距離でメガビットを実行できます。
マイクロプロセッサのクロック速度が実際の制限になります。ハードウェアUARTでは、プロセッサは10ビットごとに1バイトをUARTにロードする必要があります(N81の場合)。そのため、1 Mボーに達すると、16 MHzプロセッサがUARTにデータを供給し続けることが困難になります。新しいバイトは、160クロックティックごとに送信されます。これは非常に少ないコード行です。短いデータバーストの場合、そのレートを達成できます。メッセージは、UARTが制限になる前にプロセッサの速度が不足することです。
これはすべてHardwareSerialに適用され、ソフトウェアシリアルは非常に異なることに注意してください。
すべての興味深い回答に加えて、シリアル速度をXXXビット/秒に設定しても、ハードウェア上でXXXビット/秒を意味するわけではないことに言及する価値があります。
時計は、クォーツベースであっても、不完全でドリフトしやすいです。さらに、シリアルクロックは通常、2の累乗の事前除算器および(整数)カウンターを介して生成されるため、ベースクロック周波数ではすべての値を正確に取得することはできません。スタート/ストップビットの助けを借りて、非同期シリアル通信は、ある程度のクロックドリフトに耐えることができます。しかし、これには限界があります。
たとえば、ATmega328PAが1MHzで動作している場合、エラーの0.2%で9600b / sを達成できます。しかし、14400b / sでは、エラーは-3.5%です(実際には13900b / sで通信します)。28800b / sでは、エラーは+ 8.5%です(実際には31200b / sで通信します)。これらの数値はすべてATmega48PA-88PA-168PA-328PAデータシート、p200からのものです。
これは、2つの同一のデバイスが一緒に通信する場合(実際には同じ速度で通信するため)には問題ではありません。それは可能性が異なるデバイス間で通信する際に問題となります。
基本周波数を上げても、精度を大幅に向上させる必要はありません。たとえば、2MHzで上記と同じATmega328PAを実行しても、ほとんどの場合丸め誤差が原因であるため、より良い結果は得られません。ただし、1.8432MHzで実行すると、2400b / sから57.6kHzまでの非常に正確なbpsが得られます。
最も遅い速度(300)ではなく、一部のセットアップ(28800または115200)でも最終的に問題を引き起こす可能性のある転送速度を使用するのは一種の伝統だと思います。PCシリアルポート(ほとんどの場合FTDI232 USBアダプター)は、より高いレートに対応できますが、DIYハードウェアでは対応できない場合があります。したがって、9600 bpsは、コード例のある種の標準転送速度として確立されています。