うしこlog
公開: 2013/08/16

AVRのUSART機能を使う(準備編)

今回の内容

 PC-マイコン間で、データの受け渡しをする方法としてシリアル通信があります。AVRでは、シリアル通信が簡単にできる「USART」という機能があるので、USARTの知識と使い方を説明していきます。

次回の内容

 次回は、実際にAVRとパソコンとの間でUSARTを使用したシリアル通信を実践していきます。

[追記] AVRに関する記事を以下の記事にまとめましたので、ぜひご覧ください。

AVRに関する記事

シリアル通信とUSART

シリアル通信で必要なもの

パソコンとマイコンを通信するために、両者をつなぐものが必要です。そのためにFT232RLがあります。AVRのUSART機能を使用してパソコンとシリアル通信をして、AVRとパソコンを接続するものがFT232RLとなります。

AVRのシリアル通信で必要なもの

  • FT232RL (USB−シリアル変換モジュール)
  • USBミニBタイプの線 (FT232RLとPCを繋ぐ線)
FT232RL(秋月より)
FT232RL

FT232RL

 FT232RLは、秋月で買えます。パソコンとつなげる前に、FT232RLのドライバをパソコンにインストールします。

  1. ドライバをFTDI社からダウンロードする.
  2. ダウンロードしたフォルダを解凍する.
  3. FT232RLをパソコンと繋ぐと,ドライバを要求される.
  4. 先ほどのフォルダ(CDM ○○ WHQL Certified)を選ぶ.

  これで完了。また、ドライバ要求をされたら、同じ手順をすることで要求されなくなるのでOK。
FT232RLは、USBから電源をとるか、外部から電源を供給するか、をジャンパにより電源(Vcc)を選択することができます。
その他に、I/Oピンの電源を3.3Vか、Vccかをジャンパにより選択することができます。

  • ジャンパ1 (J1)
    • 1-2間をショート:I/Oの電圧を3.3Vにする
    • 2-3間をショート:I/Oの電圧をVccにする
  • ジャンパ2 (J2)
    • 有り(ショート):USBから電源を取る(Vcc = 5V)
    • 無し(オープン):外部から電源を取る(Vccは3.3〜5V)

USARTの設定

USARTのレジスタ設定

以下の単語で○○nの "n"は、1や2などの番号を示します。

UCSRnA : USART制御/状態レジスタA
ビット 7 6 5 4 3 2 1 0
名前 RXCn TXCn UDREn FEn DORn UPEn U2Xn MPCMn

上記の表(UCSRnA表)が見られない方は、画像を用意したのでUCSRnA表の画像をご覧ください。

RXCn : USART受信完了フラグ。
 未読データがあるときに1がセットされる。

TXCn : USART送信完了フラグ。
 新規データがないときに1がセットされる。
送信完了割り込みを発生できる。

UDREn: USART送信データレジスタ空きフラグ。
新規データを受け取る準備ができたら1がセットされる。
送信バッファ空き割り込みを発生できる。

FEn : フレーミング異常フラグ。

DORn : データオーバーラン発生フラグ。

UPEn : パリティ誤りフラグ。

U2Xn : 倍速許可。非同期動作のときのみ有効。

MPCMn : 複数プロセッサ通信動作。

UCSRnB : USART制御/状態レジスタB
ビット 7 6 5 4 3 2 1 0
名前 RXCIEn TXCIEn UDRIEn RXENn TXENn UCSZn2 RXB8n TXB8n

上記の表(UCSRnB表)が見られない方は、画像を用意したのでUCSRnB表の画像をご覧ください。

RXCIEn : 受信完了割り込み許可。
 UCSRnAの受信完了フラグ(RXCn)での割り込みを許可する。

TXCIEn : 送信完了割り込み許可。
 UCSRnAの送信完了フラグ(TXCn)での割り込みを許可する。

UDRIEn : 送信データレジスタ空き割り込み許可。
 UCSRnAのUDREnでの割り込みを許可する。

RXENn : 受信許可。USART受信を許可する。

TXENn : 送信許可。USART送信を許可する。

UCSZn2 : データビット長選択2。
 USCRnCのUCSZn1,0ビットと組み合わせたUCSZn2は、
 送受信フレームのデータビット数を設定する。

RXB8n : 受信データビット8。

TXB8n : 送信データビット8。

UCSRnC : USART制御/状態レジスタC
ビット 7 6 5 4 3 2 1 0
名前 UMSELn1 UMSELn0 UPMn1 UPMn0 USBSn UCSZn1 UCSZn0 UCPOLn

上記の表(UCSRnC表)が見られない方は、画像を用意したのでUCSRnC表の画像をご覧ください。

UMSELn1,0 : USART動作選択
 00(非同期動作), 01(同期動作), 10(予約), 11(主装置SPI)。

UPMn1,0 : パリティ選択
 00(禁止), 01(予約), 10(偶数パリティ許可), 11(奇数パリティ許可)。

USBSn : 禁止ビット選択。

UCSZn1,0 : データビット長選択。UCSZn2と組み合わせて使う。
 000(5bit), 001(6bit), 010(7bit), 011(8bit), 111(9bit), 他は予約。

UCPOLn : クロック極性選択。同期動作のときのみ有効

送信のタイミング

送信のタイミングは、レジスタUCSRnAの5bit目であるUDREnに "1" がセットされると送信有効になります。

例えば、dataに送信したいデータを格納して、

while( !(UCSR0A & 0b00100000) );  //送信有効になるまで待って
UDR0 = data;        //受信したデータを送信

と書けば、送信有効になるとdataを送信することができます。

受信のタイミング

受信のタイミングは、レジスタUCSRnAの7bit目であるRXCnに "1" がセットされると受信有効になります。

例えば、dataに受信したデータを入れたいときは

while( !(UCSR0A & 0b10000000) );  //受信有効になるまで待って
data = UDR0;        //受信したデータを格納

と書けば、受信有効になるまで待機し、データを受信することができます。

ボーレートの設定

 USARTのボーレートの設定は、UBRR0(レジスタ)で設定します。動的に設定することもできます。

UBRR0の値は、以下の式で計算することができます。

  UBRR0 = 動作周波数 / (ボーレート * 16) - 1 

AVRの動作周波数を1[MHz]とし、ボーレートを2400として通信したいのであればUBRR0は、
 UBRR0 = 1000000 / (2400*16) - 1 = 25
とします。

FT232RLとATmega88の繋げ方

USBから電源を取る場合は、以下のように回路を組めばシリアル通信ができます。簡単ですね!!

FT232RLとATmega88の繋げ方
FT232RLとATmega88の繋げ方
<< AVRでの割り込みの使い方 AVRのUSART機能を使う(実践編)へ >>