#norelated
* LEDサンプル [#d2eb2c43]

やっぱり最初はこれよね。~
LEDをPD0〜PD7に接続。~
以下、ソースコード。~

 #include <avr/io.h>
 #include <util/delay.h>
 
 void delay_ms( int t )
 {
 	while( t-- ){
 		_delay_ms( 1 );
 	}
 }
 
 int main( void )
 {
 	DDRD	= 0b11111111;
 	PORTD	= 0b00000000;
 
 	char count	= 0;
 	char binc	= 0;
 
 	while( 1 ){
 		PORTD = ( 1 << count );
 		if( 0 == binc ){
 			count++;
 			if( 7 <= count ){
 				binc = 1;
 			}
 		} else {
 			count--;
 			if( 0 >= count ){
 				binc = 0;
 			}
 		}
 		delay_ms( 100 );
 	}
 
 	return 0;
 }

ATmega168Pは、内蔵RC発信器が8MHzとなっていたので、普通にCPUのFrequencyも8MHzだろうと思いこむ。~
AVRStudioのProjectOptionで、Frequencyを8000000Hzに設定して、F_CPUのdefineを設定したんだけど、実際やってみると、delay_msの待ちが余りに遅い。~
具体的に言うと、8倍くらい。~
データシートを読み返してみると、ヒューズビットにCKDIV8とかいうのがあって、こいつが0だと、実際には8で割った数がシステムクロックとなるらしい。~
(システムクロック前置分周器:目的としては、消費電力節約用?)~
ってんで、Frequencyを1000000Hzに設定しなおして、事なきを得る。~

というわけで、ヒューズビットのCKDIV8を立てて、Frequencyを8000000Hzにしてもちゃんと動きました。~
この辺は、電源とかの兼ね合いで変えるべきかね。~

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS