AVR基礎(タイマー)

単純なタイマーは TCCRxA と TCCRxB レジスタに値を設定するだけで開始される。TCNTx を参照するとカウント中の値が得られる。

下記プログラムは PB0 - PB7 に LED を接続して実行。ビット出力の様子が見られる。

最上位ビット (PB7) が 1KHz をさらに256(2^8)で割った値(約4Hz)で点滅するので、上位3ケタぐらいしか目では点滅は判別できない。

ちなみにシステムクロックを 125KHz に設定するとかなり判別が容易になるが、125KHz に設定する場合は CKDIV8 をアンチェックし、さらにISP Freq. を 125KHz ->6.478KHz にしないと通信ができないので注意。

//timer_test1.c

//8bit タイマーテスト

#include

#include

int8_t time_count;

int main(void)

{

//タイマー設定

TCCR0A=0b00000000; //default

TCCR0B=0b00000101; //clk/1024 = 1KHz =1msec

DDRB = 0b11111111; //PB0 - PB7 = LED

while (1)

{

time_count=TCNT0;

PORTB=time_count;

//_delay_ms(10); 表示をゆっくり見られるように、このようなディレイを入れた場合、

//ディレイの間もタイマカウントは進むので、LED表示が間欠的になり、正しい表示が

//得られない

}

return 0;

}