AVRのタイマー設定

AVR2313

AVRの持つ各種タイマーについての解説とまとめ一覧表

 

AVRのタイマー機能は少しだけPICとかと違うところがあります。
タイマー、カウンタ、PWM の設定

AVRのタイマー

AVRのタイマーはほぼ同等の8ビットのタイマ0 と16ビットのタイマ1があり。
(タイマー1にはインプットキャプチャがあり)

カウンタTCNTはタイマ0,1共にに リード、ライト可能、PWM波形生成などがあり、幅広い設定のできるタイマー機能を持っています。
その分、設定が複雑なので分類してみました。

 

タイマー分類

AVRのタイマーはデータシートでは
主に4つのモードがあります。

  • 標準
  • CTC
  • 位相基準PWM
  • 高速PWM


4つでは少しわかりにくいので、機能から大きく3つに分類しました
(標準、 CTC)、位相基準PWM、高速PWM

(以下データシート用語で カウンタ満タン=Top値)

 

* 設定については 下 タイマーレジスタ表 を参照

 

 

 

タイマー説明

 

【タイマー0モード設定】

TCCR0A TCCR0B で設定する

WGM02 WGM01 WGM00     -                 -
0 0 0 標準モード 【オーバーフローでタイマを使う】

カウンタ値Top =FF となり
これを超えるとまた一回りして0から。
この0になるとき
オーバーフローフラグ:TOV0=は1に。
0 1 0 CTC 【満タン値(Top値)を設定して使う】

カウンタTCNT0 と OC0A が一致(コンペアマッチ)で
カウンタTCNT0は0クリアされる
OCF0Aフラグで割り込み設定する
0 0 1 位相基準PWM 【PWMでタイマを使う】

WGM02 = 0 で
カウンタTop (最大値)= FF(満タン)

WGM02 = 1 で
カウンタTop(最大値) = OC0A
1 0 1 位相基準PWM
0 1 1 高速PWM
1 1 1 高速PWM

 

【標準的タイマーとCTC】

 

・標準的タイマー
主に普通のカウンタとしてで動作させるようなモード
・CTC
Top値=OCR0A 設定 (Top値=満タン値 をOCR0Aで設定して使う)

 

この2つのモードの違いは Top値=オーバーフロー(FF) か Top値=OCR0A の違いといえそう。
(CTCモードではオーバーフロー割り込みはできないようで、満タン(OCR0A) として使用するモード)

 

標準モードだと
カウンタ満タン時(オーバーフロー)で 使用するには カウンタが 仮に満タン=10秒だとすると 

 仮に 周期 2秒間隔で使うには  スタート=8にして動かすような使い方

周期で割り込み の場合はオーバーフロー割り込み

 

CTCモードは 
満タン時が設定できるので  仮に 周期 2秒間隔で使うには
 カウンタが スタート=0 満タン=2秒 (OCR0A=2秒に設定)

周期で割り込み の場合は Top値=OCR0A なので 
満タン(=OCR0A)で マッチA割り込み

 

CTCモードで、そういうちょと使いやすい設定が可能な感じです

 

CTCモード チャート (データシートより)

 

また、OCn×でピン出力方式をトグル設定すると、波形出力も可能です。

割り込みは TIFRレジスタ
  オーバーフロー TOV0
 マッチA OCF0A などが要因発生でビットが1になり
割り込み関数実行後には 自動的に 0クリアされる

 

【高速PWM】

 

高速PWM

  一般的なPWMモード 高速PWMはのこぎり波

 

高速PWM と 位相基準PWM の違いは

高速PWMはのこぎり波を扱うのに対し、位相基準PWMは三角波を扱うといえる。

 

また  WGM02 (TCCR0Bレジスタ) にて
Top値=FF(カウンタ満タン) か Top値=OCR0A(満タン:OCR0A) で使用かを設定

 

高速PWMモード チャート (データシートより)

高速PWMモード動作タイミングチャート

 

