TIMER 2 の動作実験
TIMER 1の実験をしていました、その後TIMER 2も実験しましたがタイマーとしての作動は殆ど同じでした。16Bitの細かい設定は出来ませんがプリ・ポストスケラーを利用すると合計として16Bitになり、この辺は図を見ると分かります。設定の[T2CON]を指定するとTIMER 1のプログラムとほとんど同じ作動をします。単なるLEDの点滅など簡単な動作は置き換えが出来ます。
次のプログラムは[TIMER 1から2に変更]した物で、前のものを一部変更(赤文字)しただけで同じ動作をしました。begin call IOPORT ; movlw B'01111111' ; movwf T2CON ;TIMER2 CONTROL REGISTER b2 btfss PIR1,TMR2IF ;check flag goto $-1 bcf PIR1,TMR2IF ;clear flag movlw 0x08 ;LED position xorwf PORTB,F ;on-off goto b2 ;loop
TIMER 2のPWM動作
PWM(Pulse Width Modulation)は良く使うので、これも調べておき、簡単な実験をしておきます。今回もLEDの点滅で動作しているかを確認します。サンプルとしてはあまり良くありませんが・・・!基板は[以前の物(写真右側)]を利用しています。
PWM動作をさせるには設定がたくさんあって分かり難いです、実験したサンプルを見て参考にして下さい。
結果は左の図(PWM OUTPUT)のような信号が得られます。つまり間隔はPR2で、バルス幅はCCPR1Lを設定するとPWM信号が出来、CCP1端子に出力として出て来ます。
CCPR1Lを変更するとそれによってパルス幅が変更され、モータの回転や電球の明るさなどをコントロールするのに良く使われます。[ここで使った図は"Microchip Technology Inc"のマニアル(PIC16F818/819Data Sheet)から引用しました。詳しくは同社のsiteから!]
このPWM動作はタイマ/カウンタの応用になります、そちらの知識を先に覚えないと良く分からないかも知れません。
作動させるにはコンフィグの設定(CCP1=RB3とした)とかI/Oの設定(RB3を出力)等が条件になっています。従って、その辺を予めプログラムしておかないと作動しません。ハード的には16F819のHピンRB3に1KΩの抵抗を通して白色のLEDを付けてみました(従来の実験基板の再利用です)。
PWMが一度設定されると連続的に出力され、止めるにはCCP1CONのbit3-0をクリヤします。またT2CONのbit2をクリヤしてTIMER2をShut-offさせると節電出来ます。以下のプログラムはI/O設定後のメインプログラムです。
;-------------------------------------------- movlw B'00000101' ;2=Timer2 on 1=pre *4 movwf T2CON ;TIMER2 CONTROL REGISTER banksel PR2 movlw B'01000000' ;DATA=0x40 movwf PR2 ;92h set of Period banksel CCPR1L movlw B'00000010' ;DATA=0x02 movwf CCPR1L ;15h set of Duty cycle movlw B'00001100' ;PWM mode ON movwf CCP1CON ;17h b2 call WA_100M ;LED ON-OFF rlf CCPR1L,F goto b2 ;--------------------------------------------[b2]部分はLEDが「暗く点灯してから順に明るくなるまで」を繰り返すプログラムです(100mSecのタイマを入れているので、カクンカクンと少しぎこち無さもありますが……)。
LEDはかなりDUTY CYCLEが狭くても薄く見え、コントロールしても明るさの変化が少ないのが欠点です、逆にいえば感度が高いともいえます。
T2CON・PR2(要BANK切り替え)・CCPR1L・CCP1CONの設定が最低必要です。2007/MAY/22
もどる [MAIN MENU]