TOPへ戻る

20070610 シリアル出力の確認

シリアルから、9600bps で、'A' を連続に出力する確認を行ってみます。

◆テストプログラム
#include <avr/io.h> #include <util/delay.h> #define FOSC 20000000 // 20MHz /** sio設定 **/ #define BAUD 9600 #define MYUBRR FOSC/16/BAUD-1 // sio分周率 /* No Operation */ void nop(int count){ int i; for(i = 0; i < count; i++){ _delay_ms(100); } } /* PORT設定 */ void port_init(void){ DDRB = 0x01; PORTB = 0x00; } /* sio設定 */ void sio_init(unsigned int ubrr){ UBRR0H = (unsigned char)(ubrr>>8); // ボーレート上位8bit UBRR0L = (unsigned char)ubrr; // ボーレート下位8bit UCSR0B = (1<<RXEN0)|(1<<TXEN0); // 送受信許可 UCSR0C = (1<<USBS0)|(3<<UCSZ00); } int main(void){ port_init(); // PORT設定 sio_init(MYUBRR); // SIO設定 for(;;){ UDR0 = 'A'; // A送信 PORTB = ~PORTB; // LED点滅 nop(10); } } ソースファイルのダウンロード

シリアル通信の確認に、以下の便利なソフトを使用します。
Acknowrichシリアル通信、解析&デバッグツール

Acknowrich を立ち上げ、sio.hex を書き込んだターゲットを動かします。
※PCはCOM1にクロスケーブルで接続しています。

■が表示されているときは、ボーレートの設定が適切でないときの表示です。
ボーレートを9600bpsに設定すると正しく'A'が表示されます。

←クリックすると拡大します。

このツールは簡単にボーレートを変更できるので、AVRが内部発振モードになっていたり、分周比が1/8になっていたとき
威力を発揮します。

メニューで簡単にボーレートの変更ができます。

シリアルの確認でつまずいたところは、
1)SDとRDが逆に配線されていた。
2)クロックが内部発振になっていた。
3)ヒューズビットの分周比が1/8になっていた。

また、SIOを使用するときは、20MHzのクロックでなく、18.4320MHz を使用したほうが、
ボーレートの設定誤差がありません。

HERO'S さんのPDFから

でも、プログラム内で正確なタイマーを作りたい時、難しくなってしまいますね。

TOPへ戻る