【位相基準PWM】

 

・位相基準PWM

 位相基準PWMは、カウンタがいっぱいになると、減算して下り始める 三角波になる
 単純に周期を高速PWMの2倍にすることが出来る

 

この2つ 高速PWM と 位相基準PWM の違いは

  高速PWMはのこぎり波を扱うのに対し、位相基準PWMは三角波を扱うといえる。

 

また WGM02 (TCCR0Bレジスタ) にて

 Top値=FF(カウンタ満タン) か Top値=OCR0A(満タン:OCR0A) で使用かを設定

 

位相基準PWMモード チャート (データシートより)

位相基準PWMモード動作タイミングチャート

 

タイマー関連レジスタ

タイマー0の設定は TCCR0A TCCR0Bに混在している。

 

●TCCR0A タイマ0設定レジスタ

波形出力
コンペアマッチA
波形出力
コンペアマッチB
  -   - タイマモード設定
7 6 5 4 3 2 1 0
COM0A1 COM0A0 COM0B1 COM0B0   -     -   WGM01 WGM00
コンペアマッチで
波形出力選択
コンペアマッチで
波形出力選択
標準 CTC
位相基準PWM
高速PWM

 

●TCCR0B タイマ0設定レジスタ

OC0A,B強制変更   -   - Top設定 クロック設定
7 6 5 4 3 2 1 0
FOC0A FOC0B   -     -   WGM02 CS02 CS01 CS00
強制コンペアマッチ
非PWMモード時のみ有効
 Top値 = 満タンか
= OC0Aの選択
クロック分周選択

 

 


●TIMSK 割り込み設定レジスタ   タイマ0,1混在
タイマーの設定 タイマーの設定
オーバー
プロー
コンペア
マッチA
コンペア
マッチB
インプット
キャプチャ
コンペア
マッチB
オーバー
プロー
コンペア
マッチA
7 6 5 4 3 2 1 0
TOIE1 OCIE1A OCIE1B   -   ICIE1 OCIE0B TOIE0 OCIE0A


TIFR 割り込み要求レジスタ   タイマ0,1混在
タイマーの設定 タイマーの設定
オーバー
プロー
コンペア
マッチA
コンペア
マッチB
インプット
キャプチャ
コンペア
マッチB
オーバー
プロー
コンペア
マッチA
7 6 5 4 3 2 1 0
TOV1 OCF1A OCF1B   -   ICF1 OCF0B TOV0 OCF0A

 

 

設定方法 タイマー関連レジスタ 


【タイマー0設定】
●TCCR0A タイマ0設定レジスタ表
PWM 波形出力
コンペアマッチA
(出力ピン OC0A)
 PWM 波形出力
 コンペアマッチB
(出力ピン OC0B)
  -     -   タイマモード設定 タイマモード
7 6 5 4 3 2 1 0   
COM0A1 COM0A0 COM0B1 COM0B0   -     -   WGM01 WGM00
マッチ,B共、ビット設定方法は同じ   -     -   0 0 標準
0 1 コンペアマッチでトグル出力
  -     -   1 0 CTC
1 0 コンペアマッチでLow
|--___|
  -     -   0 1 位相基準PWM
1 1 コンペアマッチでHigh
|___--| 
  -     -   1 1 高速PWM
0 0   波形出力なし             
 
COM0A1 COM0A0 COM0B1 COM0B0

ここに1が一つでも設定されると、その通常のIOポートの機能は無効にされ、タイマ動作用IOになる

 

出力ピン   OC0A、 OC0B
* タイマからピン出力するには DDRレジスタでピンを出力設定にする必要あり

 

●TCCR0A タイマ0設定レジスタ
波形出力
コンペアマッチA
波形出力
コンペアマッチB
- - タイマモード設定
7 6 5 4 3 2 1 0
COM0A1 COM0A0 COM0B1 COM0B0 - - WGM01 WGM00
コンペアマッチで
波形出力選択
コンペアマッチで
波形出力選択
 標準,  CTC
