[Atmega128] 6. 아날로그 변환기 ADC (Analog to Digital Converter)

2019. 8. 5. 14:21개발 관련 학습정리/AVR(atmega128) Register 분석

반응형

atmega128의 ADC에 대하여 알아보도록 하자.

 

atmega128 ADC의 특징으로는,

10비트 8채널의 변환기가 있고

7채널의 차동입력 변환기로 사용가능하다.

그리고 변환완료 인터럽트를 사용할 수 있다.

 

먼저 adc가 아날로그신호를 디지털신호로 바꾸는 과정에 대해 알아보자.

1. 전처리 :  아날로그 신호에 포함된 잡음을 제거하고 신호의 대역폭을 제한하여 엘리어싱 을 줄인다.

 

 

 

2. 표본화 : 신호 대역폭 두배이상의 일정한 샘플링 주파수에 따라 신호값을 취하여 

즉 신호에 포함된 최고 주파수 성분 주기의 보다 작은 주기로 신호값을 취하여 저장한다.

표본화 작업

 

 

 

 

3. 양자화 :  표본화된 아날로그 신호는 연속적인 양으로 이를 진화하면 무한한 자리수를 요구할 수도 있다.

그러므로 표본화된 값을 소구간으로 분할하여 

유한한 단계의 유한한 자리수를 갖는 불연속적인 대표값에 할당할 필요 가 있는데 ,

이것을 양자화라 한다 양자화 단계의 갯수가 많으면 실제값과 대표값의 차인 양자화오차를 줄일 수 있으나

디지털 출력의 비트수가 증가하여 이를 처리하기 위한 시간과 장치가 많이 요구된다.

양자화 작업

 

 

 

 

 

4. 부호화 : 양자화된 값에 진 디지털 코드를 부여하는 것을 부호화라 한다.

 

부호화 작업

 

 

 

이제 레지스터에 대해 알아보도록 하자.

 

 

 

 

1. ADCH, ADCL

ADLAR에 따라 달라지는데 ADLAR비트는 나중에 나온다.

단극성일 경우 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 프로그래밍 응용실습:ED-4513 마이크로프로세서 콤보 IT를 이용한, 복두출판사
반응형