아트메가/이론

아트메가128 센서제어하기(ADC제어) 1편

원원 2017. 6. 1. 12:39

안녕하세요.

ADC(Analog to Digital Converter)에대해 알아보겠습니다

 

- ADC란? 아날로그 신호를 디지털 신호로 변환해주는 장치를 말합니다. 반대로 디지털신호를 아날로그신호로 변환해주는건 DAC라고합니다.

  아날로그 신호란 프로세서의 외부에 있는 전기적 신호나 물리적 신호를 수학적으로 2진수가 아닌 실수의 범위 내에서 변하는 신호를 말합니다.

  실수의 범위라는게 수학적으로 표현하기 어려운 신호를 프로세서가 인식할 수 있는 정수의 범위로 일정 시간마다 하나의 데이터로 변환하는것을 의미합니다.

  예를들어 LED의 밝기를 1비트로 표현한다면 상태는 2가지 일것입니다. 1은 밝은상태 / 0은 어두운상태, 만약 LED의 밝기를 2비트로 표현한다면 상태는 4가지 일것입니다. 

  00은 완전어두운상태, 01은 약간어두운상태, 10은 밝은상태, 11은 완전밝은상태, 이런식으로 비트의 수가 증가하면 다양하게 표현할 수 있게 됩니다.

 

이런식으로 변하게 됩니다.

 

- 아트메가128에서 측정범위는 기본적으로 프로세서의 동작전압을 기준으로 합니다.(ADMUX레지스터로 설정) 프로세서의 레퍼런스전압이 5V면 0~5V의 신호범위가 되며 이 범위를 10비트의 범위로 인식하게 됩니다. 

 

- 아트메가128에서 ADC는 두가지 모드가 있습니다. 

1.단일 변환 모드(SIngle Conversion Mode) : 한 번씩 변환하는 모드

-> ADSCRA레지스터의 ADSC=1(ADC Start Conversion)로 설정함으로서 시작되고 변환이 끝나면 0이되고 인터럽트발생

-> AD변환중 입력채널이 바뀌었다면 ADC는 현재의 변환을 마치고 새로 선택된 채널로 변경됨

       -> 장점은 계속안하고 한번씩하니까 연속변환모드에 비해 소비전력이 적습니다

 

2.연속 변환 모드(자유 동작 모드 free running mode) : 연속해서 변환하는 모드

-> ADSCRA레지스터의 ADFR=1로 설정함으로서 ADC는 지속적으로 샘플링과 변환을 수행하여 ADC데이터 레지스터를 갱신하게됨.

      -> 장점은 계속하니까 입력값에대해 신뢰성이 단일변환모드보다 높습니다

 

 

 

- 관련 레지스터

ADC관련 레지스터는 ADMUX,ADCSRA,ADCH/L이 있습니다.

 


 

- ADMUX(ADC Multiplexer Selection Register)

Bit 7,6 - REFS1,REFS0(Reference Selection Bit)

ADC에서 사용하는 전압을 정하는 것입니다. 

00 AREF사용

01 AVCC사용

10 -

11 내부2.56V사용

예를들어 기준전압이 5V였다면 1023가 5V입니다. 2.5V가 들어온다면 1023의 반이 ADC값으로 나옵니다

 

Bit 5 - ADLAR(ADC Left ADjust Result)

변환 결과가 ADC레지스터에 저장될때 정렬방식을 정하는데 사용합니다.

1: 변환 결과를 ADCH/L에 저장할 때 좌측으로 끝을 맞추어 저장합니다.

0: 변환 결과를 ADCH/L에 저장할 때 우측으로 끝을 맞추어 저장합니다.

 

 

Bit 4,3,2,1,0 - MUX4,MUX3,MUX2,MUX1,MUX0 (Analog Channel and Gain Selection Bit)

ADC변환기의 아날로그 입력 채널 및 gain을 결정합니다.

 

00000~00111까지는 단극성입력입니다. 단극성입력이란 하나의 아날로그입력을 의미합니다.

01000~11100까지는 차동입력입니다. 차동입력이란 두 아날로그의 차이를 변환합니다.
예를들어서 01001일때 ADC1에 1.2v , ADC0에 0v가 들어오면 0.2v가 됩니다. 그걸 10배 합니다.

 

 

 


 

- ADCSRA(ADC Control and Status Register A)

 

 

Bit - 7 ADEN(ADC Enable)

1: ADC활성화

0: ADC비활성화

 

Bit -6 ADSC(ADC Start Conversion)

1 : ADC변환이 시작된다. (단일 변환모드일 때 1번만작동 , 프리런닝 모드일 때 변환 동작 반복)

0:  ADC변환이 시작되지 않는다.

 

Bit - 5 ADFR (ADC Free Running Select)

1: 연속 변환 모드

0: 단일 변환 모드

 

Bit 4 - ADIF(ADC Interrupt Flag)

ADC 변환이 되면 1로 set되고 변환완료 인터럽트를 요청한다. 이때 SREG의 I비트가 1이고 ADIE비트가 1이면 인터럽트가 발생되어 처리된다.

인터럽트가 처리되면 ADIF가 0으로 클리어된다. 물론 1을 넣어도 클리어된다.

 

Bit 3 - ADIE(ADC Interrupt Enable)

1: ADC Interrupt enable  (이때 SREG레지스터의 I비트가 SET되어있어야함)

0: ADC Interrupt disable

 

Bit: 2,1,0 - ADPS 2~0 (ADC prescaler Select Bit)

ADC에 인가되는 클럭의 분주비를 설정합니다.

 

 


 

- ADCH/L (ADC Data Register)

ADC의 변환결과를 저장합니다.

- ADMUX레지스터의 ADLAR에 따라 변환결과를 저장하는 방식이 다릅니다.

ADC변환이 되었을때 ADCH , ADCL 두 레지스터에 값이 저장됩니다. 왜냐하면 아트메가에서 10비트ADC이기때문에 레지스터의 값들이 두 곳에 저장되는 것입니다.

ADLAR = 0일때 ADCL은 0~255이고 ADCH은 0~768입니다. 그럼 총 값이 0~1023으로 1024개로 표현 할 수 있는 걸 볼 수 있습니다.

 

 

 

2편에서는 실제로 레지스터들을 설정하여 ADC로 값을 얻어보겠습니다

아트메가128 센서제어하기(ADC제어) 2편