I/Oボードという事で、AVRとPC間で通信をさせたいです。
STK600にはUSBポートとRS-232Cが載っていますので、どちらかを使えばPCとの通信のテストが出来ると思っていました。
以下のコードでひたすらデータを吐き出し続けさせ、PCで観測させようと考えましたが全くできないので、諦めました...
STK600での方法をご存知の方が居られたら、是非ご教示下さい。
#define F_CPU 1000000UL // Clock Speed #define BAUD 9600 #define MYUBRR ((F_CPU/16/BAUD)-1) //Asynchronous Normal mode #include <avr/io.h> #include <util/delay.h> int main(void){ unsigned char data = 0x01; UBRR0H = (unsigned char)(MYUBRR >> 8); UBRR0L = (unsigned char)MYUBRR; UCSR0B = (1 << RXEN0)|(1 << TXEN0); /* Stop bit:1, Parity: None, Data bits:8*/ UCSR0C = (1 << UCSZ01)|(1 << UCSZ00); while(1){ while(!(UCSR0A & (1 << UDRE0))){} //put data into buffer, send the data UDR0 = data; delay_ms(50); data = data + 0x01; } }
仕方が無いので、一緒に買ったATMEGA328Pを使ってテストを行います。
STK600からISPのピンを引っ張ってフレッドボード上に組んだチップにプログラムします。
Atmel Studio上からプログラムする方法が判らなかった為、Avrdudeを用いて書き込みました。
AVRからRS-232Cを用いて通信する為のトランシーバにSP3232ECPを使います。
回路図は以下の通り。ISPを用いる事で、チップが基盤に実装されていてもプログラムする事が出来ます。(今回はピンの重複がないので、実際どうなるか分かりませんが...)
今回は電源は、ISPのピンから頂いています。
トランシーバIC周りのキャパシタや接地は省略しています。
上記のコードをプログラムし、PCのシリアルポートと通信させ受信を確認しました。
今日はここまで。
次は、送信とUSB変換について...
久しぶりにスパゲティコード
#回路図の作成にはBSch3を利用させて頂きました。