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のドライバをパソコンにインストールします。
- ドライバをFTDI社からダウンロードする.
- ダウンロードしたフォルダを解凍する.
- FT232RLをパソコンと繋ぐと,ドライバを要求される.
- 先ほどのフォルダ(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などの番号を示します。
ビット | 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 : 複数プロセッサ通信動作。
ビット | 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。
ビット | 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から電源を取る場合は、以下のように回路を組めばシリアル通信ができます。簡単ですね!!
<< AVRでの割り込みの使い方へ | AVRのUSART機能を使う(実践編)へ >> |