2009年7月1日水曜日

A/Dコンバータの変換時間

12F675にはA/Dコンバータが入っています。 A/Dコンバータは入力の値によらず変換に要する時間は一定なのですが、はたしてその時間はどのくらいなのでしょうか。

リファレンスによると、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 件のコメント: