PCとの通信実験
AVRにはUSARTの機能があります。これを使うとPCと通信ができるはずです。MCで計測したデータをPCに保存したり、処理したりできるようになります。
電圧の測定などがPCに取り込めると新しい使い方ができると思います。
手始めに、次のようものを考えました。
MCの表示装置には液晶表示器を使います。PCからの受信データはここに表示して、確認できるようにします。
MCが作り出すデータとして、時計機能から時刻データを用意します。PCから送信命令があったときに送信します。
MCはポートに余裕がある手持ちのmega8を使います。90S2313でも十分ですが、TQFPのmega8に挑戦してみようと思います。
クロックは、大事をとって水晶を使うことにしました。以前に2313でUSBに接続したとき(http://www.cesko.host.sk/IgorPlugUSB/IgorPlug-USB%20(AVR)_eng.htm)、
セラロックではクロックがふらついて極めて不安定になり、ときどきしか通信できなかったものが水晶を使うと安定した経験からです。共立電子で特売100円の
水晶発振器(KYORI KCO-3028と書かれています)16.000MHzのものを使いました。このためにヒューズビットの書き換えが必要です。
時計機能はタイマー割込でカウントアップします。時計として使うわけではないので精度は追求していませんし、時刻あわせ機能も付けません。
左が USBコンバータ 中央が この通信実験回路 右が シリアル書き込み機 |
void USART_Init(unsigned int baud) { UBRRH = (unsigned char)(baud>>8); /* ボーレート設定(上位バイト) */ UBRRL = (unsigned char)baud; /* ボーレート設定(下位バイト) */ UCSRB = (1<<RXEN)|(1<<TXEN); /* 送受信許可*/ UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0): /* フレーム形式設定(8ビット,2ストップビット) */ } 注: このコード例はデバイス定義ファイルがインクルードされることが前提です。 初期化コードと併せられます。 void USART_Transmit(unsigned char data) { while ( !(UCSRA & (1<<UDRE)) ); /* 送信バッファ空き待機*/ UDR = data; /* データ送信(送信開始) */ } unsigned char USART_Receive(void) { while ( !(UCSRA & (1<<RXC)) ); /* 受信完了待機*/ return UDR; /* 受信データ取得*/ } 注: このコード例はデバイス定義ファイルがインクルードされることが前提です。 |
同時には写真が撮れないのでずれています |