2009/03/13

AE-UM232RとAVRでシリアル通信

AVR ATmega88Pと秋月から買ってきたFTDI製のチップが載っているUSBシリアル変換器、AE-UM232Rを繋げてみました。

データシートではUSARTの項で解説されていて、C言語でのサンプルコードも載っていて、痒いところまで手が届いていそうで、うまく動かない…。
データシートが悪いわけがないので自分のコードをいろいろ変更してみたりして、ブレッドボード上の回路もいろいろ変更してみたり。

結局20MHzのセラロックを使ったところ問題なく接続できたのですが、うーん8MHzの内部RC発振じゃ無理なのかぁ…。9600bpsで接続するなら無理じゃないと思ったんだけどなぁ…。

CKDIV8はオフにしているし、クロックが8MHzで動かない理由がわからない、明日横浜にいく途中で秋葉原によって8MHzの水晶発振子でもかってきて試してみるか。東京週末フリーキップは駅でゲット済みだから準備は万端。
でもその前に、この週末に仕組みのところから解説しているWebサイトをいろいろみて勉強してみます…。

さてさてプログラムの書き込みはAVR Studioが便利なのでWindows VistaなInspiron 640m上で行ないますが、シリアルケーブルの先はLinuxです。
まずはUSBケーブルを接続した後で、dmesgを実行して最近認識されたデバイスの名前を確認します。

$ dmesg | tail -3
[1682131.118019] ftdi_sio 1-2.3:1.0: FTDI USB Serial Device converter detected
[1682131.118056] /build/buildd/linux-2.6.24/drivers/usb/serial/ftdi_sio.c: Detected FT232RL
[1682131.118161] usb 1-2.3: FTDI USB Serial Device converter now attached to ttyUSB0

$ kermit
C-Kermit> set port /dev/ttyUSB0
C-Kermit> set speed 9600
C-Kermit> set carrier-watch off
C-Kermit> connect
あとはキーを打つとエコーバックするサンプルプログラムが動いて、確認完了。 けれどちゃんとAE-UM232RとAVRが接続できていない時も、AE-UM232Rがエコーバックしてしまったので、LEDをPB0に接続して打鍵毎に点滅"PORTB ^= (1<<PORTB0);"するようにしないと、ちょっと不安です。

どうでも良いですが、TeraTermでLinuxに接続してkermitを実行した時に、SKKIME 1.5を使っていると、Kermitを抜ける時に打つ"C-\c"(Control+\ c)が取られてしまい、TeraTermがKermitに伝えてくれませんでした。
MS IME 2007に切り替えて正常に終われましたが、まぁこんな使い方は僕もめったにしないから大丈夫か…。とりあえず勉強しないとだなぁ。

0 件のコメント: