TOPへ戻る
シリアルから、9600bps で、'A' を連続に出力する確認を行ってみます。
◆テストプログラム
#include
#include
#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<
ソースファイルのダウンロード
シリアル通信の確認に、以下の便利なソフトを使用します。
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へ戻る