BASIC4MCU | 질문게시판 | Atmega128) 미세먼지센서 코딩 질문입니다.
페이지 정보
작성자 청주공대생 작성일2019-05-11 14:37 조회7,360회 댓글1건본문
안녕하세요 atmega128 공부를 위해 atmega128, 미세먼지센서(gp2y1010au0f) , 리니어 액추에이터 를 사용하여
미세먼지 자동개폐 창문을 만드려 합니다. 개인적으로 CodeVision을 사용하여 만들어보고싶은데
거의 AVR Studio 버젼 코드만 많이 올라와 해석하여 CodeVision 코드 식으로 바꿔보고싶습니다.
CodeVision 코드식으로 바꿔주시면 비교하여 공부에 도움이 많이 될것 같습니다. 부탁드립니다!
#include<avr/io.h>
#include<avr/interrupt.h>
#include<util/delay.h>unsigned char lowValue=0;
unsigned char highValue=0;
unsigned int adcValue=0;
unsigned char timer0Cnt=0;
SIGNAL(SIG_OVERFLOW0);int main()
{
DDRC=0xFF;
DDRB = 0xFF; // 미세먼지센서 내부 LED를 동작 시키기위한 PWM파형 출력 포트 설정
DDRD = 0x0F; // 모터드라이버 제어 포트D
DDRF = 0x00; // 미세먼지센서에서 나온 아날로그값을 디지털값으로 변환하기 위한 포트TCCR0 = 0x76;
TCNT0 = 8;OCR0 = 248;
EICRA = 0x3F; // 인터럽트0,1,2 허용 레지스터
EICRB = 0x00;
EIMSK = 0x07;
EIFR = 0x07;TIMSK = 1 << TOIE0; //인터럽트 enable 하는 레지스터
TCNT0 = 0x00; //타이머/카운터 레지스터
TCCR0 = 0x01; //타이머/카운터 제어 레지스터TIMSK |= 1 << TOIE2;
TIFR |= 1 << TOV2;
TCNT2 = 112; //256-112 = 144 => 0.01s
TCCR2 = 0x05;
DDRG=0x03; //led점등을 위해 g포트 출력으로
PORTG=0xFF;
ADMUX=0xC0; //f포트사용
ADCSR=0xA7;
ADCSR |= 0x40; //ADC start conversionsei();
while(1)
{
dsensor(); // 거리센서함수
}
return 0;}
SIGNAL(SIG_OVERFLOW0) // 오버플로우 인터럽트 (먼지센서 ADC)
{cli();
TCNT2 = 112;
timer0Cnt++;if(timer0Cnt ==10) // 0.01s * 10 = 0.1s
{timer0Cnt = 0;
while( (ADCSR&0x10)==0x00); //ADC 변환이 끝날때 까지 대기
lowValue = ADCL;
highValue= ADCH ;
adcValue = (highValue << 8) | lowValue ;}
sei();
}void dsensor()
{
if(adcValue>300) //adcValue가 300보다 크면 led꺼짐, 창문 닫힘
{
PORTG=0x00; // LED 꺼짐PORTC=0x0F; // 창문 닫힘
_delay_ms(5000);
_delay_ms(5000);
}
else
{
PORTG=0xFF; // LED켜짐
PORTC=0xF0; // 창문 열림
}
}
댓글 1
조회수 7,360master님의 댓글
master 작성일엉터리 소스군요