여기에서는 이전 포스트들 (ADC 개요, 관련 레지스터들) 에 이어서 A/D변환을 실제로 수행하는 절차에 대해서 정리하였다.

① 기준전압, 입력핀, 그리고 저장방식을 결정한 후 ADMUX 레지스터를 적절히 설정한다.

② 클럭분주비, 인터럽트 허용 여부 등을 결정한 후 ADCSRA 레지스터를 설정하여 A/D 변환기의 동작을 허용한다.

③ ADSC비트를 ‘1’로 써서 A/D변환을 시작한다.

④(A) 만약 변환 완료 인터럽트를 사용하지 않는다면 ADIF비트가 ‘1’이 될 때 까지 기다린 후 ADC레지스터 값을 읽는다. 그후 ADIF비트를 다시 클리어(‘0’)시킨다.

④(B) 만약 변환 완료 인터럽트를 사용한다면 ISR()함수에서 ADC레지스터 값을 읽는다.

 위에서 ④(A)번을 보면 A/D변환을 시작한 이후 완료되었는지를 검사하는 비트는 보통 ADIF를 사용함에 유의해야 한다. ADIF비트가 ‘1’로 세트되었다는 것은 A/D변환이 완료되고 그 변환값이 ADC레지스터에 저장되었음을 의미한다. 따라서 ADIF가 ‘1’이 될 때 까지 기다렸다가 그 이후에 변환값을 저장한다.


 만약 인터럽트를 사용하지 않는다면 ADIF 비트를 수동으로 클리어(‘0’)시켜야 하는데 데이터쉬트에 의하면 이를 위해서는 ADIF비트에 ‘1’을 써야한다는 것에 유의해야 한다. 만약 인터럽트를 사용하여 ISR(ADC_vect)가 호출된다면 자동으로 ADIF는 ‘0’으로 클리어된다.




Posted by 살레시오