Embedded System/AVR

[AVR] 다중 ADC 사용시 주의점!

임베지수 2017. 4. 2. 14:48

드디어 알아냈다. 왜인지는 모르겠는데 ADC 여러개 사용할 때 ADMUX랑 ADCSRA 레지스터 설정하고 조금의 딜레이를 주어야한다!!! 안그러면 채널이 바뀌기 전에 변환해버려서 데이터 밀림현상이 나타난다.

 

예를 들어서

 

이라는 소스에서는 ADC값이 저장되는 배열에서 데이터의 순서가 한칸씩 밀리게 된다. 8번째 ADC값이 배열의 첫 번째로 들어가버리고 한칸씩 당겨져서 저장이 되었다.

 

실제로 텀프로젝트 때문에 ADC사용할 일이 있어서 값을 확인했더니 x값, mic값, PSD값 순서대로 출력되어야 하는데 아래 사진처럼 PSD값, x값, mic값 순서대로 출력되었다ㅜㅜ

 

 

 

 

이러한 문제를 해결하기 위해 다음과 같이 GET_ADC함수안에서 변환완료 플래그를 확인하기 전에 약 100us정도의 딜레이를 넣어주면 된다.

 

이렇게 바꾸면 ADC값이 순서대로 들어가게 된다!!!

 

아래는 문제해결된 모습!