簡易A/D変換の制御法

1.簡易A/D変換とは?

簡易A/D変換とは、A/D変換の入力ポートが無いPICで、ボリュームなどの
位置を入力する方法です。ボリュームだけでなく、8ビット程度の精度の
アナログ信号の測定は、この方法で出来ます。


2.PICとボリュームとの接続と原理

PIC16F84で簡易A/D変換を実現するための接続は下図の様にします。


この接続での動作は下記とします。
まず、RB4を入力モード、RB3を
出力モードに設定します。

次に、RB3に「1」を出力してコンデンサ
C1を充電します。十分充電できる時間
が経ったあとでRB3を「0」にすると
放電が始まります。

その瞬間から、RB4を繰り返し入力し
入力が「0」になるまでの時間を計測
します。
この「0」になるまでの時間は、VRの
値に比例するので、この時間値が
結果としてA/D変換したディジタル値と
なります。
この様子を図にすると下図の様になります。


 

3.具体的プログラム例 

この回路でA/D変換をするためのプログラムは下記のようにします。
時間測定のためには、単純にループでカウントをします。その間
コンデンサの電圧入力ピンを常時監視し、「0」になった所で終了と
します。カウント値が8ビットをオーバーフローしないように、適当な
数のダミー用のNOP命令をループの中に挿入します。
これで8ビットのA/D変換となります。
カウンターを2個でカウントアップすれば、8ビット以上のA/D変換も
可能ですが、余り精度は出ないので、8ビット程度が適当です。


;************************************
; A/D CONVERT SUBROUTINE
;************************************
この前に BSF PORTB,3 で充電しておく

ADCNV           ;A/D convert
    CLRF   WIDTH  ;カウンタリセット
    BCF   PORTB,3 ;放電開始
LOOP  BTFSS  PORTB,4 ;0か?
    GOTO   LOOP1  ;0で変換終了
    NOP
    NOP
    NOP        ;時間カウント調整用ダミー
    NOP
    INCFSZ  WIDTH,F ;カウントアップ
    GOTO   LOOP   ;繰り返し
LOOP1  BSF   PORTB,3 ;再充電開始
    RETURN
    WIDTHにA/D変換値が入っている。



    目次ページへ