atmega adc컨버젼
ADMUX에 REFS0, REFS1는 기준전압을 설정하는 부분이다.
AVCC는 아래그림과 같이 아날로그 공급 전압이다. 이것을 설정하기
위해서는 아래 표를 보고 REFS0, REFS1를 설정해주면 된다.
(0<<REFS1)|(1<<REFS0)
ADLAR를 0으로 설정한다면, 변환결과를 컨버터 데이터 레지스터의 우측으로 끝을
맟춘다. 1이면, 좌측끝이다. 여기서는 littel endian을 사용하므로 우측 끝으로
만든다.
MUX5에 1을 사용하기 위한 1차 과정이다. 이것을 설명하면 다음과 같다.(0X1F를 사용하는 이유는
MUX0~4까지 존재하므로 5비트를 사용하기 때문이다.)
UiCH가 0인 경우
0000 0000
0001 1111 이 &되어
0000 0000 이 된다.
UiCH가 1인 경우
1111 1111
0001 1111 &연산
0001 1111 그대로 나온다.
ADCSRB
16진수 20은 0010 0000(2진수)이므로 6번째 자리에 있는 1을 오른쪽으로 5번 밀면,
가장 우측 자리에 1이 들어간다. 그렇게 된다며, 0000 0001이된다.
그리고 이것을 MUX5에 1을 넣기 위해서 왼쪽으로 민다.
0001 1111인 경우도 마찬가지이다. 시프트 연산에 의하여 0001 1111이
0000 0001이 된다. 여기서 MUX5로 왼쪽으로 밀면, MUX5자리에 1이 넣어진다.
이 레지스터에서 MUX5부분에 1을 넣는다. MUX는 아날로그 입력 채널을 선택한다.
ADTS0~2까지는 자동 트리거 모드를 설정하는 부분이다. 자동 트리거는 쓰지 않으므로 생략한다.
ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(0<<ADPS0);
ADCSRA는 컨버터의 동작, 상태를 표시한는 레지스터
ADEN는 1로 설정시 컨버터에 모든 동작이 허용
ADPS2~0까지의 비트는 분주비 클럭으 설정하는 비트이다.
오차가 가장 적은 64로 설정한다.
ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(0<<ADPS0);
ADCSRA는 컨버터의 동작, 상태를 표시하는 레지스터
ADEN는 1로 설정시 컨버터에 모든 동작이 허용
ADPS2~0까지의 비트는 분주비 클럭으 설정하는 비트이다.
오차가 가장 적은 64로 설정한다.
ADCSRA레지스터가 끝이 난다며, 컨버터 변환을 시작한다.
ADSC의 1을 넣으면, 컨버터의 변환을 시작하게 하는 레지스터이다.
ADCSRA=ADCSRA|(1<<ADSC);
ADCSRA=ADCSRA|(1<<ADIF);
ADIF는 컨버터 변환완료 인터럽트 요청 하는것이다.
분주비설정을 먼저 해놓은 상태에서 컨버터 변환이나 완료를 시켜야 안전하기 때문에 한번에
'|'시키지 않고 차례대로 위의 두줄을 아래로 내려서 썼다.
ADCSRA=ADCSRA|(1<<ADSC);
ADCSRA=ADCSRA|(1<<ADIF);
ADCSRA의 레지스터 이중에서 8비트인 ADCL을 사용한다.
위의 그림은 중에 ADCL을 표시한다.