ATmega328のUSARTの使用方法(準備)

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動

概要

PCとATmega328の間で、データの送受信を行う方法としてシリアル通信がある。
ATmega328では、シリアル通信が簡単にできるUSARTという機能があるので、USARTの知識と使用方法を記載する。


シリアル通信とUSART

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

PCとATmega328の間で通信するために、両者を接続するものが必要である。
ここでは、FT232RL(USB−シリアル変換モジュール)を使用して、ATmega328のUSART機能でシリアル通信を行う。

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

FT232RL(USB−シリアル変換モジュール)
USB miniBケーブル(FT232RLとPCを接続するケーブル)
FT232RLのドライバ(PCにインストールする)

FT232RLのドライバのインストール方法
  1. ドライバをFTDI社からダウンロードする。
  2. ダウンロードしたドライバを解凍する。
  3. FT232RLをPCに接続すると、ドライバを要求されるので、解凍したドライバのフォルダ(CDM ○○ WHQL Certified)を選択する。
  4. ドライバのインストールが完了する。


FT232RLは、USBポートから電源をとるか、外部から電源を供給するかをジャンパにより電源(Vcc)を選択することができる。
その他に、I/Oピンの電圧を3.3[V]またはVccかをジャンパにより選択することができる。

  • ジャンパ1(J1)
    • 1 - 2間をショート : I/Oの電圧を3.3[V]にする
    • 2 - 3間をショート : I/Oの電圧をVccにする


  • ジャンパ2(J2)
    • 有り(ショート) : USBポートから電源を取る(Vcc = 5[V])
    • 無し(オープン) : 外部から電源を取る(Vcc = 3.3 - 5[V])



USARTの設定

USARTのレジスタ設定

UCSRnA(USART Control and Status Register n A)は、シリアル通信の制御や状態を表すためのレジスタである。

UCSRnA : USART制御/状態レジスタA(n : 0 or 1)
ビット 7 6 5 4 3 2 1 0
名前 RXCn TXCn UDREn FEn DORn UPEn U2Xn MPCMn
  • RXCn  : USART受信完了フラグ
    未読データがあるときに1がセットされる
  • TXCn  : USART送信完了フラグ
    新規データがないときに1がセットされる
    送信完了割り込みを発生できる
  • UDREn : USART送信データレジスタ空きフラグ
    送信バッファが新規データを受け取る準備ができたら1がセットされる
    送信バッファ空き割り込みを発生できる
  • FEn  : フレーミング異常フラグ
    受信バッファ内の次の文字にフレームエラーが発生したときに1になる
  • DORn  : データオーバーラン発生フラグ
    データオーバーランを検出すると1になる
    受信バッファが満杯のときに、新たにスタートビットを検出するとデータオーバーランが発生する
  • UPEn  : パリティ誤りフラグ
    受信バッファ内の次のフレームにパリティエラーが発生したときに設定される
  • U2Xn  : 倍速許可
    非同期通信のみ有効で、1を設定すると分周比を16から8にする
    結果として、通信速度が2倍になる
  • MPCMn : 1を設定すると、マルチプロセッサ通信モードが有効になる
    アドレス情報を含まない受信データが無視される


UCSRnB : USART制御/状態レジスタB(n : 0 or 1)
ビット 7 6 5 4 3 2 1 0
名前 RXCIEn TXCIEn UDRIEn RXENn TXENn UCSZn2 RXB8n TXB8n
  • RXCIEn : 受信完了割り込み許可
    UCSRnAの受信完了フラグ(RXCn)での割り込みを許可する
  • TXCIEn : 送信完了割り込み許可
    UCSRnAの送信完了フラグ(TXCn)での割り込みを許可する
  • UDRIEn : 送信データレジスタ空き割り込み許可
    UCSRnAのUDREnでの割り込みを許可する
  • RXENn  : 受信許可
    USART受信を許可する
  • TXENn  : 送信許可
    USART送信を許可する
  • UCSZn2 : データビット長選択2
    USCRnCのUCSZn1とUCSZn0ビットと組み合わせたUCSZn2は、送受信フレームのデータのビット長を設定する
  • RXB8n  : 9ビット長のデータを受信したときの9番目のビット
  • TXB8n  : 9ビット長のデータを送信するときの9番目のビット


UCSRnC(USART Control and Status Register n C)は、パリティやストップビットの設定を行うためのレジスタである。

UCSRnC : USART制御/状態レジスタC(n : 0 or 1)
ビット 7 6 5 4 3 2 1 0
名前 UMSELn 1 - 0 UPMn 1 - 0 USBSn UCSZn 1 - 0 UCPOLn
  • UMSELn 1 - 0 : USART動作選択
    00(非同期動作)
    01(同期動作)
    10(予約)
    11(マスターSPI)
  • UPMn 1 - 0  : パリティ選択
    00(禁止)
    01(予約)
    10(偶数パリティ許可)
    11(奇数パリティ許可)
  • USBSn  : 送信時に挿入されるストップビットのビット数を指定する
    0 : ストップビットは1ビット
    1 : ストップビットは2ビット
  • UCSZn 1 - 0  : データビット長を選択
    UCSZn2と組み合わせて使用する
    000(5bit)
    001(6bit)
    010(7bit)
    011(8bit)
    111(9bit)
    他は予約
  • UCPOLn  : クロック極性を選択する
    1 : 同期モード
    0 : 非同期モード


送信のタイミング

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

例えば、下記のように記述すれば、送信が有効になると変数dataを送信することができる。

 while(!(UCSR0A & 0b00100000));  // 送信が有効になるまで待つ
 UDR0 = data;                      // データを送信する


受信のタイミング

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

例えば、下記のように記述すれば、受信が有効になるまで待機し、データを受信することができる。

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


ボーレートの設定

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

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

例えば、ATmega328のクロック周波数が1[MHz]、ボーレートを2400として通信する場合、UBRR0レジスタは下記の値となる。



FT232RLとATmega328の接続方法

USBポートから電源を取る場合は、以下のように回路を組めばシリアル通信ができる。

ATmega328 USART Ready 1.jpg