2019. 8. 5. 14:21ㆍ개발 관련 학습정리/AVR(atmega128) Register 분석
atmega128의 ADC에 대하여 알아보도록 하자.
atmega128 ADC의 특징으로는,
10비트 8채널의 변환기가 있고
7채널의 차동입력 변환기로 사용가능하다.
그리고 변환완료 인터럽트를 사용할 수 있다.
먼저 adc가 아날로그신호를 디지털신호로 바꾸는 과정에 대해 알아보자.
1. 전처리 : 아날로그 신호에 포함된 잡음을 제거하고 신호의 대역폭을 제한하여 엘리어싱 을 줄인다.
2. 표본화 : 신호 대역폭 두배이상의 일정한 샘플링 주파수에 따라 신호값을 취하여
즉 신호에 포함된 최고 주파수 성분 주기의 보다 작은 주기로 신호값을 취하여 저장한다.
3. 양자화 : 표본화된 아날로그 신호는 연속적인 양으로 이를 진화하면 무한한 자리수를 요구할 수도 있다.
그러므로 표본화된 값을 소구간으로 분할하여
유한한 단계의 유한한 자리수를 갖는 불연속적인 대표값에 할당할 필요 가 있는데 ,
이것을 양자화라 한다 양자화 단계의 갯수가 많으면 실제값과 대표값의 차인 양자화오차를 줄일 수 있으나
디지털 출력의 비트수가 증가하여 이를 처리하기 위한 시간과 장치가 많이 요구된다.
4. 부호화 : 양자화된 값에 진 디지털 코드를 부여하는 것을 부호화라 한다.
이제 레지스터에 대해 알아보도록 하자.
1. ADCH, ADCL
단극성일 경우 0~1023, 차동입력의 경우 2의 보수를 사용하여 -512~511범위로 저장한다.
차동입력이란 두핀의 아날로그값 차이를 이용해 값을 도출해내는 방법이다.
2. ADMUX (ADC Multiplexer Selection Register)
REFS1..0 (REFerence Selection) : 기준전압 Vref를 선택한다.
00 - 외부 AREF를 기준전압으로 사용
01 - 외부 AVCC를 기준전압으로 사용
10 - 보류
11 - 내부의 2.56V를 기준전압으로 사용
ADLAR (ADC Left Adjust Result) : 이 비트값에 따라 ADCH, ADCL 정렬방식이 바뀐다.
MUX4..0 : ADC의 입력단자를 선택하고 차동입력의 경우 증폭값도 같이 설정한다.
3. ADCSRA (ADC Control and Status Register A)
ADEN (ADc ENable) : enable은 1, disable은 0
ADSC (ADc Start Conversion) : 1로 설정하면 변환시작 -> 끝나면 0으로 세트
ADFR (ADc Free Running select) : 1로 설정하면 프리러닝 모드 설정
프리러닝모드란 ? 변환이 완료되어도 0으로 세트되지 않고 자동적으로 다음 변환이 시작되는 모드이다.
ADIF (ADc Interrupt Flag) : ADCH, ADCL 레지스터가 갱신되면 1로 세트되며 인터럽트 요청함.
ADIE (ADc Interrupt Enable) : 1로 설정하면 변환완료 인터럽트 허용
ADPS2..0 (ADc Prescaleer Select) : adc 클럭 분주비 설정
예제 소스
void setup() {
ADCSRA |= ((1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)); //16Mhz/128 = 125Khz
ADMUX |= (1<<REFS0); //AVCC(5V) 사용
ADCSRA |= (1<<ADEN); //ADC enable
}
void loop() {
ADMUX &= 0xF0;
ADMUX |= 0x00; // channel setting
ADCSRA |= (1<<ADSC); //변환 시작
while(ADCSRA&(1<<ADSC));//변환 완료되기를 기다림.
//ADCW 레지스터로 값 반환받기
}
'개발 관련 학습정리 > AVR(atmega128) Register 분석' 카테고리의 다른 글
[Atmega128] 8. UASRT 통신 (Universal Synchronus Receiver Transmit) (5) | 2019.08.05 |
---|---|
[Atmega128] 7. SPI 통신 (Serial Peripheral Interface Bus) (0) | 2019.08.05 |
[Atmega128] 5. 아날로그 비교기 (Analog Comparator) (0) | 2019.08.03 |
[Atmega128] 4. 타이머 인터럽트 (clk/Timer mode/OC 단자 출력) (0) | 2019.08.03 |
[Atmega128] 3. 타이머 인터럽트 Timer/Counter Register (0) | 2019.08.03 |