入力なしとバイナリのゼロの間の混乱を避けますか?


10

FMを介してデータを送信しているとします。0は2Hz、1は4Hzです。入力がない場合、送信機は2Hzを送信しています。受信したバイナリをマイクロコントローラーのUARTポートに供給した場合、マイクロコントローラーはデータなしと0をどのように区別しますか?

これは、たとえばASCII文字を送信する場合に関係します。次の文字列を想定します。

01000110 01101111 01101111 01100010 01100001 01110010

スペースを追加したので、これを次のように変換できます。

フーバー

しかし、マシンでは、文字列は次のようになります。

010001100110111101101111011000100110000101110010

バイナリを受け取っているときにASCII文字がめちゃくちゃにならないように、これらの「スペース」をどのように作成しますか?


5
ここでUARTは、それを解決する方法であるリンクを。zouはUARTポートにフィードするので、stopおよびstartビットはzouも送信するはずです。
Bence Kaulics

ダイアグラムがよくわかりません。「開始ビット」は単にゼロであるように見え、これは私の問題を再実証します。たとえば、文字列が000 01111000 000の場合、01111000と00111100の違いをどのようにして知るのでしょうか。
2015年

2
@アレンフ、送信していないときはバスはアイドル状態であり、論理的に高い状態に保たれます。パッケージの送信を開始するとき、最初のビットは常に論理的にローです。これは開始ビットです。次に、8つのデータビットと、論理的に高いストップビットが続きます。マイクロプロセッサは、構成したバス速度を認識しているため、次のビットがいつ到着するかを認識しています。マイクロプロセッサとマイクロプロセッサに送信するユニットの両方を同じ伝送速度で構成する必要があります。
マティアスヨハンソン

回答:


16

マイクロプロセッサのUARTポートに何かを供給する場合、マイクロプロセッサが何を供給しているかをマイクロプロセッサに理解させるには、UART通信プロトコルに従う必要があります。各ASCI文字を、スタートビット、ストップビット、場合によってはパリティビットを含むUARTパッケージに埋め込む必要があります。より多くの情報がUARTウィキペディアのページにあります

送信していない場合、バスはアイドル状態であり、論理的に高い状態に保たれます。パッケージの送信を開始するとき、最初のビットは常に論理的にローです。これは開始ビットです。次に、8つのデータビットと、論理的に高いストップビットが続きます。マイクロプロセッサは、構成したバス速度を認識しているため、次のビットがいつ到着するかを認識しています。したがって、たとえば、2つのゼロを隣同士に送信することが可能です。マイクロプロセッサとマイクロプロセッサに送信するユニットの両方を、同じ伝送速度、パリティ、およびストップビット数で構成する必要があります。


2
重要な点は、構成されたストップビット数が最小ではなく、最大であることです。非同期シリアルラインのアイドル状態は、拡張ストップビットです。したがって、無線 0でアイドリングする必要がある場合、簡単な答えは、無線を駆動する前にUART出力を反転させて、0でアイドリングし、1が開始であることです。次に、UARTで処理する前に受信データを反転します。
RBerteig

6

これには多くのテクニックがあります。マンチェスターコーディングまたはNRZコードを確認することをお勧めします。または8b / 10bコーディング。これは、8データビットごとに10ビットシーケンスにマップし、クロック回復、エラー訂正、および送信の開始と終了を検出するために使用できる特別な「カンマ」シンボルを可能にします。


5

すべてのASCII文字は8ビット幅です。ASCIIテーブルで確認できます。ASCII文字のHEX値がFFを超えない(1111 1111)

UARTは一度に複数のデータバイト(8ビット)を受信することはできません。また、8ビットデータの他に、STOPおよびSTARTビット、PARITYなどがあり、これらは以下の図で確認でき、UART通信パケットを形成します。

ここに画像の説明を入力してください

したがって、ASCII文字をUARTに送信すると、それらは1つずつ送信され、文字列が作成されます。文字列が単なる文字の配列であることはすでにご存じでしょう。


4
asciiは8ではなく7ビットですが、アラインメントを簡単にするために8ビットに入れるのが一般的です。他の文字セットやutf8も使用できます。
2015年

0

Mattiasが説明したように、UARTプロトコルは時間ベースの非同期プロトコルです。ビット間の境界を定義するのは、スタートビットの開始からの時間です。したがって、マイクロコントローラはビ​​ットを「サンプリング」します(N+half)/baudrate、スタートビットが開始してから数秒後にます。ハーフビットはビットの真ん中でサンプリングするためのものであり、レシーバとトランスミッタの間のタイミングに半分のビットの違いがある可能性があります(違いは累積的であり、最悪の場合は通常、各フレームの最後のビットで発生します)ただし、構成によっては8ビット幅になるとは限りません)。それを機能させるための鍵は、ボーレートを備えたレシーバーとトランシーバーをできるだけ近くに置くことです。

したがって、マイクロコントローラーは各ビット間の時間をカウントして、各ビットがフレーム内のどこにあるかを認識します。次のキャラクターは次のフレームに入ります。各フレームが終了すると、マイクロコントローラーは次のフレームを自動的にリッスンし始めるので、次の開始ビットが来ると、新しいフレームを開始する必要があることがすでにわかっています。これが文字の分離方法です。

さらに、UART受信マイクロコントローラーに送信するために2つの周波数を実際に必要としないことも付け加えておきます。FSKとして2つの周波数の代わりに、単一の周波数をOOKとして使用できます。モールス符号のように、トランスミッタとして搬送波スイッチャとレシーバとして単一の周波数検出器のみが必要なため、スペクトル効率が高く、回路がはるかに単純です。一般に、ボーレートよりもはるかに高い周波数のキャリアを使用することを忘れないでください。そうしないと、単純な回路では正しく動作しません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.