8채널 10비트 분해능의 축차비교형(successive approximation) A/D 컨버터를 가지고 있다.
ADC 모드에는 단일변환 모드(single conversion mode) 와 프리런닝 모드(free running mode)가 있다.
◆ A/D 컨버터 인터럽트 벡터
Vector NO. | Program Address | Source | Interrupt Definition |
22 | 0x002A | #pragma vector = ADC_vect | ADC Conversion Complete |
◆ A/D 컨버터 레지스터
ADMUX(ADC Multiplexer Selection Register) : A/D 컨버터 멀리플렉서 선택 레지스터
이 레지스터는 A/D 컨버터의 아날로그 입력 채널을 선택하는 기본 기능 이외에도 A/D 컨버터의 기준전압 소스를 선택하거나 변환결과 레지스터의 데이터 저장 형식을 지정하는 기능을 수행한다.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
REFS1 | REFS0 | ADLAR | MUX4 | MUX3 | MUX2 | MUX1 | MUX0 |
R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
- REFS1:0(Reference Selection Bit)
A/D 컨버터에서 사용하는 기준전압을 선택한다.
REFS1 | REFS0 | 기준 전압 |
0 | 0 | 외부의 AREF 단자로 입력된 전압을 사용 |
0 | 1 | 외부의 AVCC 단자로 입력된 전압을 사용 |
1 | 0 | reserved |
1 | 1 | 내부의 기준 전압 2.56V를 사용 |
- ADLAR(ADC Left Adjust Result)
1로 지정하면 변환 결과가 A/D 컨버터 데이터 레지스터에 저장될 때 좌측 끝을 맞추어 저장된다.
- MUX4 ~ 0(Analog Channel and Gain Selection Bits)
이 비트는 A/D 컨버터의 아날로그 입력 채널을 선택한다.
아날로그 입력은 크게 8가지의 단극성 입력과 22가지 종류의 차동입력으로 구분되고 차동입력은 다시 4가지 경우로 나눈다.
① ADC1 ~ ADC0 단자 사이의 차동입력(이득 10, 200)
② ADC3 ~ ADC2 단자 사이의 차동입력(이득 10, 200)
③ ADC1 단자를 기준으로 한 8가지의 차동입력
④ ADC2 단자를 기준으로 한 6가지의 차동입력
MUX4 ~ 0 | 단극성 입력 | 차동 입력 | ||
+ 단자 | - 단자 | 이득 | ||
00000 | ADC0 | |||
00001 | ADC1 | |||
00010 | ADC2 | |||
00011 | ADC3 | |||
00100 | ADC4 | |||
00101 | ADC5 | |||
00110 | ADC6 | |||
00111 | ADC7 | |||
01000 | ADC0 | ADC0 | 10x | |
01001 | ADC1 | ADC0 | 10x | |
01010 | ADC0 | ADC0 | 200x | |
01011 | ADC1 | ADC0 | 200x | |
01100 | ADC2 | ADC2 | 10x | |
01101 | ADC3 | ADC2 | 10x | |
01110 | ADC2 | ADC2 | 200x | |
01111 | ADC3 | ADC2 | 200x | |
10000 | ADC0 | ADC1 | 1x | |
10001 | ADC1 | ADC1 | 1x | |
10010 | ADC2 | ADC1 | 1x | |
10011 | ADC3 | ADC1 | 1x | |
10100 | ADC4 | ADC1 | 1x | |
10101 | ADC5 | ADC1 | 1x | |
10110 | ADC6 | ADC1 | 1x | |
10111 | ADC7 | ADC1 | 1x | |
11000 | ADC0 | ADC2 | 1x | |
11001 | ADC1 | ADC2 | 1x | |
11010 | ADC2 | ADC2 | 1x | |
11011 | ADC3 | ADC2 | 1x | |
11100 | ADC4 | ADC2 | 1x | |
11101 | ADC5 | ADC2 | 1x | |
11110 | 1.23V | |||
11111 | 0v(GND) |
ADCSRA(ADC Control and Status Register A) : A/D 컨버터 제어 및 상태 레지스터
이 레지스터는 A/D 컨버터의 동작을 설정하거나 동작 상태를 표시하는 기능을 수행한다.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
ADEN | ADSC | ADATE | ADIF | ADIE | ADPS2 | ADPS1 | ADPS0 |
R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
- ADEN(ADC Enable)
1로 설정하면 A/D 컨버터의 모든 동작이 허용되고
0으로 설정하면 A/D 컨버터가 꺼진다.
- ADSC(ADC Start Conversion)
1로 설정하면 A/D 컨버터의 변환이 시작된다.
프리런닝 모드에서는 이를 1로 설정하면 첫번째의 변환이 개시되며 그 다음부터는 자동으로 변환이 반복된다.
ADEN = 1 로 설정하고 나서 첫번째의 반환에는 25주기의 clk(ADC) 클럭 주기가 필요하고 그 다음부터는 A/D 변환에 13클럭이 소요된다.
변환이 수행되는 동안에 이 비트를 읽으면 1로 읽혀지며 변환이 완료되면 자동적으로 0이 된다.
- ADATE(ADC Auto Trigger Enable)
- ADIF(ADC Interrupt Flag)
A/D 변환이 완료되어 A/D 컨버터 데이터 레지스터 값이 갱신되고 나면 이것이 1로 셋트되면서 변환완료 인터럽트를 요청한다.
- ADIE(ADC Interrupt Enable)
A/D 변환완료 인터럽트를 개별적으로 허용한다.
- ADPS2 ~0(ADC Prescaler Select Bits)
A/D 컨버터에 인가되는 클럭의 분주비를 선택한다.
ADPS2 | ADPS1 | ADPS0 | Division Factor |
0 | 0 | 0 | 2 |
0 | 0 | 1 | 2 |
0 | 1 | 0 | 4 |
0 | 1 | 1 | 8 |
1 | 0 | 0 | 16 |
1 | 0 | 1 | 32 |
1 | 1 | 0 | 64 |
1 | 1 | 1 | 128 |
ADCL, ADCH(The ADC Data Register) : A/D 컨버터 데이터 레지스터
이 레지스터는 A/D 컨버터의 변환 결과를 저장한다.
단극성 입력은 A/D 변환 결과가 10비트 양의 정수로 표시되어 0 ~ 1023 의 범위를 가지고
차동 입력은 A/D 변환 결과가 10비트 2의 보수(2's complement)로 표현되어 -512 ~ +511 의 범위를 가진다.
16비트 레지스터에서 A/D 변환 결과를 읽을 때는 하위 바이트인 ADCL 을 먼저 읽고 나중에 상위 바이트인 ADCH를 읽어야 한다.
A/D 변환이 수행되고 나서 10비트의 변환 결과를 16비트 데이터 레지스터에 저장 하는데는 2가지 방법이 있다.
ADLA = 0 설정하면 데이터가 우측으로 정렬되어 저장된다.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
- | - | - | - | - | - | ADC9 | ADC8 |
ADC7 | ADC6 | ADC5 | ADC4 | ADC3 | ADC2 | ADC1 | ADC0 |
R | R | R | R | R | R | R | R |
ADLA = 1 설정하면 데이터가 좌측으로 정렬되어 저장된다.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
ADC9 | ADC8 | ADC7 | ADC6 | ADC5 | ADC4 | ADC3 | ADC2 |
ADC1 | ADC0 | - | - | - | - | - | - |
R | R | R | R | R | R | R | R |
ADCSRB(ADC Control and Status Register B)
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
- | - | - | - | - | ADTS2 | ADTS1 | ADTS0 |
R | R | R | R | R | R/W | R/W | R/W |
- ADTS2 ~ 0(ADC Auto Trigger Source)
ADTS2 | ADTS1 | ADTS0 | Trigger Source |
0 | 0 | 0 | Free Running Mode |
0 | 0 | 1 | Analog Comparator |
0 | 1 | 0 | External Interrupt Request 0 |
0 | 1 | 1 | Timer/Counter0 Compare Match |
1 | 0 | 0 | Timer/Counter0 Overflow |
1 | 0 | 1 | Timer/Counter1 Compare Match B |
1 | 1 | 0 | Timer/Counter1 Overflow |
1 | 1 | 1 | Timer/Counter1 Capture Event |
'소프트웨어 > AVR' 카테고리의 다른 글
TWI 직렬통신 (0) | 2012.01.02 |
---|---|
SPI 직렬통신 (0) | 2011.12.19 |
아날로그 비교기 (0) | 2011.09.29 |
내부 EEPROM 읽기/쓰기 (0) | 2011.09.28 |
직렬통신[USART] (0) | 2011.09.27 |