본문 바로가기

만들기 / making/sensing workshop

ATmega168 ADC


ATmega168 ADC

ATmega168 ADC의 동작원리와 한계를 알아보자
 
 
ADC 레지스터 설정
프로그래밍부분하고도 연관되기 때문에 정확히 알지는 못하지만
이해한 부분에 한해서 허접하게 설명해보겠습니다.-오늘 스터디의 결과물입니다 ㅎ
 
1.ADCMUX - ADC Multiplexer Selection Register
ADconverter의 기준전압, 입력채널 설정 및 데이터레지스터의 저장형식을 결정하는 부분입니다.
 
ADCMUX는 위의 그림(Data Sheet p.215 참조)과 같이 총 8 bit로 나누어져 있으며
각각의 영역마다 역할을 담고 있습니다.
 
1-1. REFS영역 (bit7,6)
기준전압을 설정하는 영역입니다. AREF,AVCC,내부전압등 상황에 맞게 선택하면 됩니다.

ADCMUX 레지스터에서 REFS1 과 REFS0 bit를 모두 0으로 설정하면 AREF 핀이 (ATmega168 21번 핀)에 걸어주는 전압을 기준전압으로 사용하게 됩니다. 
현재 우리는 기준 전압을 5V 즉 AVCC에 걸린 전압으로 하고 있는데요 적외선 거리센서가 0.4~ 3.2V 같이 변화하므로 AREF 에 약 3.5를 걸어주면 최대의 해상도로 ADC를 할 수 있습니다. 5V가 기준전압이면 10bit ADC를 했을 경우 적외선 센서가 얻을 수 있는 최대 (3.2/5)*1024 인데 비해 기준전압을 3.5V로 하면 (3.2/3/5)*1024의 최대값을 얻을 수 있으니 더 자세하게 센싱을 할 수 있겠죠?

1-2. ADSLR영역 (bit5)
 데이터레지스터(ADCH,ADCL)에 좌측 혹은 우측 정렬에 따라 값을 설정합니다.
 0: 우측, 1: 좌측
*이 부분은 왜 이렇게 하는지에 대한 이해가 아직 부족합니다. 아시는 분의 정확한 설명부탁드립니다.
 
1-3. Reserved Bit (bit4)
 ATmega168에서는 사용하지 않는 비트로 항상 0으로 둡니다.
 
1-4. MUX영역 (bit3,2,1,0)
 ADC채널 선택 영역으로 몇번 핀을 input으로 설정하느냐에 따라 값을 정해주시면 됩니다.
 
 EX) 외부전압 AVCC(01)를 사용하고 데이터레지스터 우측정렬(0) input핀을 ADC3 
        (00011)으로 설정했다면 ADMUX=01000011=0x43
 
 
2. ADCSRA - ADC Control and Status Register A
 ADC 동작을 설정 및 상태를 확인하는 레지스터입니다.
 
ADCSRA역시 총 8bit로 나누어져있으며 각 영역 마다 가지고 있는 역할에 따라 설정해주면 됩니다.
 
2-1. ADEN영역 (bit7)
ADC 사용 여부를 설정하는 영역입니다. ADC를 사용하기 위해서는 그 값이 1이 되어야 합니다.
 
2-2. ADSC영역 (bit6)
AD Conversion을 시작하는 비트로서 값이 1이 되면 변환이 시작됩니다.
 
2.3. ADATE(ADFR)영역 (bit5)
Free Running (자동반복)모드 설정 영역입니다. 값이 1일때 자동반복모드
 
2.4 ADIF영역 (bit4)
AD Conversion이 완료되었음을 알려주는 영역입니다.
 
2.5 ADIE영역 (bit3)
AD Conversion 완료 인터럽트를 설정해주는 영역입니다. 값이 1일때 인터럽트 활성화
 
2.6 ADPS영역 (bit2,1,0)
메인클럭과 adc클럭 사이의 분주비를 결정하는 부분입니다.
*클럭의 분주비는 선생님께서 커뮤니티에 자세한 설명을 해주셨답니다.
  전체적으로 얕게 알고 있는 터라 설명이 불친절한데 자세하게 알고 계신분은 잘 편
  집해주세요. 그리고 ADCH,ADCL부분과 인터럽트에 대해 제가 잘 알지 못하니 그부
  분에 대해서도 잘 알고 계신분은 덧붙여 주시면 감사하겠습니다. 
 
 

'만들기 / making > sensing workshop' 카테고리의 다른 글

ATmega168 ADC 3  (0) 2009.08.31
ATmega168 ADC 2  (0) 2009.08.31
bit 연산  (0) 2009.08.31
2진법 / 16진법 / ASCII  (0) 2009.08.31
Arduino bootloader  (0) 2009.08.31