位相基準PWM
 高速PWM

 

●TCCR0B タイマ0設定レジスタ
OC0A,B強制変更 - - Top設定 クロック設定
7 6 5 4 3 2 1 0
FOC0A FOC0B - - WGM02 CS02 CS01 CS00
強制コンペアマッチ
非PWMモード時のみ有効
Top値=満タンか
=OC0Aの選択
クロック分周選択

 

 

●TCCR0B タイマ0設定レジスタ表
OC0A,B強制変更
強制コンペアマッチ
非PWMモード時のみ有効
  -   - Top設定 クロック設定   
7 6 5 4 3 2 1 0  
FOC0A FOC0B   -     -   WGM02 CS02 CS01 CS00  
    -     -   標準
CTCモード
では必ず 0
0 0 0 タイマ停止
      -     -   0 0 1 プリスケーラなし
      -     -   位相基準PWM
高速PWM   
モードで

WGM02
 = 0 で
カウンタTop (最大値)= FF(満タン)

WGM02 = 1 で
カウンタTop(最大値) = OC0A
0 1 0 1/8
      -     -   0 1 1 1/64
      -     -   1 0 0 1/256
     -     -   1 0 1 1/1024
     -     -   1 1 1 T0ピンからの外部クロック
(立ち下がり
     -     -   1 1 1 T0ピンからの外部クロック
(立ち上がり

 

タイマー停止、開始は 設定ビットの TCCR×B= の分周設定ビットを
すべて000 →停止
分周設定 →開始      とするようです。

 

割り込み

オーバーフロー、マッチA、マッチBで それぞれ独立した割り込みベクタ

 

割り込み設定レジスタ

割り込み処理をしたいとき対応ビットを設定する

 

TIMSK 割り込み設定レジスタ  タイマ0,1混在               
タイマーの設定 タイマーの設定
オーバー
プロー
コンペア
マッチA
コンペア
マッチB
  -   インプット
キャプチャ
コンペア
マッチB
オーバー
プロー
コンペア
マッチA
7 6 5 4 3 2 1 0
TOIE1 OCIE1A OCIE1B   -   ICIE1 OCIE0B TOIE0 OCIE0A

 

ICF1 : インプットキャプチャ割り込み許可 (インプットキャプチャは タイマー0にはない)
WGM13-10でTOP値に設定の場合 カウンタ値=TOPで このフラグが 1

 

●割り込みフラグのレジスタ

通常は手動で設定はしないレジスタ。

 

割り込み要因で1がセットされ、対応する割り込み処理ベクタを実行すると自動で0クリアされる

 


●TIFR 割り込み要求レジスタ   タイマ0,1混在             
タイマーの設定 タイマーの設定
オーバー
プロー
コンペア
マッチA
コンペア
マッチB
  -   インプット
キャプチャ
コンペア
マッチB
オーバー
プロー
コンペア
マッチA
7 6 5 4 3 2 1 0
TOV1 OCF1A OCF1B   -   ICF1 OCF0B TOV0 OCF0A

 

インプットキャプチャ関連レジスタ

 

●TCCR1B タイマ0設定レジスタ
  -   - クロック設定
7 6 5 4 3 2 1 0
1CNC1 1CES1   -   WGM13 WGM12 CS12 CS11 CS10

 

1CNC1 : インプットキャプチャノイズ消去許可
ここが1設定で、ノイズ消去器を有効に。
ノイズ消去は連続4回同じ入力の場合にその入力を得る。このため4回で1入力となり遅れがでる。

 

1CES1 : インプットキャプチャ エッジ選択
0:立ち下がり
1:立ち上がり
ここの設定に従ってインプットキャプチャがトリガされると、タイマカウンタ値が インプットキャプチャレジスタ(ICR1)へコピーされる

 

スポンサーリンク
  • facebook
  • twtter
  • google+
  • hatena