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
'코스웨어 > 10년 시스템제어' 카테고리의 다른 글
[시스템 제어]5월 7일 26번 주진호 (1) | 2010.05.10 |
---|---|
도서관리 프로그램 (2) | 2010.05.10 |
[시스템제어] 5월 6일 수업 일지 보고서 - 25번 주강수 (1) | 2010.05.07 |
일일보고 순서 (1) | 2010.05.06 |
Atmega128 (Zigbee Timer/Counter) & C, Linux (4월 29일/ 26번 지성하) (1) | 2010.04.30 |
시스템제어-4월26일 보고서-정기열(23번) (1) | 2010.04.29 |
시스템제어 체육 대회 20100416 (0) | 2010.04.28 |
시스템제어 체육 대회 20100416 (0) | 2010.04.28 |