대학교

마이크로프로세서 - (7) 아날로그-디지털 변환

매 석 2023. 10. 18. 00:03
반응형

아날로그-디지털 변환

주변의 데이터는 아날로그이기에 마이크로컨트롤러에서 처리할 수 있는 디지털 데이터로 변환이 필요하다.

ADC(아날로그-디지털 변환기) : 10비트 해상도, 8개 채널 제공

출처 : ATmega128로 배우는 마이크로컨트롤러 프로그래밍

ADMUX -> ADCSRA -> ADC 순서대로 진행된다.

우선 ADMUX에서 기준전압을 5V, 0V, 2.56V에서 정한 후

입력 채널을 선택한다.

이후 ADCSRA에서 변환, 활성화, 모드, 분주율 등을 설정한다.

최종적으로 ADC에서 변환값을 10비트에 저장한다.

단일 입력은 1개의 입려과 GND를 사용하고,

차동 입력은 2개의 입력 차이와 GND를 사용한다.

여기서 입력되는 아날로그 신호 크기가 작은 경우 증폭 기능을 사용할 수 있다.

이를 gain이라고 한다.

출처 : ATmega128로 배우는 마이크로컨트롤러 프로그래밍

 

 

축차 비교 방식

출처 : ATmega128로 배우는 마이크로컨트롤러 프로그래밍

입력 전압과 기준 전압과 5비트라고 주어졌다.

이를 입력 전압과 기준 전압을 활용해 변환한 값을 비교하여 디지털 값으로 변환할 수 있다.

EX) 0.67 > (1+0)/2 -> 1

0.67 < (1+0.5)/2 -> 0

0.67 > (0.5+0.75)/2 -> 1

0.67 < (0.75+0.625)/2 -> 0

0.67 < (0.625 + 0.6875)/2 -> 0

-> 10100

 

레지스터

1. ADC(ADCH + ADCL) 레지스터

ATmega128의 레지스터는 8비트이고, ADC 변환값을 10비트이다.

즉 2개의 8비트 레지스터를 사용해 ADC 변환값을 저장할 수 있다.

오른쪽, 왼쪽 정렬은 ADMUX 레지스터의 ADLAR 비트로 정할 수 있다.

8+2비트를 사용하고 나머지 6비트는 사용하지 않는다.

출처 : ATmega128로 배우는 마이크로컨트롤러 프로그래밍

2. ADMUX 레지스터

AD 변환 기준 전압과 입력 채널을 선택한다.

출처 : ATmega128로 배우는 마이크로컨트롤러 프로그래밍

REFSn : 기준 전압 설정 (00-AREF, 01-AVCC, 10, 11-2.56)

ADLAR : 정렬 방식 설정 (1왼 0오)

MUXn : 채널 선택 (00000~00111) -> 8개

3. ADCSRA 레지스터

AD 변환 상태 표시 및 AD 변환 제어

출처 : ATmega128로 배우는 마이크로컨트롤러 프로그래밍

단일 변환 모드 : AD 변환 시작 비트가 세트되면 1번 AD 변환 후 종료

프리러닝 모드 : AD 변환 시작 이후, 이전 AD 변환이 끝나면 다음 AD 변환을 자동으로 시작

 

출처 : ATmega128로 배우는 마이크로컨트롤러 프로그래밍

가변저항 읽기

가변저항 : 저항 값을 바꿀 수 있는 저항

0~5V 아날로그 전압을 0~1023 디지털 값으로 변환하여 읽는다.

ADC_init는 기준 전압, 분주비, 활성화, 모드, 채널 등을 설정해준다.

read_ADC는 가변저항 값을 읽고 최종적으로 ADC를 반환한다.

출처 : ATmega128로 배우는 마이크로컨트롤러 프로그래밍

main에서는 init을 통해 초기화해주고

while에서 read_ADC를 이용해 입력받은 값을 변환해 출력하는 형태이다.

출처 : ATmega128로 배우는 마이크로컨트롤러 프로그래밍

가변저항을 이용해 LED를 제어할 수 있다.

읽은 가변저항은 10비트로 이를 7비트 밀면 마지막 3비트만 남는다.

여기에 +1한 값이 LED_count가 된다.

이를 이용해 for문을 돌려 pattern에 count만큼 1을 추가한다. (오른쪽 정렬)

그 pattern을 PORTB에 저장해 LED로 출력한다.

출처 : ATmega128로 배우는 마이크로컨트롤러 프로그래밍