当サイトのコンテンツはご自身の判断と責任においてご利用ください。営利目的の転載等は固くお断りします
更新2022/06/27
マイコンを使う上で避けて通れない技術の一つがシリアル通信で、その中でもUARTは最も基本的な通信技術です。
そして、マイコンを扱う方は、必ずマスターしなければならない技術の一つでもあります。
1バイト8ビットのデータを1本の電線で送るために、時系列にデータを分解して、1ビットづつ出力(送信)または入力(受信)します。
ほとんどのマイコンにUARTが内蔵されており、基板内IC間のデータ交換や、さらに他規格に変換してFA機器やPCのデータ交換に使用されます。
マイコンメーカーによっては、UARTという名称ではなく、独自の呼び方をするメーカーもあります。
例えば、PICはUSARTと呼び、ルネサス製H8マイコンはUART機能を持った内蔵デバイスのことをSCIといいます。
UARTは Universal Asynchronous Receiver Transmitter の略で、ナショナルセミコンダクター製の16450や16550A等のICが源流です。
今では、ICというよりはUARTという技術自体が業界標準となっています。
また、UARTがTTLやCMOSと同じ電圧レベルであるため、人によってはUARTのことをTTL通信・CMOS通信やロジック通信と呼ぶ方も時々います。
UARTは、調歩同期式と呼ばれる方式で送受信を行います。
これは、同期クロック線を不要にした方式で、送信・受信・GNDの3線のみで通信を行うことができます。
また、UARTはデーター垂れ流しが基本で、相手とタイミングを取ることは原則ありません。
どうしても、データー量やマイコンの処理の都合で、相手側デバイスと送受信のタイミングを取らなければならない場合は、タイミング用のデータを送受信してから本データをやり取りするか、マイコンのポートで「受信待ち」「受信不可」などの情報を交換します。
調歩同期式の通信フォーマットは以下のようになります。
(上図はPIC16F690でパリティビットがないフォーマット)
スタートビットからストップビットまでが1バイト分の転送です。
データの転送がない時は、Hレベル(5Vや3Vなどのマイコンの電源電圧)となっており、データを転送する時には、データを送る側TXが最初にスタートビットと呼ばれる一定期間Lレベルのパルスを出します。
受け側は、このスタートビット、つまり今までHレベルだったのがLレベル(0Vなど)になったことで、転送が開始されるということを認識します。
スタートビットが終了後、次に転送したい1バイトデータのビット0側(LSBともいう)から順に送信されます。
例えばビット0が1の場合は一定期間Hレベル(5V)、ビット1が0の場合はLレベル(0V)というようになります。
そして、1バイト(8ビット)を転送し終えた次に、パリティビットと呼ばれるエラーチェック用のビットが送られます。
パリティビットはマイコンが勝手に計算して付加するので、使用する側は意識する必要はほとんどありません。
尚、パリティビットはソフトウエアで付加するしないの設定ができますが、一部のマイコン(PIC16F690など)は、最初から付加しないと固定されていることもあります。(上記図はパリティビットなし)
パリティビットが送られた後は、ストップビットと呼ばれるHレベルのパルスが設定に応じて1ヶまたは2ヶ分の期間送られます。
当然ですが、各パルスの幅やパリティビット、ストップビットの数など、自分側と相手側のマイコンは同じ設定をしなければなりません。
これらは事前にプログラムで設定さえしておけば、マイコン内蔵のUARTハードウエアが設定した通り自動的行ってくれます。
UARTの配線構成は、送信・受信・GNDの3線が基本です。
ただし、UARTはマイコンのポートをそのままつないだような構成であるため、RS232Cや他の規格に比べノイズに弱く、遠距離の通信には向いていません。
通信速度や使用する周囲環境にもよりますが、同一基板内か、せいぜい30cm以下の通信用です。
以下回路図は、PIC16F690同士をUARTで接続する場合の配線例です。
基本的にはTX端子を、相手のRX端子に接続します。
同じ電源を使用していれば、単純にこれだけでお互い通信が可能です。
TXは送信、RXは受信という意味の略で良く使われるので覚えておきましょう。
マイコンによっては、TXDやRXDなど若干違う言い方をします。
回路図中のR1とR2は、電源を入れた瞬間の誤通信防止と、回路インピーダンスを下げてノイズレベルを下げるために付加します。
ソフトウエア等で電源オンの誤通信をフィルタリング出来る場合などは不要な事もありますが、信号線のノイズ耐性を上げるためにもできる限り入れましょう。
UARTには、決まったコネクタはありません。
機器内のデバイス間通信で使われることが多いため、直接配線でコネクタを必要としないか、適当なコネクタを使用することがほとんどです。
マイコンによってハードウエア構成が異なるので、UARTの設定内容と設定する方法も当然異なります。
よって、どのマイコンにも適用できる普遍的な設定手順・方法は存在しません。
使うマイコンのマニュアルを1つ1つ地道に確認しながら行います。
一般的には、以下のパラメータの設定が必須で、他にもそのマイコン特有の設定が追加で必要な場合があります。
PIC16F690系であれば、電子工作の知恵袋の PIC16F690汎用Cソースコードと汎用Cソースコード定義関数の説明 の利用で簡単に設定ができます。
参考にしてください。
・通信速度
良くある設定速度(ボーレート)は以下の通りです。(単位:bps=ビット/秒)
110bps、150bps、300bps、600bps、1200bps、2400bps
4800bps、9600bps、19200bps、38400bps
他には、115kbpsなどマイコンが対応している場合もあります。
最近は、マイコンの高速化に伴い115kbpsを使う場合が多くあります。
・データビット数
8ビットか7ビットかを選択します。
7ビットを選ぶことはほとんどありません。
一般的には、8ビットを設定します。
7ビットは昔のアスキーコードが7ビットで足りた時代の名残りのようなものです。
・パリティビット
1となっているビットの数が偶数個になるようにこのビットを付加する場合を偶数パリティ、逆に奇数となるようにするのが奇数パリティといいます。
ノイズなどによるデータ化けの判定のための付加ビットで、付加することでエラー判定しやすくなりますが、1ビット分転送時間が余分に必要となるため、使用環境が良好な場合は付加しません。
基本的には、事前に設定すればマイコンのUARTが自動で付加とエラー判定を行います。
・ストップビットの数
1ビットまたは2ビットを選択します。
2ビットを選ぶことはほとんどありません。
基本は、1ビットです。
UARTの使い方は、受け取る側の事情を考えずに、送信側は垂れ流しする使い方がほとんどです。(というか基本)
受信する側は、送信されてきたデータを次の送信データが来るまでに、必ず処理を終わらせて次に備えていなければなりません。
つまり、受信側マイコンは、割り込みを使うなりして、後でデータを処理するためにバッファーに移すか、即時処理するようにプログラムを作ります。
どうしても、処理時間の問題などで、やり取りのタイミングを取る必要がある場合は、本データを送ってよいか確認用のコードを先にやり取りしてから本データを送る方法や、送受信マイコンのポートを相互に接続しハンドシェイク制御することになります。