본문 바로가기
카테고리 없음

[AVR] ADC info

by TSpoons 2024. 12. 10.

 

1. 다음은 AVR MCU의 내부 ADC를 사용하기 위한 초기화 작업을 하는 함수이다. 내용을 완성하여라.

 

2. 다음은 single-ended single conversion 모드에서 원하는 채널의 AD 변환을 시작시킨 후 변환이 끝날 때까지 기다린 변환 결과를 읽어서 값을 반환하는 함수이다. 내용을 완성하여라

Channel_num을 입력으로 받아 하위 4bit에 해당하는 부분만 남겨두고, 마스킹한다. 이때, ADMUX하위 4bit에 값이 있을 수 있으므로 초기화 후 마스킹한다. 그 다음 AD 변환 시작하는 ADSC bit1로 만들고, while, flag 값을 이용해 변환 끝날 때까지 기다리고, 인터럽트가 아직 없으므로 직접 1을 기록하여 clear 한 후 return 값을 ADC 레지스터 값으로 설정한다.

 

3. ADC의 변환 완료 인터럽트를 사용하도록 1 번에서 작성한 adc_init() 함수를 수정하려고 한다 어떤 부분을 어떻게 수정하면 되는지 설명하여라.

Interrupt enable pinADIEenable시켜준다.

 

 

4. (3 번과 무관) ADC free running 모드로 동작하도록 1 번에서 작성한 adc_init() 함수를 수정하려고 한다 어떤 부분을 어떻게 수정하면 되는지 설명하여라. free running 모드로 동작한다면 1 번에서 설정한 ADC 클럭을 사용할 때 1 초에 대략 몇 번의 AD 변환이 가능한지 계산하여라.

 

Q.    Conversion timeS&H 주기 포함인지?

 

 

포함이 맞다면, 1에서 128-prescaler를 설정했으므로 ADC 클럭주파수는 16MHz/128 = 125kHz

Signle ended에 해당하는 free running mode는 총 13s가 걸린다.

첫 변환시간은 25/125k = 200us, 이후는 13/125k = 104us이다.

따라서 1초에 약 9615AD 변환이 가능하다.