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

提供: MochiuWiki : SUSE, EC, PCB

2026年1月10日 (土) 15:17時点におけるWiki (トーク | 投稿記録)による版 (USARTのレジスタ設定)

概要

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 または 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 または 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 または 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の値は、以下の式で計算することができる。
UBRR0=動 作 周 波 数ボ ー レ ー ト*161  (U2Xn = 0 の と き)
UBRR0=動 作 周 波 数ボ ー レ ー ト*81  (U2Xn = 1( 倍 速 許 可 ) の と き)

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


FT232RLとATmega328の接続方法

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