- 追加された行はこの色です。
- 削除された行はこの色です。
#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で割った数がシステムクロックとなるらしい。~
(システムクロック前置分周器:目的としては、消費電力節約用?)~
ってんで、ProjectOptionを1000000Hzに設定しなおして、事なきを得る。~