AVRのUSART機能を使う(実践編)
今回の内容
PC-マイコン間で、データの受け渡しをする方法としてシリアル通信があります。AVRでは、シリアル通信が簡単にできる「USART」という機能があるので、実際にUSART機能を使用してパソコンとAVRとの間でシリアル通信をしていきます。
前回と次回の内容
前回は、AVRとパソコンをFT232RLを用いて接続しました。また、USARTのボーレート設定方法についても説明しました。
次回は、AVRでリモコンを作成していきます。
[追記] AVRに関する記事を以下の記事にまとめましたので、ぜひご覧ください。
AVRに関する記事
パソコンとAVRでデータの送受信しよう
パソコンからデータを送信し、AVRでそのデータを受信してみましょう。また、確認として受信したデータをパソコンに送信してみます。
今回は、AVR-パソコン間での、通信速度(ボーレート)は2400とします。
パソコン側の設定
パソコン側からAVRにデータを送るにはどうしたらいいのでしょう。
答えは、Tera Termというソフトを使って、シリアル通信によりデータを送信します。
まず、Tera TermからTeraTermをダウンロード、インストールします。
インストールしたら、Tera Termを立ち上げます。
立ち上げたら、キャンセルを押します。その後、設定->シリアルポートを選びます。
その後、COMポート番号を選び、ビットレートやパリティなどの設定をします。この設定は、AVRのUSARTのレジスタ(UCSRnA,B,C)で設定したのと同じ設定にします(UCSRnの'n'は数字)。レジスタの詳細は前回の記事を参照してください。
これで、パソコンからAVRにデータを送ることができます。
AVR側の設定 (送受信プログラム)
パソコンからのデータを、AVRで受信するためのプログラムを以下に示します。AVRが受信したかを確認するために、受信したデータをパソコンに送信するようにしました。
ボーレート計算や、レジスタ設定などは前回の記事をご覧ください。
/* 受信用(マイコンで受信) *UBRR0 = 動作周波数 / (ボーレート * 16) - 1 ボーレート : 2400 動作周波数 : 1M ならば UBRR0 = 25 *UCSR0B : 受信・送信有効にする設定 000 1 1 000 受信有効 送信有効 *UCSR0C : 非同期動作、データビット長を8bitとして設定 00000110 *UDR0 : 送受信するデータのレジスタ *UCSR0AのUDRE : 送信準備OKなら1になる 準備OK -> 00100000 *UCSR0AのRXC : 受信準備OKなら1になる 受信 -> 10000000 */ /* 注意: 改行をキーボードで押すと、\rになる! */ /*****ここからプログラム *****/ #include <avr/io.h> #include <util/delay.h> int main(void) { unsigned char data = 0; //受信したデータを格納 DDRD = 0b11111100; //portD : 0,1pin以外出力 PORTD = 0b00000000; UBRR0 = 25; //ボーレート2400 @1MHz UCSR0A = 0b00000000; //受信すると10000000になる //送信有効になると00100000になる UCSR0B = 0b00011000; //送受信有効 UCSR0C = 0b00000110; //データ8bit //非同期,パリティなし //Stop 1bit while(1){ //受信するまで待つ while( !(UCSR0A & 0b10000000) ); //0ならループ data = UDR0; //受信したデータを格納 //受信できたかを確認するために受信データを返す //送信できるまで待つ while( !(UCSR0A & 0b00100000) ); //0ならループ UDR0 = data; //受信したデータを送信 } return 0; }
このプログラムをAVRに書き込み、FT232RLなどでパソコンとAVRを繋げてシリアル通信ができるようにします。そして、TeraTermなどのアプリケーションを立ち上げ、ボーレートなどの設定をAVRと同じ設定にします。
例えばTeraTermの場合では、ボーレート:2400, データ:8bit, パリティ:none, ストップ:1bit, フロー:none)にします。
これで、パソコンからデータを送信して、AVRがそのデータを受信することができます。
<< AVRのUSART機能を使う(準備編)へ | AVRでリモコンを作成するへ >> |