본문 바로가기
코스웨어/10년 시스템제어

[시스템제어] 5월 4일 수업 일지 보고서 - 27번 최영훈

by 알 수 없는 사용자 2010. 5. 4.
728x90
반응형

▷DK128은 UART1을 사용하는 반면  ATMEGA128L은 UART0을 사용!!!

▷ADC 실습(조도센서로 아날로그 값이 들어오면 아날로그 값에 따라 LED 출력을 달리한다)


----------------------------------------------------------------------------------------------------------------------------------------



----------------------------------------------------------------------------------------------------------------------------------------

#include<main.h>
void LED_init(void); //LED 제어 포트 초기화
void ADC_init(void); //ADC 초기화
unsigned int ADConversion(int ch); //analog->digital 변환
int main()
{
 unsigned int ch_ADC; //AD변환값 저장 변수  
 LED_init(); 
 ADC_init();  
 while(1)
 {
  ch_ADC=ADConversion(0);//ADC0핀으로 들어오는 Analog값을 digital으로 변환 
  if(ch_ADC<1) //yellow LED ON
  {
   PORTA=0XFE;
  }
  else if(ch_ADC>=1&& ch_ADC <4)//green LED ON
  {
   PORTA=0XFD;
  }
  else  //red LED ON
   PORTA=0XFB;
 } 
 return 0; 
}
void LED_init(void)
{
 DDRA=0xFF;
 PORTA=0XFF;
}

void ADC_init(void)
{
 //ADMUX=0XCO; //1. 기준전압 설정 : 기준전압
 //ADMUX=0XE0; //2. ADC 데이터 정렬 위치 조정
 ADMUX=(1<<REFS1) | (1<<REFS0) |(0<<ADLAR);//1. 기준전압 설정:기준전압2. ADC 데이터 정렬 위치 조정
       
 ADCSRA=(1<<ADEN) | (1<<ADPS2) |(1<<ADPS1) | (0<<ADPS0);
                                                    //3.ADC 허용(Enable),(비트7)ADCSRA프리스
                                                      케일러 값 사용 : 64 110 ADCSRA
}
unsigned  int  ADConversion(int ch)
{
 ADMUX=ADMUX|(ch<<MUX4);    //ADC0사용
 ADCSRA=(ADCSRA)|(1<<ADSC); //AD변환 시작
 while(1)
 {
  if(ADCSRA&(1<<ADIF))  //AD변환 완료확인
  {
   break;
  }
  
 }
 return ADC;

}
--------------------------------------------------------------------------------------------------------
1.확인해야하는 레지스트는 두개이다..
  (ADCMUX 와 ADCSRA)


2.먼저 ADC를 초기화를 해야한다.

ADCMUX 설정부분 
2-1)기준전압 설정


2-2)ADC DATA 정렬 위치 조정
     


하위비트를 사용한다.그래서 ADLAR에 0값을 넣어주면 된다.
 

ADCSRA 설정부분
2-1-1)ADC Enable을 해줘야지만 IO PIN을 ADC로 쓰겠다고 레지스터리에 값을 넣는다.


--------------------------------------------------------------------------------------------------------


2-1-2)프리스케일값도 역시 위의 ADCSRA 레지스트리에 접근하여 값을 변경한다 ( 1, 1, 0)




3. AD변환을 해야한다.
3-1)아날로그가 입력되는 핀을 선택(ADC0)


3-2)AD변환 시작


  BIT6에 1값이 있으면 변환 시작한다.


3-3)AD변환 완료여부 확인 (BIT 4번이 1값이 되면 변환이 되었다는 뜻이다)
      무한 반복문 while을 써 if문으로 1값이 들어오는지확인)


3-4) AD 변환 완료된 데이터 반환 (return ADC)
728x90