「ATmega328のUSARTの使用方法(準備)」の版間の差分
細 文字列「</source>」を「</syntaxhighlight>」に置換 |
|||
| 37行目: | 37行目: | ||
<center> | <center> | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ UCSRnA : USART制御 / 状態レジスタA<br>(n : 0 または 1) | |||
|- | |- | ||
! ビット !! 7 !! 6 !! 5 !! 4 !! 3 !! 2 !! 1 !! 0 | ! ビット !! 7 !! 6 !! 5 !! 4 !! 3 !! 2 !! 1 !! 0 | ||
| 45行目: | 45行目: | ||
|} | |} | ||
</center> | </center> | ||
<br> | <br> | ||
<center> | <center> | ||
{| class="wikitable" | {| class="wikitable" | ||
! | ! ビット名 !! 説明 | ||
|- | |||
| RXCn | |||
| USART受信完了フラグ<br>未読データがあるときに1がセットされる | |||
|- | |||
| TXCn | |||
| USART送信完了フラグ<br>新規データがないときに1がセットされる<br>送信完了割り込みを発生できる | |||
|- | |||
| UDREn | |||
| USART送信データレジスタ空きフラグ<br>送信バッファが新規データを受け取る準備ができたら1がセットされる<br>送信バッファ空き割り込みを発生できる | |||
|- | |||
| FEn | |||
| フレーミング異常フラグ<br>受信バッファ内の次の文字にフレームエラーが発生したときに1になる | |||
|- | |||
| DORn | |||
| データオーバーラン発生フラグ<br>データオーバーランを検出すると1になる<br>受信バッファが満杯のときに、新たにスタートビットを検出するとデータオーバーランが発生する | |||
|- | |||
| UPEn | |||
| パリティ誤りフラグ<br>受信バッファ内の次のフレームにパリティエラーが発生したときに設定される | |||
|- | |||
| U2Xn | |||
| 倍速許可<br>非同期通信のみ有効で、1を設定すると分周比を16から8にする<br>結果として、通信速度が2倍になる | |||
|- | |||
| MPCMn | |||
| 1を設定すると、マルチプロセッサ通信モードが有効になる<br>アドレス情報を含まない受信データが無視される | |||
|} | |||
</center> | |||
<br> | |||
<center> | |||
{| class="wikitable" | |||
|+ UCSRnB : USART制御 / 状態レジスタB<br>(n : 0 または 1) | |||
|- | |- | ||
! ビット !! 7 !! 6 !! 5 !! 4 !! 3 !! 2 !! 1 !! 0 | ! ビット !! 7 !! 6 !! 5 !! 4 !! 3 !! 2 !! 1 !! 0 | ||
| 64行目: | 86行目: | ||
|} | |} | ||
</center> | </center> | ||
<br> | <br> | ||
<center> | <center> | ||
{| class="wikitable" | {| class="wikitable" | ||
! | ! ビット名 !! 説明 | ||
|- | |||
| RXCIEn | |||
| 受信完了割り込み許可<br>UCSRnAの受信完了フラグ(RXCn)での割り込みを許可する | |||
|- | |||
| TXCIEn | |||
| 送信完了割り込み許可<br>UCSRnAの送信完了フラグ(TXCn)での割り込みを許可する | |||
|- | |||
| UDRIEn | |||
| 送信データレジスタ空き割り込み許可<br>UCSRnAのUDREnでの割り込みを許可する | |||
|- | |||
| RXENn | |||
| 受信許可<br>USART受信を許可する | |||
|- | |||
| TXENn | |||
| 送信許可<br>USART送信を許可する | |||
|- | |||
| UCSZn2 | |||
| データビット長選択2<br>USCRnCのUCSZn1とUCSZn0ビットと組み合わせたUCSZn2は、送受信フレームのデータのビット長を設定する | |||
|- | |||
| RXB8n | |||
| 9ビット長のデータを受信したときの9番目のビット | |||
|- | |||
| TXB8n | |||
| 9ビット長のデータを送信するときの9番目のビット | |||
|} | |||
</center> | |||
<br> | |||
UCSRnC (USART Control and Status Register n C) は、パリティやストップビットの設定を行うためのレジスタである。<br> | |||
<center> | |||
{| class="wikitable" | |||
|+ UCSRnC : USART制御/ 状態レジスタC<br>(n : 0 または 1) | |||
|- | |- | ||
! ビット !! 7 !! 6 !! 5 !! 4 !! 3 !! 2 !! 1 !! 0 | ! ビット !! 7 !! 6 !! 5 !! 4 !! 3 !! 2 !! 1 !! 0 | ||
| 88行目: | 132行目: | ||
|} | |} | ||
</center> | </center> | ||
<br> | |||
<center> | |||
{| class="wikitable" | |||
! ビット名 !! 説明 | |||
|- | |||
| UMSELn 1 - 0 | |||
| USART動作選択<br>00(非同期動作)<br>01(同期動作)<br>10(予約)<br>11(マスターSPI) | |||
|- | |||
| UPMn 1 - 0 | |||
| パリティ選択<br>00(禁止)<br>01(予約)<br>10(偶数パリティ許可)<br>11(奇数パリティ許可) | |||
|- | |||
| USBSn | |||
| 送信時に挿入されるストップビットのビット数を指定する<br>0 : ストップビットは1ビット<br>1 : ストップビットは2ビット | |||
|- | |||
| UCSZn 1 - 0 | |||
| データビット長を選択<br>UCSZn2と組み合わせて使用する<br>000(5bit)<br>001(6bit)<br>010(7bit)<br>011(8bit)<br>111(9bit)<br>他は予約 | |||
|- | |||
| UCPOLn | |||
| クロック極性を選択する<br>1 : 同期モード<br>0 : 非同期モード | |||
|} | |||
</center> | |||
<br> | <br> | ||
2026年1月10日 (土) 15:17時点における版
概要
PCとATmega328の間で、データの送受信を行う方法としてシリアル通信がある。
ATmega328では、シリアル通信が簡単にできるUSARTという機能があるので、USARTの知識と使用方法を記載する。
シリアル通信とUSART
シリアル通信で必要なもの
PCとATmega328の間で通信するために、両者を接続するものが必要である。
ここでは、FT232RL(USB−シリアル変換モジュール)を使用して、ATmega328のUSART機能でシリアル通信を行う。
ATmega328のシリアル通信で必要なもの
FT232RL(USB−シリアル変換モジュール)
USB miniBケーブル(FT232RLとPCを接続するケーブル)
FT232RLのドライバ(PCにインストールする)
FT232RLのドライバのインストール方法
- ドライバをFTDI社からダウンロードする。
- ダウンロードしたドライバを解凍する。
- FT232RLをPCに接続すると、ドライバを要求されるので、解凍したドライバのフォルダ(CDM ○○ WHQL Certified)を選択する。
- ドライバのインストールが完了する。
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)は、シリアル通信の制御や状態を表すためのレジスタである。
| ビット | 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を設定すると、マルチプロセッサ通信モードが有効になる アドレス情報を含まない受信データが無視される |
| ビット | 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) は、パリティやストップビットの設定を行うためのレジスタである。
| ビット | 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ポートから電源を取る場合は、以下のように回路を組めばシリアル通信ができる。
