リファレンスによると、A/Dコンバータのサイクルで11cycle必要で、1cycleは1.6us以上を推奨となっているので、内臓の4MHzを8分周した2usを使うことにします。
すると、理論値は22usほどということになります。
変換はADCON0レジスタのGO_DONEビットをONにすると開始され、そのビットが0になれば変換は終了です。次のようなプログラムで実験です。
MAIN:
; 変換開始の合図(パルスを1つ)
bsf GPIO,GP4
bcf GPIO,GP4
bsf ADCON0, GO_DONE
ad_lp btfsc ADCON0, GO_DONE
goto ad_lp
; 変換終了の合図 (パルスを2つ)
bsf GPIO,GP4
bcf GPIO,GP4
bsf GPIO,GP4
bcf GPIO,GP4
; AD Converter の結果をカウンタに格納
movfw ADRESH
movwf COUNTER
off_wait
; カウンタ数*3STEP分の待ちループ
decfsz COUNTER,f
goto off_wait
goto MAIN
オシロで分かるようにするため、変換開始直前に1us幅のパルスを1つ、終了直後にパルスを2ついれてみました。

横軸は、5us/divですから、余計な命令のステップ分を除いて、およそ23~5usを要している感じですので、ほぼ計算通りのようです。
0 件のコメント:
コメントを投稿