
■ BASCOM-AVR (DEMO) の使用方法 ■ |
ハードウェア タイマーの使用方法 |
ハードウェア タイマーの動作設定は、複雑でたくさんあり、チップによる違いなどもあるため、詳細はマニュアルを熟読する必要がありますが、ここでは、基本動作とBASCOM-AVRでの設定方法を記載します。
ハードウェア タイマーの動作には、AVRの動作クロックや、それに関わるヒューズ・ビットの設定が重要です。
下記「ブロック図」と「クロック信号系統図」を参考に、クロック信号の流れを把握しておいて下さい。

ブロック図 |

クロック信号 系統図 |

CKSEL・SUT 表 |
不明な点は、「掲示板」をご利用下さい。 |
● BASCOM-AVRでは、ハードウェア タイマーの動作を、大きく3つに分けています。
1. TIMERモード
・タイマーの計数クロックに、AVRの動作クロックを使用します。
・プリスケーラ(前段分周器)で、AVRの動作クロックを、1/1、1/8、1/64、1/256、1/1024 (一例)に
分周してから使用することもできます。
・設定された任意の時間周期(周波数)で、OCnx端子(OC0A,OC0B,OC1A,OC1Bなど)にパルスを
発生させたり、割り込みを発生させることができます。
|
2. COUNTERモード
・タイマーの計数クロックに、外部からの信号を使用します。(T0・T1 端子など)
・外部からのクロックは、立ち上がりエッジ または 立ち下がりエッジでのカウントを選択できます。
・外部のクロックにより、任意の時間周期(周波数)で、OCnx端子(OC0A,OC0B,OC1A,OC1Bなど)に
パルスを発生させたり、割り込みを発生させることができます。
・外部信号が変化した間隔の、周期(時間)測定や、一定時間内のパルス数を計測できます。
|
3. PWMモード (Pulse Width Modulation)
・上記2つの動作に、比較器 (Output Compare Register) の操作を加えて、出力パルスの周波数、
パルス幅、位相を制御することができます。
|
○ この大きく分けた3つの動作に、キャプチャー動作が加わります。
・キャプチャー動作は、ICP(Input Capture Pin)端子 または アナログ比較器が搭載されている
チップで使用できます。
・この機能は、多くのチップで、16ビットTimer1に用意されています。
・動作の概略は、ICP端子 または アナログ比較器の状態変化で、タイマーの計数値がキャプチャー
レジスタ(ICRn)にコピーされ、状態変化の時間測定やタイマーの動作設定値に利用できます。
|
書式例 |
Config Timer0 = Timer , Prescale = 1 , Clear Timer = 1 , Compare A = Toggle |
|
@ A B C |
@ Config Timer0 = Timer
・タイマー0をTIMERモードに設定します。
・この記述だけでは、タイマーはまだ何も動作しません。
・また、[= Timer] と [= Counter] は名目上の書式のため、どちらを書いても動作に違いが出ません
ので注意して下さい。
A Prescale = 1|8|64|256|1024
・タイマー0の計数に使用するAVRの動作クロックを、プリスケーラ(前段分周器)で分周する値を
設定します。 (1は分周なしです)
・一部のチップでは、1|8|32|64|128|256|1024 の設定が可能です。
・この書式により、タイマー0が動作開始しますので、必ず記述が必要です。
・事実上この書式が、TIMERモードとCOUNTERモードを識別します。
これ以降は、タイマー0に比較器 [OCR0x] を搭載しているチップにのみ有効な書式です。
B Clear Timer = 0|1
・比較器A [OCR0A] を使用する場合で、TIMER0 [TCNT0] と比較器A [OCR0A] が一致した時に、
TIMER0 [TCNT0] を、$00にクリアするかしないかの選択です。
|
0 |
− オーバーフロー動作。 |
TIMER0 [TCNT0] をクリアしない。 (デフォルト)
(TIMER0 [TCNT0] は、$00〜$FF を繰り返します) |
1 |
− 比較一致 CTC動作。 |
TIMER0 [TCNT0] をクリアする。
(TIMER0 [TCNT0] は、$00〜OCR0A値 を繰り返します) |
|
|
C Compare (A)(B) = Clear | Set | Toggle | Disconnect
・比較出力 [OC0x] ピンを使用し、タイマー動作をポートピンへ出力する場合に記述します。
・このピンを使用する場合は、「Config Port」命令で [OC0x] のポートピンを出力に設定して下さい。
|
Compare = |
比較器が1つのチップの場合。 |
Compare A = |
比較器Aを設定します。 |
Compare B = |
比較器Bを設定します。 |
|
|
|
Clear |
一致発生で、[OC0x] ピンをL(0)にします。 |
Set |
一致発生で、[OC0x] ピンをH(1)にします。 |
Toggle |
一致発生で、[OC0x] ピンを反転します。 分周パルス出力。 |
Disconnect |
[OC0x] ピンを使用しません。 [OC0x] ピンは通常のポート。 (デフォルト) |
|
|
(プログラム例)
・ATtiny45のクロックに12.8MHz Xtalを使用し、タイマー0でPB0 [OC0A] ピンから50Hzを出力します。
(1) クロック12.8MHzを、プリスケーラで1/1024分周します。 12,800,000Hz ÷ 1024 = 12,500Hz
(2) 比較器A [OCR0A] を使用し、1/250分周します。 12,500Hz ÷ (50Hz × 2) = 125カウント - 1
|
$regfile = "ATtiny45.DAT" |
' AVRデバイスを"ATtiny45"に設定。 |
$crystal = 12800000 |
' クロック周波数を12.8MHzに設定。 |
Config Portb = Output |
' PORT B を出力に設定。 |
Config Timer0 = Timer , Prescale = 1024 , Clear Timer = 1 , Compare A =
Toggle |
Ocr0a = 124 |
' 12,500Hz ÷ (50Hz × 2) = 125カウント-1 |
End |
' プログラムの終了。 |
|
|
書式例 |
Config Timer0 = Counter , Edge = Rising , Clear Timer = 1 , Compare A = Toggle |
|
@ A B C |
@ Config Timer0 = Counter
・タイマー0をCOUNTERモードに設定します。
・この記述だけでは、タイマー0はまだ何も動作しません。
・また、[= Counter] と [= Timer] は名目上の書式のため、どちらを書いても動作に違いが出ません
ので注意して下さい。
A Edge = Rising | Falling
・タイマー0の計数に使用する外部クロックの、エッジ方向を選択します。
|
Rising |
外部クロックの、立ち上がりエッジでカウント。 |
Falling |
外部クロックの、立ち下がりエッジでカウント。 |
|
|
・この書式により、タイマー0が動作開始しますので、必ず記述が必要です。
・事実上この書式が、COUNTERモードとTIMERモードを識別します。
これ以降は、タイマー0に比較器 [OCR0x] を搭載しているチップにのみ有効な書式です。
B C は、「1. TIMERモード」と同じです。
(プログラム例)
・ATtiny2313を使用し、PD4 [T0] ピンから入力したパルスを、1/100してPB2 [OC0A] ピンから
出力します。
|
$regfile = "ATtiny2313.DAT" |
' AVRデバイスを"ATtiny2313"に設定。 |
$crystal = 8000000 |
' クロック周波数を8MHzに設定。 |
Config Portd.4 = Input |
' [T0] ピンを入力に設定。 |
Config Portb.2 = Output |
' パルスの出力ポート[OC0A] を出力に設定。 |
Config Timer0 = Counter , Edge = Rising , Clear Timer = 1 , Compare A =
Toggle |
Ocr0a = 49 |
' 100 ÷ 2 = 50カウント - 1 |
End |
' プログラムの終了。 |
|
|
3. PWMモード (Pulse Width Modulation) (タイマー 0) |
書式例 |
Config Timer0 = Pwm , Prescale = 1 , Clear Timer = 1 , Compare A
Pwm = Clear Down |
@ A B C |
PWMモードは、タイマー0に比較器 [OCR0x] を搭載しているチップにのみ有効な書式です。
@ Config Timer0 = Pwm
・タイマー0をPWMモードに設定します。
・この記述だけでは、タイマーはまだ何も動作しません。
A-1 Prescale = 1|8|64|256|1024
・タイマー0の計数に使用するAVRの動作クロックを、プリスケーラ(前段分周器)で分周する値を
設定します。 (1は分周なしです)
・一部のチップでは、1|8|32|64|128|256|1024 の設定が可能です。
A-2 Edge = Rising | Falling
・タイマー0の計数に、外部クロックを使用する場合はこちらを記述し、エッジ方向を選択します。
|
Rising |
外部クロックの、立ち上がりエッジでカウント。 |
Falling |
外部クロックの、立ち下がりエッジでカウント。 |
|
|
○ 「Prescale =」 と 「Edge =」 のどちらかの書式により、タイマー0が動作開始しますので、
必ず記述が必要です。
B Clear Timer = 0|1
・この記述は、PWMモードにおいて、タイマーのクリア動作と使い方が変わります。
|
0 |
− 位相基準PWMモード。 (Phase Correct PWM Mode) |
1 |
− 高速PWMモード。 (Fast PWM Mode) |
|
|
C Compare (A)(B) Pwm = Clear Up | Clear Down | Disconnect
・比較出力 [OC0x] ピンを使用し、タイマー動作をポートピンへ出力する場合に記述します。 ・このピンを使用する場合は、「Config Port」命令で [OC0x] のポートピンを出力に設定して下さい。
|
Compare Pwm = |
比較器が1つのチップの場合。 |
Compare A Pwm = |
比較器Aを設定します。 |
Compare B Pwm = |
比較器Bを設定します。 |
|
|
|
Clear Up |
上昇計数時の一致発生でL(0)、下降計数時の一致発生でH(1)にします。
高速PWMモードでは、比較一致発生でL(0)、BOTTOMでH(1)。 |
Clear Down |
上昇計数時一致発生でH(1)、下降計数時一致発生でL(0)にします。
高速PWMモードでは、比較一致発生でH(1)、BOTTOMでL(0)。 |
Disconnect |
[OC0x] ピンを使用しません。 [OC0x] ピンは通常のポート。 (デフォルト) |
|
|
・比較器A [OCR0A] を周波数調整(分周器)に使用する場合は、下記の書式にして下さい。
([WGM02] = 1 の、位相基準PWM動作と高速PWM動作)
Compare A = Clear | Set | Toggle | Disconnect
|
Clear |
一致発生で、[OC0A] ピンをL(0)にします。 |
Set |
一致発生で、[OC0A] ピンをH(1)にします。 |
Toggle |
一致発生で、[OC0A] ピンを反転します。 分周パルス出力。 |
Disconnect |
[OC0A] ピンを使用しません。 [OC0A] ピンは通常のポート。 (デフォルト) |
|
|
(プログラム例)
・ATtiny2313のクロックに8MHzを使用し、タイマー0で周波数1KHzのパルス幅を、8μS〜992μSに
変化させて、PD5 [OC0B] ピンから出力します。
(1) クロック8MHzを、プリスケーラで1/64分周します。 8,000,000Hz ÷ 64 = 125,000Hz
(2) 比較器A [OCR0A] を使用し、1/125分周します。 125,000Hz ÷ 1,000Hz = 125カウント - 1
(3) 比較器B [OCR0B] を使用し、パルス幅を0〜123の値で、8μS〜992μSに変化させます。
|
$regfile = "ATtiny2313.DAT" |
' AVRデバイスを"ATtiny2313"に設定。 |
$crystal = 8000000 |
' クロック周波数を8MHzに設定。 |
Config Portd.5 = Output |
' パルスの出力ポート[OC0B] を出力に設定。 |
Config Timer0 = Pwm , Prescale = 64 , Clear Timer = 1 , Compare B Pwm =
Clear Up |
Set Tccr0b.wgm02 |
' 高速PWMモード。 (TOP = OCR0A) |
Ocr0a = 124 |
' 125,000Hz ÷ 1,000Hz = 125カウント-1 |
Ocr0b = 0 |
' パルス幅。(初期値) 1カウントは8μS。 |
Dim Pw As Byte |
' パルス幅用の変数を宣言。 |
' |
' |
Do |
' 繰り返し。 |
For Pw = 0 To 123 |
' パルス幅を8μS〜992μSまで広げる。 |
Ocr0b = Pw |
' パルス幅を設定。 |
Waitms 20 |
' 待ち時間。 |
Next Pw |
' |
Loop |
' |
End |
' プログラムの終了。 |
|
|
○ タイマー0に数値を入れる または 取り出す場合。
・T = Timer0 変数Tに、TIMER0 [TCNT0] の値を読み込みます。
・Timer0 = 128 TIMER0 [TCNT0] に数値を設定します。
・[TIMER0] と [TCNT0] は、同じ扱いです。
○ 比較器に数値を入れる場合。
1.比較器が1つのチップ
・COMPARE0 = 128 比較器 [OCR0] に数値を設定します。
・[COMPARE0] , [OCR0] は、同じ扱いです。
2.比較器がA , B 2つのチップ
・OCR0A = 128 比較器A [OCR0A] に数値を設定します。
・[OCR0A] , [COMPARE0A] , [PWM0A] は、同じ扱いです。 (新バージョンから)
・OCR0B = 128 比較器B [OCR0B] に数値を設定します。
・[OCR0B] , [COMPARE0B] , [PWM0B] は、同じ扱いです。 (新バージョンから)
○ 比較器の設定値 変更タイミング。
タイマーの動作中に、周波数やパルス幅を変えるため、比較器の設定値を変更する場合は、
比較器が更新されるタイミングに注意が必要です。
・オーバーフロー割り込みや、比較一致割り込みで変更する。
・比較器 [OCR0x] の更新が、BOTTOMで行われるタイマーモードを使用する。
(更新が、設定時やTOPで行われるモードでは、比較ミスが起きる場合があります)
|
BASCOM-AVRは、新しいチップに追加された、新たなタイマーモードに追従していません。
基本仕様は、AT90Sクラスのものですから、これ以降のモードを使用する場合には工夫が必要です。
|
○ ATtiny2313 ・ ATmega88 の設定例。
WGM02 |
WGM01 |
WGM00 |
動作モード |
TIMER0
[TCNT0]
TOP値 |
比較器
[OCR0x]
の更新 |
オーバーフロー
割込要求フラグ
[TOV0] |
0 |
0 |
0 |
標準動作 |
$FF |
設定時 |
MAX |
0 |
0 |
1 |
8ビット位相基準PWM動作 |
$FF |
TOP |
BOTTOM |
0 |
1 |
0 |
比較一致 CTC動作 |
OCR0A |
設定時 |
MAX |
0 |
1 |
1 |
8ビット高速PWM動作 |
$FF |
BOTTOM |
MAX |
1 |
0 |
0 |
--- |
--- |
--- |
--- |
1 |
0 |
1 |
位相基準PWM動作 |
OCR0A |
TOP |
BOTTOM |
1 |
1 |
0 |
--- |
--- |
--- |
--- |
1 |
1 |
1 |
高速PWM動作 |
OCR0A |
BOTTOM |
TOP |
|
MAX
= $FF
BOTTOM
= $00 |
|
[WGM02] ビットは、SET命令でレジスタに直接設定します。
Config Timer 命令 |
WGM02 |
WGM01 |
WGM00 |
Config Timer0 = Timer
Config Timer0 = Counter |
--- |
0 |
0 |
Config Timer0 = Pwm |
--- |
0 |
1 |
Clear Timer = 0 |
--- |
0 |
--- |
Clear Timer = 1 |
--- |
1 |
--- |
レジスタに直接設定 |
|
|
|
Reset TCCR0B.WGM02 |
0 |
--- |
--- |
Set TCCR0B.WGM02 |
1 |
--- |
--- |
|
|
○動作モードの解説
・標準動作
0〜255の範囲でTimer0を動作させ、OCR0A・OCR0Bの設定値により、OC0A・OC0B(タイマー出力)に
パルス幅を調整した波形を出力できます。
また、OCF0A・OCF0Bにより割り込みを発生できます。
・比較一致 CTC動作
Timer0(TCNT0)がOCR0Aの設定値と等しくなった時に、Timer0(TCNT0)をクリア(00)にします。
これにより、Timer0での任意の分周値が設定でき、標準動作と同じく波形出力もできます。
・8ビット高速PWM動作
0〜255の範囲でTimer0を動作させ、OCR0A・OCR0Bの設定値により、OC0A・OC0B(タイマー出力)に
PWM(パルス幅変調)波形を出力できます。
また、OCF0A・OCF0Bにより割り込みを発生できます。
・高速PWM動作
OCR0Aの設定値を搬送波(キャリア)周波数に設定し、OC0B(タイマー出力)にPWM(パルス幅変調)
波形を出力できます。
また、OCF0A・OCF0Bにより割り込みを発生できます。
CTC動作との違いは、比較器の設定値が「TCNT0」のBOTTOM(00)の時に更新されるので、波形に
傷が付かないことです。
・8ビット位相基準PWM動作
0〜255・255〜0の範囲でTimer0を動作させ、OCR0A・OCR0Bの設定値により、OC0A・OC0B
(タイマー出力)にPWM(パルス幅変調)波形を出力します。
また、OCF0A・OCF0Bにより割り込みを発生できます。
・位相基準PWM動作
OCR0Aの設定値を搬送波(キャリア)周波数に設定し、0〜OCR0A・OCR0A〜0の範囲でTimer0を
動作させ、OC0B(タイマー出力)にPWM(パルス幅変調)波形を出力します。
また、OCF0A・OCF0Bにより割り込みを発生できます。
|
● タイマー 1 (16ビット仕様についての解説) |
書式例 |
Config Timer1 = Timer , Prescale = 1 , Clear Timer = 1 , Compare A = Toggle |
|
@ A B C |
@ Config Timer1 = Timer
・タイマー1をTIMERモードに設定します。
・この記述だけでは、タイマーはまだ何も動作しません。
・また、[= Timer] と [= Counter] は名目上の書式のため、どちらを書いても動作に違いが出ません
ので注意して下さい。
A Prescale = 1|8|64|256|1024
・タイマー1の計数に使用するAVRの動作クロックを、プリスケーラ(前段分周器)で分周する値を
設定します。 (1は分周なしです)
・この書式により、タイマー1が動作開始しますので、必ず記述が必要です。
・事実上この書式が、TIMERモードとCOUNTERモードを識別します。
B Clear Timer = 0|1
・比較器A [OCR1A] または キャプチャーレジスタ [ICR1] を使用する場合で、TIMER1 [TCNT1] と
比較器A または キャプチャーレジスタが一致した時に、TIMER1 [TCNT1] を、$0000にクリアするか
しないかの選択です。
|
0 |
− オーバーフロー動作。 |
TIMER1 [TCNT1] をクリアしない。 (デフォルト)
(TIMER1 [TCNT1] は、$0000〜$FFFF を繰り返します) |
1 |
− 比較一致 CTC動作。 |
TIMER1 [TCNT1] をクリアする。
(TIMER1 [TCNT1] は、$0000〜OCR1A(ICR1)値を繰り返します) |
|
|
C Compare (A)(B)(C) = Clear | Set | Toggle | Disconnect
・比較出力 [OC1x] ピンを使用し、タイマー動作をポートピンへ出力する場合に記述します。
・このピンを使用する場合は、「Config Port」命令で [OC1x] のポートピンを出力に設定して下さい。
|
Compare A = |
比較器Aを設定します。 |
Compare B = |
比較器Bを設定します。 |
|
|
|
Clear |
一致発生で、[OC1x] ピンをL(0)にします。 |
Set |
一致発生で、[OC1x] ピンをH(1)にします。 |
Toggle |
一致発生で、[OC1x] ピンを反転します。 分周パルス出力。 |
Disconnect |
[OC1x] ピンを使用しません。 [OC1x] ピンは通常のポート。 (デフォルト) |
|
|
(プログラム例)
・ATtiny2313のクロックに12.8MHz Xtalを使用し、タイマー1で1秒間隔の割り込みを発生します。
(1) クロック12.8MHzを、プリスケーラで1/1024分周します。 12,800,000Hz ÷ 1024 = 12,500Hz
(2) 比較器A [OCR1A] を使用し、1/12500分周します。 12,500Hz ÷ 12,500 = 1Hz
|
$regfile = "ATtiny2313.DAT" |
' AVRデバイスを"ATtiny2313"に設定。 |
$crystal = 12800000 |
' クロック周波数を12.8MHzに設定。 |
Config Timer1 = Timer , Prescale = 1024 , Clear Timer = 1 |
Compare1a = 12499 |
' 12,500カウント - 1 |
On Compare1a Tint1 |
' 比較一致割り込みルーチンのラベルを設定。 |
Enable Compare1a |
' TIMER1比較一致割り込みを許可。 |
Enable Interrupts |
' すべての割り込みを許可。 |
Do |
' 繰り返し処理。 |
Loop |
' メインルーチンの処理。 |
' |
|
Tint1: |
' TIMER1比較一致割り込み処理ルーチン。 |
' |
' 時刻カウントルーチンなど。 |
Return |
' 割り込み処理ルーチンの終了。 |
End |
' プログラムの終了。 |
|
|
書式例 |
Config Timer1 = Counter , Edge = Rising , Clear Timer = 1 , Compare A =
Toggle |
|
@ A B C |
@ Config Timer1 = Counter
・タイマー1をCOUNTERモードに設定します。
・この記述だけでは、タイマー1はまだ何も動作しません。
・また、[= Counter] と [= Timer] は名目上の書式のため、どちらを書いても動作に違いが出ません
ので注意して下さい。
A Edge = Rising | Falling
・タイマー1の計数に使用する外部クロックの、エッジ方向を選択します。
|
Rising |
外部クロックの、立ち上がりエッジでカウント。 |
Falling |
外部クロックの、立ち下がりエッジでカウント。 |
|
|
・この書式により、タイマー1が動作開始しますので、必ず記述が必要です。
・事実上この書式が、COUNTERモードとTIMERモードを識別します。
B C は、「1. TIMERモード」と同じです。
(プログラム例)
・ATtiny2313を使用し、PD5 [T1] ピンから入力したパルスが、100個になるたびに割り込みを
発生します。
|
$regfile = "ATtiny2313.DAT" |
' AVRデバイスを"ATtiny2313"に設定。 |
$crystal = 8000000 |
' クロック周波数を8MHzに設定。 |
Config Portd.5 = Input |
' [T1] ピンを入力に設定。 |
Config Timer1 = Counter , Edge = Rising , Clear Timer = 1 |
Compare1a = 99 |
' 100カウント - 1 |
On Compare1a Tint1 |
' 比較一致割り込みルーチンのラベルを設定。 |
Enable Compare1a |
' TIMER1比較一致割り込みを許可。 |
Enable Interrupts |
' すべての割り込みを許可。 |
Do |
' 繰り返し処理。 |
Loop |
' メインルーチンの処理。 |
' |
|
Tint1: |
' TIMER1比較一致割り込み処理ルーチン。 |
' |
' パルスが100個になった処理ルーチン。 |
Return |
' 割り込み処理ルーチンの終了。 |
End |
' プログラムの終了。 |
|
|
3. PWMモード (Pulse Width Modulation) (タイマー 1) |
書式例 |
Config Timer1 = Pwm , Prescale = 1 , Pwm = 10 , Clear Timer = 1 ,
Compare A Pwm = Clear Down |
@ A D B C |
@ Config Timer1 = Pwm
・タイマー1をPWMモードに設定します。
・この記述だけでは、タイマーはまだ何も動作しません。
A-1 Prescale = 1|8|64|256|1024
・タイマー1の計数に使用するAVRの動作クロックを、プリスケーラ(前段分周器)で分周する値を
設定します。 (1は分周なしです)
A-2 Edge = Rising | Falling
・タイマー1の計数に、外部クロックを使用する場合はこちらを記述し、エッジ方向を選択します。
|
Rising |
外部クロックの、立ち上がりエッジでカウント。 |
Falling |
外部クロックの、立ち下がりエッジでカウント。 |
|
|
○ 「Prescale =」 と 「Edge =」 のどちらかの書式により、タイマー1が動作開始しますので、
必ず記述が必要です。
D Pwm = 8|9|10
・タイマー1の計数範囲を、標準の16ビットから、8ビット、9ビット、10ビットに変更することができます。
|
8 |
− 8ビットの範囲。 ($0000〜$00FF) |
9 |
− 9ビットの範囲。 ($0000〜$01FF) |
10 |
− 10ビットの範囲。 ($0000〜$03FF) |
|
|
B Clear Timer = 0|1
・この記述は、PWMモードにおいて、タイマーのクリア動作と使い方が変わります。
|
0 |
− 位相基準PWMモード。 (Phase Correct PWM Mode) |
1 |
− 高速PWMモード。 (Fast PWM Mode) |
|
|
C Compare (A)(B) Pwm = Clear Up | Clear Down | Disconnect
・比較出力 [OC1x] ピンを使用し、タイマー動作をポートピンへ出力する場合に記述します。
・このピンを使用する場合は、「Config Port」命令で [OC1x] のポートピンを出力に設定して下さい。
|
Compare A Pwm = |
比較器Aを設定します。 |
Compare B Pwm = |
比較器Bを設定します。 |
|
|
|
Clear Up |
上昇計数時の一致発生でL(0)、下降計数時の一致発生でH(1)にします。
高速PWMモードでは、比較一致発生でL(0)、BOTTOMでH(1)。 |
Clear Down |
上昇計数時一致発生でH(1)、下降計数時一致発生でL(0)にします。
高速PWMモードでは、比較一致発生でH(1)、BOTTOMでL(0)。 |
Disconnect |
[OC1x] ピンを使用しません。 [OC1x] ピンは通常のポート。 (デフォルト) |
|
|
・比較器A [OCR1A] を周波数調整(分周器)に使用する場合は、下記の書式にして下さい。
([WGM13] = 1 の、位相基準PWM動作と高速PWM動作)
Compare A = Clear | Set | Toggle | Disconnect
|
Clear |
一致発生で、[OC1A] ピンをL(0)にします。 |
Set |
一致発生で、[OC1A] ピンをH(1)にします。 |
Toggle |
一致発生で、[OC1A] ピンを反転します。 分周パルス出力。 |
Disconnect |
[OC1A] ピンを使用しません。 [OC1A] ピンは通常のポート。 (デフォルト) |
|
|
(プログラム例)
・ATtiny2313のクロックに8MHzを使用し、ラジコン用のサーボモーターを制御します。
信号周期 = 50Hz (20mS) パルス範囲 = 1.5mS±0.5mS (1mS〜2mS) 出力ポート PB4
(1) クロック8MHzを、プリスケーラで1/64分周します。 8,000,000Hz ÷ 64 = 125,000Hz
(2) 比較器A [OCR1A] を使用し、1/2500分周します。 125,000Hz ÷ 50Hz = 2500カウント - 1
(3) 比較器B [OCR1B] を使用し、パルス幅を124〜249の値で、1mS〜2mSに変化させます。
|
$regfile = "ATtiny2313.DAT" |
' AVRデバイスを"ATtiny2313"に設定。 |
$crystal = 8000000 |
' クロック周波数を8MHzに設定。 |
Config Portb.4 = Output |
' パルスの出力ポート[OC1B] を出力に設定。 |
Config Timer1 = Pwm , Prescale = 64 , Clear Timer = 1 , Compare B Pwm =
Clear Up |
Set Tccr1a.wgm11 |
' 高速PWMモード。 (TOP = OCR1A) |
Set Tccr1b.wgm13 |
' 高速PWMモード。 (TOP = OCR1A) |
Compare1a = 2499 |
' 125,000Hz ÷ 50Hz = 2500カウント - 1 |
Compare1b = 187 |
' パルス幅。(初期値) 1カウントは8μS。 |
Dim Pw As Byte |
' パルス幅用の変数を宣言。 |
' |
' |
Do |
' 繰り返し。 |
For Pw = 124 To 249 |
' パルス幅を1mS〜2mSまで変化させる。 |
Compare1b = Pw |
' パルス幅を設定。 |
Waitms 10 |
' 待ち時間。 |
Next Pw |
' |
For Pw = 249 To 124 Step -1 |
' パルス幅を2mS〜1mSまで変化させる。 |
Compare1b = Pw |
' パルス幅を設定。 |
Waitms 10 |
' 待ち時間。 |
Next Pw |
' |
Loop |
' |
End |
' プログラムの終了。 |
|
|
書式例 |
Config Timer1 = Timer , Prescale = 8 , Capture Edge = Rising , Noise Cancel
= 1 |
|
@ A E F |
@ Config Timer1 = Timer
・タイマー1をTIMERモードに設定します。
・この記述だけでは、タイマーはまだ何も動作しません。
A Prescale = 1|8|64|256|1024
・タイマー1の計数に使用するAVRの動作クロックを、プリスケーラ(前段分周器)で分周する値を
設定します。 (1は分周なしです)
・この書式により、タイマー1が動作開始しますので、必ず記述が必要です。
E Capture Edge = Rising | Falling
・キャプチャー入力 [ICP] ピン または アナログ比較器の状態変化で、TIMER1 [TCNT1] の
カウント値を、キャプチャーレジスタ [ICR1] にコピーする際の、信号のエッジ方向を選択します。
|
Rising |
ICP1ピン または アナログ比較器の、立ち上がりエッジでキャプチャー。 |
Falling |
ICP1ピン または アナログ比較器の、立ち下がりエッジでキャプチャー。 |
|
|
F Noise Cancel = 0|1
・キャプチャー入力 [ICP] ピン または アナログ比較器からの信号に、ノイズ除去機能を加えます。
|
0 |
− ノイズ除去機能をオフにします。 |
1 |
− ノイズ除去機能をオンにします。 |
|
|
|
○ タイマー1に数値を入れる または 取り出す場合。
・T = Timer1 ワード型変数Tに、TIMER1 [TCNT1] の値を読み込みます。
・Timer1 = 1234 TIMER1 [TCNT1] に数値を設定します。
・[TIMER1] と [TCNT1] は、同じ扱いです。
○ 比較器に数値を入れる場合。
・Compare1a = 1234 比較器A [OCR1A] に数値を設定します。
・[COMPARE1A] , [OCR1A] は、同じ扱いです。
・Compare1b = 1234 比較器B [OCR1B] に数値を設定します。
・[COMPARE1B] , [OCR1B] は、同じ扱いです。
○ キャプチャーレジスターに数値を入れる または 取り出す場合。
・C = Capture1 ワード型変数Cに、キャプチャーレジスタ [ICR1] の値を読み込みます。
・Capture1 = 1234 キャプチャーレジスタ [ICR1] に数値を設定します。
・[CAPTURE1] と [ICR1] は、同じ扱いです。
○ 比較器の設定値 変更タイミング。
タイマーの動作中に、周波数やパルス幅を変えるため、比較器の設定値を変更する場合は、
比較器が更新されるタイミングに注意が必要です。
・オーバーフロー割り込みや、比較一致割り込みで変更する。
・比較器 [OCR1x] の更新が、BOTTOMで行われるタイマーモードを使用する。
(更新が、設定時やTOPで行われるモードでは、比較ミスが起きる場合があります)
|
BASCOM-AVRは、新しいチップに追加された、新たなタイマーモードに追従していません。
基本仕様は、AT90Sクラスのものですから、これ以降のモードを使用する場合には工夫が必要です。
|
○ ATtiny2313 ・ ATmega88 の設定例。
WGM13 |
WGM12 |
WGM11 |
WGM10 |
動作モード |
TIMER1
[TCNT1]
TOP値 |
比較器
[OCR1x]
の更新 |
オーバーフロー
割込要求フラグ
[TOV1] |
0 |
0 |
0 |
0 |
標準動作 |
$FFFF |
設定時 |
MAX |
0 |
0 |
0 |
1 |
8ビット位相基準PWM動作 |
$00FF |
TOP |
BOTTOM |
0 |
0 |
1 |
0 |
9ビット位相基準PWM動作 |
$01FF |
TOP |
BOTTOM |
0 |
0 |
1 |
1 |
10ビット位相基準PWM動作 |
$03FF |
TOP |
BOTTOM |
0 |
1 |
0 |
0 |
比較一致 CTC動作 |
OCR1A |
設定時 |
MAX |
0 |
1 |
0 |
1 |
8ビット高速PWM動作 |
$00FF |
BOTTOM |
TOP |
0 |
1 |
1 |
0 |
9ビット高速PWM動作 |
$01FF |
BOTTOM |
TOP |
0 |
1 |
1 |
1 |
10ビット高速PWM動作 |
$03FF |
BOTTOM |
TOP |
1 |
0 |
0 |
0 |
位相・周波数基準PWM動作 |
ICR1 |
BOTTOM |
BOTTOM |
1 |
0 |
0 |
1 |
位相・周波数基準PWM動作 |
OCR1A |
BOTTOM |
BOTTOM |
1 | 0 |
1 |
0 |
位相基準PWM動作 |
ICR1 |
TOP |
BOTTOM |
1 |
0 |
1 |
1 |
位相基準PWM動作 |
OCR1A |
TOP |
BOTTOM |
1 |
1 |
0 |
0 |
比較一致 CTC動作 |
ICR1 |
設定時 |
MAX |
1 |
1 |
0 |
1 |
--- |
--- |
--- |
--- |
1 |
1 |
1 |
0 |
高速PWM動作 |
ICR1 |
BOTTOM |
TOP |
1 |
1 |
1 |
1 |
高速PWM動作 |
OCR1A |
BOTTOM |
TOP |
MAX = $FFFF BOTTOM = $0000 |
|
[WGM11] [WGM13] ビットは、SET命令でレジスタに直接設定します。
Config Timer 命令 |
WGM13 |
WGM12 |
WGM11 |
WGM10 |
Config Timer1 = Timer
Config Timer1 = Counter |
0 |
0 |
0 |
0 |
Config Timer1 = Pwm |
0 |
0 |
0 |
1 |
Pwm = 8 |
--- |
--- |
0 |
1 |
Pwm = 9 |
--- |
--- |
1 |
0 |
Pwm = 10 |
--- |
--- |
1 |
1 |
Clear Timer = 0 |
--- |
0 |
--- |
--- |
Clear Timer = 1 |
--- |
1 |
--- |
--- |
レジスタに直接設定 |
|
|
|
|
Reset TCCR1A.WGM11 |
--- |
--- |
0 |
--- |
Set TCCR1A.WGM11 |
--- |
--- |
1 |
--- |
Reset TCCR1B.WGM13 |
0 |
--- |
--- |
--- |
Set TCCR1B.WGM13 |
1 |
--- |
--- |
--- |
|
○動作モードの解説
・標準動作
0〜65535の範囲でTimer1を動作させ、OCR1A・OCR1Bの設定値により、OC1A・OC1B(タイマー
出力)にパルス幅を調整した波形を出力できます。
また、OCF1A・OCF1Bにより割り込みを発生できます。
・比較一致 CTC動作
Timer1(TCNT1)がOCR1Aの設定値と等しくなった時に、Timer1(TCNT1)をクリア(0000)にします。
これにより、Timer1での任意の分周値が設定でき、標準動作と同じく波形出力もできます。
・8 , 9 , 10 ビット高速PWM動作
0〜255 , 0〜511 , 0〜1023の範囲でTimer1を動作させ、OCR1A・OCR1Bの設定値により、
OC1A・OC1B(タイマー出力)にPWM(パルス幅変調)波形を出力できます。
また、OCF1A・OCF1Bにより割り込みを発生できます。
・高速PWM動作
OCR1AまたはICR1の設定値を搬送波(キャリア)周波数に設定し、OC1A・OC1B(タイマー出力)に
PWM(パルス幅変調)波形を出力できます。
また、OCF1A・OCF1Bにより割り込みを発生できます。
CTC動作との違いは、比較器の設定値が「TCNT1」のBOTTOM(0000)の時に更新されるので、
波形に傷が付かないことです。
・8 , 9 , 10 ビット位相基準PWM動作
(0〜255,255〜0),(0〜511,511〜0),(0〜1023,1023〜0)の範囲でTimer1を動作させ、OCR1A・
OCR1Bの設定値により、OC1A・OC1B(タイマー出力)にPWM(パルス幅変調)波形を出力します。
また、OCF1A・OCF1Bにより割り込みを発生できます。
・位相基準PWM動作
OCR1AまたはICR1の設定値を搬送波(キャリア)周波数に設定し、0〜OCR0A・OCR0A〜0
(0〜ICR1・ICR1〜0)の範囲でTimer1を動作させ、OC1B(タイマー出力)にPWM(パルス幅変調)
波形を出力します。
比較器の設定値は、「TCNT1」のTOP(OCR1AまたはICR1)で更新されます。
また、OCF1A・OCF1Bにより割り込みを発生できます。
・位相・周波数基準PWM動作
基本動作は「位相基準PWM動作」と同じですが、比較器の設定値が「TCNT1」のBOTTOM(0000)の
時に更新されるので、搬送波(キャリア)周波数の変更に対する出力波形の傷が無くなります。
|
書式例 |
Config Timer2 = Timer , Prescale = 1 , Async = On , Clear Timer = 1 , Compare
A = Set |
@ A G B C
|
@ Config Timer2 = Timer
・タイマー2をTIMERモードに設定します。
・この記述だけでは、タイマーはまだ何も動作しません。
・また、[= Timer] と [= Counter] は名目上の書式のため、どちらを書いても動作に違いが出ません
ので注意して下さい。
A Prescale = 1|8|32|64|128|256|1024
・タイマー2の計数に使用するAVRの動作クロックを、プリスケーラ(前段分周器)で分周する値を
設定します。 (1は分周なしです)
・一部のチップでは、1|8|64|256|1024 の設定です。 (タイマー2に外部クロック入力がある場合)
・この書式により、タイマー2が動作開始しますので、必ず記述が必要です。
・事実上この書式が、TIMERモードとCOUNTERモードを識別します。
GAsync = Off | On
・[TOSC1] と [TOSC2] ピンに、外部発振素子(クリスタル等)を接続する場合に記述します。
・タイマーの計数クロックに、AVRの動作クロックとは別の周波数が使用できます。 (非同期)
・一部のチップに搭載されている、外部非同期クロック入力([TOSC1] ピンへの直接入力)には
対応していませんので、直接レジスタ([EXCLK] ビット)を設定して下さい。
・この書式を記述しない場合は、デフォルトで(Off)になります。
|
Off |
− タイマー2の計数クロックに、AVRの動作クロックを使用します。 (デフォルト) |
On |
− タイマー2の計数クロックに、外部発振素子の非同期クロックを使用します。 |
|
|
B Clear Timer = 0|1
・比較器 [OCR2x] を使用する場合で、TIMER2 [TCNT2] と比較器 [OCR2x] が一致した時に、
TIMER2 [TCNT2] を、$00にクリアするかしないかの選択です。
|
0 |
− オーバーフロー動作。 |
TIMER2 [TCNT2] をクリアしない。 (デフォルト)
(TIMER2 [TCNT2] は、$00〜$FF を繰り返します) |
1 |
− 比較一致 CTC動作。 |
TIMER2 [TCNT2] をクリアする。
(TIMER2 [TCNT2] は、$00〜OCR2x値 を繰り返します) |
|
|
C Compare (A)(B) = Clear | Set | Toggle | Disconnect
・比較出力 [OC2x] ピンを使用し、タイマー動作をポートピンへ出力する場合に記述します。
・このピンを使用する場合は、「Config Port」命令で [OC2x] のポートピンを出力に設定して下さい。
|
Compare = |
比較器が1つのチップの場合。 |
Compare A = |
比較器Aを設定します。 |
Compare B = |
比較器Bを設定します。 |
|
|
|
Clear |
一致発生で、[OC2x] ピンをL(0)にします。 |
Set |
一致発生で、[OC2x] ピンをH(1)にします。 |
Toggle |
一致発生で、[OC2x] ピンを反転します。 分周パルス出力。 |
Disconnect |
[OC2x] ピンを使用しません。 [OC2x] ピンは通常のポート。 (デフォルト) |
|
|
(プログラム例)
・ATmega8535の、クロックは内蔵RC発振器1MHzで、[TOSC1] と [TOSC2] ピンに32.768KHz Xtalを
接続し、タイマー2で1秒間隔の割り込みを発生します。
参考回路 AVRマイコン ATmega88 + 蛍光表示管 LD8035E デジタル時計
(1) 外部Xtal 32.768KHzを、プリスケーラで1/128分周します。 32,768Hz ÷ 128 = 256Hz
(2) Timer2は8ビットなので、256カウントでオーバーフロー割り込みを発生させます。 (1/256)
|
$regfile = "m8535.dat" |
' AVRデバイスを"ATmega8535"に設定。 |
$crystal = 1000000 |
' クロック周波数を1MHzに設定。 |
Config Timer2 = Timer , Prescale = 128 , Async = On |
On Timer2 Tint2 |
' オーバーフロー割込ルーチンのラベルを設定。 |
Enable Timer2 |
' TIMER2オーバーフロー割り込みを許可。 |
Enable Interrupts |
' すべての割り込みを許可。 |
Do |
' 繰り返し処理。 |
Loop |
' メインルーチンの処理。 |
' |
|
Tint2: |
' TIMER2オーバーフロー割り込み処理ルーチン。 |
' |
' 時刻カウントルーチンなど。 |
Return |
' 割り込み処理ルーチンの終了。 |
End |
' プログラムの終了。 |
|
|
書式例 |
Config Timer2 = Counter , Edge = Rising , Clear Timer = 1 , Compare A =
Toggle |
|
@ A B C |
タイマー2のCOUNTERモードは、タイマー2に外部クロック入力 [T2] ピンを搭載しているチップにのみ
有効な書式です。
@ Config Timer2 = Counter
・タイマー2をCOUNTERモードに設定します。
・この記述だけでは、タイマー2はまだ何も動作しません。
・また、[= Counter] と [= Timer] は名目上の書式のため、どちらを書いても動作に違いが出ません
ので注意して下さい。
A Edge = Rising | Falling
・タイマー2の計数に使用する外部クロックの、エッジ方向を選択します。
|
Rising |
外部クロックの、立ち上がりエッジでカウント。 |
Falling |
外部クロックの、立ち下がりエッジでカウント。 |
|
|
・この書式により、タイマー2が動作開始しますので、必ず記述が必要です。
・事実上この書式が、COUNTERモードとTIMERモードを識別します。
B C は、「1. TIMERモード」の B C と同じです。
|
3. PWMモード (Pulse Width Modulation) (タイマー 2) |
書式例 |
Config Timer2 = Pwm , Prescale = 1 , Clear Timer = 1 , Compare A
Pwm = Clear Down |
@ A B C |
@ Config Timer2 = Pwm
・タイマー2をPWMモードに設定します。
・この記述だけでは、タイマーはまだ何も動作しません。
A Prescale = 1|8|32|64|128|256|1024
・タイマー2の計数に使用するAVRの動作クロックを、プリスケーラ(前段分周器)で分周する値を
設定します。 (1は分周なしです)
・一部のチップでは、1|8|64|256|1024 の設定です。 (タイマー2に外部クロック入力がある場合)
・この書式により、タイマー2が動作開始しますので、必ず記述が必要です。
B Clear Timer = 0|1
・この記述は、PWMモードにおいて、タイマーのクリア動作と使い方が変わります。
|
0 |
− 位相基準PWMモード。 (Phase Correct PWM Mode) |
1 |
− 高速PWMモード。 (Fast PWM Mode) |
|
|
C Compare (A)(B) Pwm = Clear Up | Clear Down | Disconnect
・比較出力 [OC2x] ピンを使用し、タイマー動作をポートピンへ出力する場合に記述します。
・このピンを使用する場合は、「Config Port」命令で [OC2x] のポートピンを出力に設定して下さい。
|
Compare Pwm = |
比較器が1つのチップの場合。 |
Compare A Pwm = |
比較器Aを設定します。 |
Compare B Pwm = |
比較器Bを設定します。 |
|
|
|
Clear Up |
上昇計数時の一致発生でL(0)、下降計数時の一致発生でH(1)にします。
高速PWMモードでは、比較一致発生でL(0)、BOTTOMでH(1)。 |
Clear Down |
上昇計数時一致発生でH(1)、下降計数時一致発生でL(0)にします。
高速PWMモードでは、比較一致発生でH(1)、BOTTOMでL(0)。 |
Disconnect |
[OC2x] ピンを使用しません。 [OC2x] ピンは通常のポート。 (デフォルト) |
|
|
・比較器A [OCR2A] を周波数調整(分周器)に使用する場合は、下記の書式にして下さい。
([WGM22] = 1 の、位相基準PWM動作と高速PWM動作)
Compare A = Clear | Set | Toggle | Disconnect
|
Clear |
一致発生で、[OC2A] ピンをL(0)にします。 |
Set |
一致発生で、[OC2A] ピンをH(1)にします。 |
Toggle |
一致発生で、[OC2A] ピンを反転します。 分周パルス出力。 |
Disconnect |
[OC2A] ピンを使用しません。 [OC2A] ピンは通常のポート。 (デフォルト) |
|
|
(プログラム例)
・タイマー0を参照。
|
○ タイマー2に数値を入れる または 取り出す場合。
・T = Timer2 変数Tに、TIMER2 [TCNT2] の値を読み込みます。
・Timer2 = 128 TIMER2 [TCNT2] に数値を設定します。
・[TIMER2] と [TCNT2] は、同じ扱いです。
○ 比較器に数値を入れる場合。 1.比較器が1つのチップ
・COMPARE2 = 128 比較器 [OCR2] に数値を設定します。
・[COMPARE2] , [OCR2] は、同じ扱いです。
2.比較器がA , B 2つのチップ
・OCR2A = 128 比較器A [OCR2A] に数値を設定します。
・[OCR2A] , [COMPARE2A] , [PWM2A] は、同じ扱いです。 (新バージョンから)
・OCR2B = 128 比較器B [OCR2B] に数値を設定します。
・[OCR2B] , [COMPARE2B] , [PWM2B] は、同じ扱いです。 (新バージョンから)
○ 比較器の設定値 変更タイミング。
タイマーの動作中に、周波数やパルス幅を変えるため、比較器の設定値を変更する場合は、
比較器が更新されるタイミングに注意が必要です。
・オーバーフロー割り込みや、比較一致割り込みで変更する。
・比較器 [OCR2x] の更新が、BOTTOMで行われるタイマーモードを使用する。
(更新が、設定時やTOPで行われるモードでは、比較ミスが起きる場合があります)
|
BASCOM-AVRは、新しいチップに追加された、新たなタイマーモードに追従していません。
基本仕様は、AT90Sクラスのものですから、これ以降のモードを使用する場合には工夫が必要です。
|
○ ATtiny2313 ・ ATmega88 の設定例。
WGM22 |
WGM21 |
WGM20 |
動作モード |
TIMER2
[TCNT2]
TOP値 |
比較器
[OCR2x]
の更新 |
オーバーフロー
割込要求フラグ
[TOV2] |
0 |
0 |
0 |
標準動作 |
$FF |
設定時 |
MAX |
0 |
0 |
1 |
8ビット位相基準PWM動作 |
$FF |
TOP |
BOTTOM |
0 |
1 |
0 |
比較一致 CTC動作 |
OCR2A |
設定時 |
MAX |
0 |
1 |
1 |
8ビット高速PWM動作 |
$FF |
BOTTOM |
MAX |
1 |
0 |
0 |
--- |
--- |
--- |
--- |
1 |
0 |
1 |
位相基準PWM動作 |
OCR2A |
TOP |
BOTTOM |
1 |
1 |
0 |
--- |
--- |
--- |
--- |
1 |
1 |
1 |
高速PWM動作 |
OCR2A |
BOTTOM |
TOP |
|
MAX
= $FF
BOTTOM
= $00 |
|
[WGM22] ビットは、SET命令でレジスタに直接設定します。
Config Timer 命令 |
WGM22 |
WGM21 |
WGM20 |
Config Timer2 = Timer
Config Timer2 = Counter |
--- |
0 |
0 |
Config Timer2 = Pwm |
--- |
0 |
1 |
Clear Timer = 0 |
--- |
0 |
--- |
Clear Timer = 1 |
--- |
1 |
--- |
レジスタに直接設定 |
|
|
|
Reset TCCR2B.WGM22 |
0 |
--- |
--- |
Set TCCR2B.WGM22 |
1 |
--- |
--- |
|
|
○動作モードの解説
・標準動作
0〜255の範囲でTimer2を動作させ、OCR2A・OCR2Bの設定値により、OC2A・OC2B(タイマー出力)に
パルス幅を調整した波形を出力できます。
また、OCF2A・OCF2Bにより割り込みを発生できます。
・比較一致 CTC動作
Timer2(TCNT2)がOCR2Aの設定値と等しくなった時に、Timer2(TCNT2)をクリア(00)にします。
これにより、Timer2での任意の分周値が設定でき、標準動作と同じく波形出力もできます。
・8ビット高速PWM動作
0〜255の範囲でTimer2を動作させ、OCR2A・OCR2Bの設定値により、OC2A・OC2B(タイマー出力)に
PWM(パルス幅変調)波形を出力できます。
また、OCF2A・OCF2Bにより割り込みを発生できます。
・高速PWM動作
OCR2Aの設定値を搬送波(キャリア)周波数に設定し、OC2B(タイマー出力)にPWM(パルス幅変調)
波形を出力できます。
また、OCF2A・OCF2Bにより割り込みを発生できます。
CTC動作との違いは、比較器の設定値が「TCNT2」のBOTTOM(00)の時に更新されるので、波形に
傷が付かないことです。
・8ビット位相基準PWM動作
0〜255・255〜0の範囲でTimer2を動作させ、OCR2A・OCR2Bの設定値により、OC2A・OC2B
(タイマー出力)にPWM(パルス幅変調)波形を出力します。
また、OCF2A・OCF2Bにより割り込みを発生できます。
・位相基準PWM動作
OCR2Aの設定値を搬送波(キャリア)周波数に設定し、0〜OCR2A・OCR2A〜0の範囲でTimer2を
動作させ、OC2B(タイマー出力)にPWM(パルス幅変調)波形を出力します。
また、OCF2A・OCF2Bにより割り込みを発生できます。
|
|