楽天市場
[無料でホームページを作成] [通報・削除依頼]

microchipのAN592に関する一考察


AN592に関する一考察


microchipのAN592で紹介されている方法は周波数カウンタを簡易に実装する方法として良く知られている。
img_20130118-145617.jpg



しかし、この方法をピン数の少ないPICに実装すると、ポートが占有されてしまう欠点がある。

I/Oポートを使用しないでAN592と同様のことを行う方法について考察する。


<PIC10F322に実装する場合の考え方>
◎外部信号の入力にはAN592同様TMR0(T0CKI)を使用する。使用するポートはT0CKIのみ、470Ω不要。
◎外部信号を遮断する方法としてTMR0のカウンタモード/タイマーモード切り替えを使用する。
◎プリスケーラーの値を読み出すパルスに内部クロック(Fosc/4)を使用する。
◎外部信号の遮断と同時にTMR2を起動させ、TMR0がオーバーフローしたらTMR2を停止する
(TMR2とTMR0のプリスケーラー を同じ周期で回せば、停止時のTMR2の1の補数がプリスケーラー値となるはず。)


<プログラム例>


ORG 0x0000

nop
nop
nop
goto INIT
;
ORG 0x0004 ;割り込みベクター

BCF T2CON,TMR2ON ;TMR2=OFF
BCF INTCON,TMR0IF ;TMR0割り込みフラグクリア
BSF IRF,0 ;割り込み完了フラグセット
RETFIE

INIT ;初期化
CLRF PORTA ;
CLRF LATA ;
CLRF ANSELA ;
MOVLW B'11111110' ;RA0のみ出力に設定
MOVWF TRISA ;PA0:TX RA1:CWG1B RA2:T0CKI PA3:RX

MOVLW B'00100111' ;TMR0=T0CKI,Prescale=265
MOVWF OPTION_REG ;

MOVLW B'0000000' ;TMR2=OFF,Prescale=1,Postscale=1
MOVWF T2CON ;
MOVLW 0xFF ;PR2=0xFF
MOVWF PR2 ;

BSF INTCON,GIE ;グローバル割り込みを許可





;TMR0の割り込みを許可
CLRF TMR2 ;TMR2=0
BCF INTCON,TMR0IF ;フラグクリア
BSF INTCON,TMR0IE ;TMR0割り込み許可
CLRF TMR0

;ゲート時間設定
call W100ms ;100ms Wait

BCF OPTION_REG,T0CS ;TMR0=Timer Mode
MOVF TMR0,W ;W=TMR0
BSF T2CON,TMR2ON ;TMR2=ON
MOVWF TMH ;TMH=TMR0

CLRF IRF ;割り込み待ち
BTFSS IRF,0 ;
GOTO $-1 ;

BCF INTCON,TMR0IE ;TMR0割り込み禁止

COMF TMR2,W ;TML=/TMR2
MOVWF TML ;

MOVLW 0x04 ;補正値4
ADDWF TML,F ;
BTFSC STATUS,C ;
INCF TMH,F ;

CALL _bin2bcd ;バイナリーBCD変換

MOVF bcdH,W ;BCD値を表示
CALL H2B ;
SWAPF bcdM,W ;
CALL H2B ;
MOVF bcdM,W ;
CALL H2B ;
SWAPF bcdL,W ;
CALL H2B ;
MOVF bcdL,W ;
CALL H2B ;

GOTO $




<実例>
HFINTOSC (16MHz)をNCOのFDCモードで32分周 (λ=4μs)
これを内部でCWG1Bに接続し、RA1ピンから出力した信号を
T0CKI(RA2)に入力した時のカウント結果(ゲート時間100ms)
周波数=250kHz

img_20130118-145725.jpg










































































.