フタなしカンヅメ

徒然なるままに @happytar0

USBシリアル変換モジュールを使う

またもや電子工作をサボってしまった…。
プライベートもプログラミングをバリバリやってる人はすごいと思う。

この間マイコン先生から電子工作用の部品を色々いただいた。
ジャンパー線やLCDなど便利なものばかり…感謝感謝。

どうやら半年くらいご無沙汰だったみたいだ。
今回さわったシリアル変換モジュールなどの部品は、実は正月に買っておいた。
ケースやら基盤なども買い込んだので、早いところ温度計を完成させてもいいのだけど、リハビリも兼ねてシリアル通信をやってみることにした。

USBシリアル変換モジュールをマイコンに接続

購入したシリアル変換モジュールは、秋月電子で売っていたもので、FT232RLというUSB-シリアル変換用のICが基盤にくっついるものだ。
接続は簡単で、バスパワーでUSBから電源を確保できるので、GND、TXDとRXDをマイコンと接続するだけで大丈夫らしい。
マイコンはATTINY2313を使用した。

TXDとRXD

変換モジュールに付属されていた説明書にも記載されているのだけど、TXDは「通信データ出力」、RXD「通信データ入力」ということらしい。
これをマイコン側のTXDとRXDにクロスして接続する。最初にクロスで接続することに気づかず焦った。
要は、変換モジュールのTXDをマイコンのRXDに、変換モジュールのRXDをマイコンのTXDに接続する。

変換モジュールとPCを接続

ドライバが必要なようだったので、下記のサイトからダウンロードした。MacBookAirを使っていたので、OSX版をインストールした。
Virtual COM Port Drivers

screenでシリアル通信も出来るようだったのだけど、他に使いやすいものがないか探したところ、CoolTermというアプリを発見した。とりあえず、こいつで行くことにした。
Roger Meier's Freeware

USART(UART)

詳しい説明はググれば出てくるのでざっくり説明すると、
1本の信号線上の信号をプロトコルに従い「1」、「0」でデータを送る通信方法。
全二重の非同期通信、半二重の同期通信の二通りがあるようだ。

ボーレート

変復調速度のことでマイコンのクロック数によって設定する値が変わる。マイコンのデータシートに一覧が載っているので、クロック数と通信速度から適切なものを選べばいい。
一般的な通信速度9600bpsで通信することにした。
マイコンのクロック数は8MHzなので、設定するボーレートは51となった。

シリアル通信してみる

よく使われている設定でシリアル通信をおこなうことにした。
設定内容は、非同期通信、パリティ禁止、停止ビット1bit、データビット長8ビット。

まずは初期化処理のコードは下記のようにした。

UBRRL = 51; // 9600bps
UCSRB= (1 << RXEN) | (1 << TXEN);
UCSRC = (1 << UCSZ1) | (1 << UCSZ0);

UBRRLレジスタにボーレート値を入れる。
UCSRBレジスタで、RXENとTXENのビットを立てる。RXENが「受信許可」、TXENが「送信許可」になる。
UCSRCレジスタは、UCSZ1とUCSZ0が「データビット長」になる。
8ビットの場合は、「011」になるので、UCSZ1とUCSZ0の両方のビットを立てればOKだ。
本当は、UCSZ2もあるのだけど、これはUCSRBレジスタのほうに入っている…紛らわしい。今回は8ビットなので特に設定する必要はない。

コードは、ググればたくさん出てくるし、データシートにも書いてあるので特に迷うことはなかった。
とりあえず、シリアル通信の送受信を実装し、ターミナルから送信した文字列をそのままエコーバックさせるコードを書いてみた。

コードはこちら
pontago/avr-SirialTest · GitHub

f:id:happytar0:20130717002242j:plain
f:id:happytar0:20130717003117p:plain