간이 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비트를 overflow하지 않도록 적당한 수의 dummy용 NOP 명령을 루프내에 삽입한다.
이것으로 8비트 A/D 변환으로 된다.
카운터를 2개로 count up하면 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 변환값이 들어 있다.



    다음 화면         목차 화면