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変換値が入っている。