(모든 내용은 ATmega328P Datasheet를 기반으로 작성됨)
✔ 1.
ADC 주요 특징 (Features)
- 10-bit 해상도
- ±2 LSB 절대 정확도
- 13–260 μs 변환 시간
- 최대 76.9kSPS 속도
- 최대 8개의 단일 입력 채널 (ADC0~ADC7)
- 내부 온도 센서 연결 가능
- Sample and Hold 회로 탑재
- 입력 범위: 0 ~ VCC
- 내부 1.1V 기준 전압 사용 가능
- 싱글 변환 / 프리런닝 모드
- ADC 완료 인터럽트 지원
- ADC 노이즈 캔슬러 기능 제공
✔ 2.
ADC 구조 개요
ATmega328P ADC는 10-bit Successive Approximation 방식(SAR ADC)이며 다음 구성 요소로 이루어짐:
- 입력 아날로그 멀티플렉서 (MUX)
- Sample and Hold
- 내부 1.1V 기준 전압
- 10-bit DAC 비교기
- ADCH/ADCL 데이터 레지스터
✔ 3.
ADC 입력과 전원 요구 조건
- AVCC 연결 조건:
- 아날로그 입력 회로 설명:
◼ AVCC
- ADC는 AVCC 전원핀을 사용
- 반드시 VCC와 ±0.3V 이내여야 함
- 노이즈 방지를 위해 LC 필터 권장
◼ 입력 임피던스 권장
- ADC 입력은 약 10kΩ 이하의 출력 임피던스가 유리
- 임피던스가 높으면 샘플링 시간이 길어져 정확도 저하
◼ 고주파 성분은 제거해야 함
- 샘플링 주기 Nyquist 조건에 따라
- → ADC 클럭(f_ADC)의 1/2 이상 고주파는 제거해야 함
- 저역 통과 필터(LPF) 권장
✔ 4.
ADC Voltage Reference 선택
REFS1:REFS0 옵션
REFS1:0기준 전압
| 00 | AREF 핀 (외부전압), 내부 Vref OFF |
| 01 | AVCC 사용 (+ AREF 핀에 커패시터 필요) |
| 10 | Reserved |
| 11 | 내부 1.1V 기준 전압 사용 |
✔ 5.
ADC Result 정렬(ADLAR)
- ADLAR = 0 → Right Adjust (기본)
- ADLAR = 1 → Left Adjust
- 8-bit 해상도만 필요할 때 ADCH만 읽으면 됨
✔ 6.
입력 채널 선택 (MUX3:0)
MUX 값입력 채널
| 0000 | ADC0 |
| 0001 | ADC1 |
| … | … |
| 0111 | ADC7 |
| 1000 | 내부 온도센서 |
| 1110 | 1.1V Bandgap |
| 1111 | GND |
✔ 7.
ADCSRA – ADC Control & Status Register A
비트이름설명
| ADEN | Enable | 1: ADC 활성화 |
| ADSC | Start Convert | 변환 시작 |
| ADATE | Auto Trigger Enable | |
| ADIF | ADC Interrupt Flag | |
| ADIE | ADC Interrupt Enable | |
| ADPS2:0 | Prescaler 설정 |
prescaler는 ADC 클럭을 CPU 클럭에서 나눔
✔ 8.
ADCSRB – Auto Trigger Source 설정
ADTS 값트리거
| 000 | Free Running |
| 001 | Analog Comparator |
| 010 | INT0 |
| 011 | Timer0 Compare Match A |
| … | … |
| 111 | Timer1 Capture Event |
✔ 9.
ADC 변환 과정 (Single Conversion)
- PRR.PRADC 비트를 0으로 → 전원 차단 해제
- ADCSRA.ADEN = 1 (ADC 활성화)
- ADCSRA.ADSC = 1 (시작)
- 변환 중 ADSC = 1 유지
- 변환 완료 시 ADIF = 1, ADSC 자동 0으로 클리어
✔ 10.
Free Running Mode
- ADATE = 1
- ADTS[2:0] = 000
- 한 번 시작하면 ADC가 계속 반복적으로 변환 수행
✔ 11.
ADC Noise Reduction Mode (Sleep Mode)
- CPU를 Sleep 시켜 디지털 노이즈를 감소
- ADC 변환 정확도 향상
- Sleep에서 깨어나는 조건 제한적
✔ 12.
ADC 데이터 레지스터 읽기 순서 (중요!)
- ADCL 먼저 읽어야 한다는 설명:
규칙
- ADCL → ADCH 순서로 읽어야 한다
- ADCL 읽는 순간 레지스터 latch가 걸려 새로운 값 저장 금지
- ADCH 읽으면 latch 해제됨
✔ 13.
Digital Input Disable (DIDR0)
- ADC 핀을 아날로그 입력으로 사용할 때
- DIDR0의 해당 채널 비트를 1로 설정하는 것이 권장
- 이유:
- 디지털 버퍼 제거 → 노이즈 감소
- 전력 절약