Analog To Digital Converter

2019. 11. 2. 03:31avr-atmega128

Datasheet를 참조했으며 해당 내용은 대략적인 흐름만 작성했습니다
자세한 내용은 Datasheet를 통해 공부하는것을 권장합니다
ADC를 거치면 Analog signal 을 10bits의 Digital값으로 바꾸게 됩니다

 ADEN(ADCSRA7)을 set해서 ADC를 ON시켜야합니다
그렇지않으면 밑에서 다룰 모든 설정은 무시됩니다

우선 ADC가 동작하기 위해서는 sample rate을 발생기켜야 되는데 이때 필요한 clock을 선택해야합니다
50khz~ 200khz로 ADPSn을 통해 설정이 가능합니다
10bit보다 낮은 bit로 충분하다면 200khz로 설정해도 무방합니다

ADC를 거치면 Analog signal 을 10bits의 Digital값으로 바꾸게 됩니다
이때 Digital로 바꾸기위한 전압의 기준점은AREF, AVCC나 내부적으로 2.56V에 연결되게 됩니다

REFSn값을 수정해서 선택할수 있습니다

ADMUX4:0값을 통해 PF7:0중
어떤핀을 통해
어떤동작을 할지
Gain은 얼마로 할지 정할수 있습니다


이제 data를 변환할 차례입니다
Atmega128 ADC는 data를 받으면 10bit digital값으로 변환해서 두 register에 저장하게 되는데 ADLAR(ADMUX5, default는 0)값에 따라 어떻게 저장되는지 정해집니다

읽을때는 ADCL을 먼저 읽고 ADCH를 마저 읽어야합니다
ADCH를 읽게되면 다시 ADC에서 ADCL부터 읽을수있습니다


하지만 만약 8bit만으로 충분하다면 ADLAR=1의 ADCH만 읽어도 충분합니다

ADC가 완료되면 interrupt(ADIF가 set),가 발생합니다

interrupt발생조건은 다음과 같습니다.
The ADC Conversion Complete Interrupt is executed if the ADIE bit and the I-bit in SREG are set. 

그럼 ADC에는 어떤종류가 있을까요
Single conversion 와 Free running방식(ADFR을 set하면 선택, ADSC를 set하면 시작)이 있습니다
ADSC를 set하면 ADC를 시작합니다만

Single conversion은 한번 conversion을 수행하고 ADSC 가 clear, ADIF가 set됩니다.
Free running방식은 반면 ADSC가 계속 set이 됩니다. ADIF의 set여부는 관계없습니다.
몇몇 주의해야할 세부사항이 있는데

Datasheet  P.236부터 노이즈관련 대책이나 Vref설정시 주의사항, ADCn pin이나 AVCC사용시 외부 HW설계방법 등이 있습니다














'avr-atmega128' 카테고리의 다른 글

ADC 예제  (0) 2019.11.05
16bit Timer/Counter  (0) 2019.10.25
8bit Timer/Counter  (0) 2019.10.25
외부인터럽트  (0) 2019.10.22
직렬통신  (0) 2019.10.18