シリアル通信
AVRのUSARTでシリアル通信。RS232Cポートで、レベル変換のIC MAX232系を使った通信と
USB変換チップFT232RLを使ったUSBの通信。
USBでは従来のRS232Cの通信へ変換するだけなので、どちらもAVRのTxD、RxDを使う通信で、RS232CポートでもUSBでも同じ通信プログラム内容です。
- USBでは 変換チップFT232RL
- 従来のRS232Cの通信では ADM3202 のICを使用(max232の互換チップ)
の通信を書きました。
受ける側のマイコンプログラムは この2つなら、どっちでもプログラム内容は同じです。
USB変換チップFT232RL
秋月電子のUSB変換チップFT232RLを使用しました。
USBの機能を持たずUASRTの機能しかないATtiny2313のようなチップの場合、簡単にシリアル通信機能ができます。
電源をUSBポートから供給と、外部から供給をジャンパピンで切り替えになってます。
USB接続は、通常のUSB同様、PnP(プラグアンドプレイ)で接続するとドライバ要求が自動的に現れ、アトメルサイトからダウンロードしたドライバをしていると自動的にインストールされる。
設定が完了すると 新たなCOMポートができます。
RS232CポートがあるPCだと 従来 COMポート1 があり、これで従来のケーブルで通信です。MAX232系を使った通信ではこのポートを使用。
FT232RLのPnPで設定すると COMポート2~ ができるので、USBではこのポートを使用します。
FT232RL
他にもIO出力使用にもできる機能もあるようですが、通信についての設定。
ジャンパ設定
2つのジャンパピン jp1,jp2があります。
外部から電源供給の設定にしました。
- JP1の3本は 2-3をつなぐ
- JP2の2本は オープンでつながない(片足入れておくといい)
(下図)
USB接続ドライバ
FTDIで CDM 2.04.16 をダウンロード( 10/1/'09)
プラグを差し込んで、ドライバ要求が出たら 解凍したフォルダCDM 2.04.16 WHQL Certifiedを指定すると設定完了します。
付属の取説にもありますが、1度完了すると、ドライバ要求が再度でるので2回すると完了。
WinXPでは
コントロールパネル - システム - ハードウエア - デバイスマネージャー
で確認できます
でこんなドライバ項目が加わりました。(COM3)
これでCOM3ができました(PCによりCOMxの数字は異なる)
接続
ケーブルは通常のUSBコネクタより機器への差し込み口が小さいポートのものが必要です。
通信
TxD、RxD をクロスにつなぐとできました。
FT232RL ATtiny2313
TxD - RxD
RxD - TxD
回路図
通信プログラムは RS232CのMAX232系チップを使った通信と同じです。
サンプルプログラム
送信したデータをオウム替えしに受信するプログラム。
usrt
/************************************************
RS232C
文字列、バイト 転送関数
char = unsigned char でバイト転送も可
(gccはコンパイラオプションで
char: signed or unsigned を切り替えの様子)
**************************************************/
#include
//1文字送信
void rs_putc (char c)
{
loop_until_bit_is_set(UCSRA, UDRE); //UDREビットが1になるまで待つ
UDR = c;
}
//1文字受信
char rs_getc(void)
{
while(!(UCSRA & _BV(RXC))) ;
return UDR;
}
// テキスト送信 (nullターミネーション 改行コード)
void rs_puts (char *st)
{
while (*st) {
rs_putc (*st);
if (*(st++) == '\n') rs_putc('\r');
}
}
// テキスト受信 (nullターミネーション 改行コード)
// オウム返し返信あり
short rs_gets (char *s)
{
short i = 0;
char c;
while (1) {
c = rs_getc ();
if ((c == '\n') || (c == '\r')) {
s[i] = '\0'; if (i != 0) i++;
rs_putc ('\n');
break;
} else if ((i > 0) && (c == '\b')) {
rs_puts ("\b \b");
i--;
} else if ( (c >= ' ') && (c <= '~') ) {
s[i++] = (char)c;
rs_putc (c);
} else rs_putc ('\a');
}
return i;
}
int main(void)
{
char rs_ary[20];
UCSRB = _BV(TXEN)|_BV(RXEN); /* 送受信許可 */
UCSRC = 0b00000110;
// パリなし
// ストップビット 1ビット
// データビット 8ビット
UBRRH = 0;
UBRRL = 207; /* 4MHzにて 1200bps 設定 */
// UBRRL = 25; /* 4MHzにて 9600bps 設定 */
while(1){
rs_gets(rs_ary); //文字列受信 → rs_ary[20]
rs_puts(rs_ary); //rs_ary[20] → 文字列送信
}
}
ハイパーターミナルで abcdとか入力して送ると オウム返しに表示する。
つないでこれが機能すると成功 とりあえず通信テストといったところです。
●ボーレート設定
ボーレートは 1200 にしています。ハイパーターミナルでも同じにします。
ハイパーターミナルなどの設定は H8の パソコンと通信 のところを参照のこと
ボーレート設定はは使用するクロックによって設定数値がかわります。
2313では マニュアル p88に 周波数別のボーレート用の設定数値、計算方法も あります。
これは4MHz bpst1200での設定数値
MAX232C
RS232C通信のチップを使って従来のシリアル9Pinケーブルで通信
* RS232Cケーブルはストレートタイプを使用
H8ボードのように通信チップがついてないので付ける必要があります。
ADM2302のRS232C通信回路
5Vのマイコンとつなぐには信号電圧変換する必要があるので、これを担当するのがMAX232の専用ICです、互換チップもあってADM2302を使用。
コンデンサをいっぱい周りに付ける必要があるのがわずらわしいです。
マイコンのpin 通信はTXDとRXDの2pinだけ使用です。
- twtter
- google+
- hatena