ADIF는 한 conversion이 끝나면 변환하게 된다.
• Bit 4 – ADIF: ADC Interrupt Flag
This bit is set when an ADC conversion completes and the data registers are updated.
이 비트가 셋이면 ADC 변환이 완료되었을 때와 데이터레지스터가 업데이트 되었을 때이다.
1-1. ADMUX 설정하기.
7 , 6 : 전압 선택 bit // 0 0
* 기본적으로 전압이 vcc5v, gnd-5v 라면 총 10v 인 셈이다. 그러므로 0 5v 로 하기 위해
중간점을 2.5(2.56)v 로 조정해 주기도 한다 ( 1, 1 을 넣음)
5 : 오른쪽 / 왼쪽 정렬 // 오른쪽 0
4~0 pin 설정
우리는 single Ended Input 을 활용한다. 그러려면, 입력받는 unsigned char ucCh 는
00111 (0x7)을 넘기지 말아야 한다.
그걸 막기 위해, ucCh & MASK_MUX 를 설정한다.
1-2. ADCSRA 설정하기
7 : 활성화 비트//스위치 같은 기능을 함. 이게 1 이 되어야 작동을 시작한다./ 0
6 : /0
5 : FREE mode 의 on / off 설정 /0
4 ,3 : 인터렙트 설정 /0
인터렙트 |
폴링 |
이상이 있을 시, CPU 의 개입이 있음. CPU가 다른 일을 멀티로 할 수 있다. |
정해진 시각마다 CPU가 개입 함. CPU의 멀티 기능이 떨어 짐. |
ADC_RUN 함수에서 다시 활용된다!!! (뒤에 다시 설명)
2,1,0 : 주파수 설정 // 0 0 0
*주파수 설정은 상황과 용도에 맞게 설정해 준다. 작은 일에 많은 주파수를 주는건 낭비다.
unsigned int ADC_Run(void)
{
ADCSRA = ADCSRA|(1<<ADSC);
while(0 == (ADCSRA&(1<<ADIF)));
return ((ADCH<<8)|ADCL);
}
while 문으로 계속 돌려준단건 일일이 체크하는 '폴링방식'을 채용한것임.
반환값으로 ((ADCH<<8)|ADCL)를 준다.
1-3. ETC
{
ADC_Init(0);
}
unsigned int ADC_Convert(void)
{
ADC_Init_0CH();
return ADC_Run();
}
1-4.main에서 0000 하이텔/LCD로 보내기!
int main(void)
{
char cString[] = "0000\n\r";
unsigned int uiRet;
USART_Init();
LCD_Init();
while(1)
{
uiRet = ADC_Convert();
cString[0] = '0' + (uiRet/1000)%10;
cString[1] = '0' + (uiRet/100)%10;
cString[2] = '0' + (uiRet/10)%10;
cString[3] = '0' + (uiRet/1)%10;
USART_Str(cString);
LCD_Str(cString);
}
while(1);
return 0;
}
숫자를 넣을 땐, 아스키 코드 추출하는 식으로 보내야 한다.
'ATMega128' 카테고리의 다른 글
20140508 - ATMega128A(Interrupt) 수정중 (1) | 2014.05.08 |
---|---|
20140507 - ADC로 조도 센서에 따른 값의 변화 (0) | 2014.05.07 |
20140430 - ADC, DAC, 샘플링이란?, ADC 스펙, 약도, 설명, ADC 블록 스키마, ADC Prescaler의 설명 (0) | 2014.04.30 |
20140429 - USART_RX통신으로 LCD에 키보드 입력받기, 폰트따서 이름 LCD출력하기 (0) | 2014.04.29 |
20140428 - USCRnC RegisterC, USART 통신하여 문자출력, 문자열출력 (0) | 2014.04.28 |