HOME > natural science Laboratory > ものづくり講座 > AVRマイコン TIPS集

AVRのタイマ割り込みを使う

文責:佐瀬 一弥 (2010年12月15日) カテゴリ:AVRマイコン TIPS集(38)

タイマカウンタ

タイマカウンタとはクロックのタイミングを数えて割り込みや波形出力を行うことができる機能ブロックである。 ATmega168の8ビットタイマカウンタ0を例に使い方をメモする。

タイミングを数えるということをより具体的にいえば、 クロックの信号の立ち上がりのときに、 タイマカウンタに格納している8ビットのデータに1加えるということである。
8ビットでは0~255(2の8乗)まで表現できる。


sase-101214-1.jpg


クロックとタイマの挙動

標準動作

タイマカウンタは255のときに信号の立ち上がりが来ると、 データをリセットして再び0からカウントを始める。
このリセットするタイミングで割り込みを発生することができるので、 256usごとに処理を行うといったことが可能である。
割り込みを使用するには、ヘッダファイルに
#include <avr/interrupt.h>
タイマ割り込みの設定として、
TIMSK0 = 0b0000010;	//比較A一致割り込み有効
と記述する必要がある。
このようにタイマカウンタのMAX値255でリセットする動作を標準動作と呼ぶ。
この動作はタイマの設定のデフォルトである。
TCCR0A = 0b00000000; //標準動作、分周なし
TCCR0B = 0b00000001;

CTC動作


データをリセットするタイミングを指定することもできる。 タイマカウンタが設定したTOP値に一致するとリセットする動作をCTC動作 (Clear Timer on Compare Match Mode)と呼ぶ。TOP値はOCR0Aの値で設定する

この動作を利用するには以下のようにTCCR0A,TCCR0Bを設定する。
TCCR0A = 0b00000010; //CTC動作、分周なし
TCCR0B = 0b00000000;
OCR0A = 199; //200usecで割り込み




標準動作とCTC動作

分周

クロックを分周することで長い時間も測ることができる。 図に示すように分周比の値をクロック周期を掛け算して分周後の周期を求められる。
分周の設定は、

TCCR0B=0b00000***;
*の部分で設定する。分周比はアトメル社ATmega168データシート104ページを参照。




クロック信号の分周

タイマ割り込みで、5msごとに出力を反転するプログラム

//timer.c
//winavr
//内蔵クロック1MHz

#include<avr/io.h>
#include<util/delay.h>
#include <avr/interrupt.h>


unsigned char i=0;

ISR(TIMER0_COMPA_vect)  //タイマ割り込み
{
	PINB=0xff;//ポートBを反転
}

int main(void)
{
	//タイマ0,CTC,割り込み用、比較A一致で割り込み
	TCCR0A = 0b00000010; 
	TCCR0B = 0b00000011; // N=64
	OCR0A = 78;  // 5msごとに割り込み
	TIMSK0 = 0b0000010;	//比較A一致割り込み有効
	

	//方向レジスタの設定
	DDRB  = 0xff; //B2を出力
	DDRD  = 0xff; //D5を出力
	PORTB = 0xff;
	
	//割り込み許可
	sei();
	
	while(1){
		;
	}
}


Bポートから出力された波形



▲このページのトップNPO法人 natural science トップ

コメント(2)

Moo (2012年7月29日 11:10)

AVRのPWMを検索していてこちらにお邪魔しております。
ちょい記述ミスがあるようなので書いておきます。

>TCCR0A = 0b00000000; //標準動作、分周なし
>TCCR0B = 0b00000000;
 TCCR0Bは「0b00000001」で分周ナシかと思いました(全0はカウント停止)
 CLKDIV8の記述も有れば有り難いです。

 またお邪魔致します。
 どの記事もとても簡潔で分かりやすく助かります。

佐瀬 一弥 (2012年9月10日 23:24)

修正しました。ご指摘ありがとうございます。

▲このページのトップNPO法人 natural science トップ

▲このページのトップNPO法人 natural science トップ




Warning: mysqli_connect(): (28000/1045): Access denied for user 'xsvx1015071_ri'@'sv102.xserver.jp' (using password: YES) in /home/xsvx1015071/include/natural-science/include_counter-d.php on line 8
MySQL DBとの接続に失敗しました