3664F,3694Fで始めるH8 500円で始めるPIC 始めるAVR

AVRのタイマー


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

        

AVRのタイマー

ATtiny2313しか使ってないのですが、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 WGM0 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は、カウンタがいっぱいになると、減算して下り始める 三角波になる
  単純に周期を高速PWM2倍にすることが出来る


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

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

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

位相基準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/
      -     -   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)へコピーされる

3664F,3694Fで始めるH8 500円で始めるPIC 始めるAVR
        メインページへ