BASIC4MCU | 질문게시판 | 답변 : 답변 : avr로 dust 센서 이용하고 싶은데 안되서 질문드립니다.
페이지 정보
작성자 YESJUY 작성일2018-12-05 16:11 조회3,514회 댓글0건첨부파일
본문
답변 감사합니다. 답변 주신 코드로 다시 실행해 봤는데 lcd에서 값이 0,0만 뜨더라구요.
함수값이 잘못 된가 싶어서 여러부분 만져보앗지만 제 능력이 안되서 염치 불구하고 다시 답장 달아요.
이 값이 답변 주신 값이구요.
#define F_CPU 16000000UL // 16 MHz
#include <avr/io.h>
#include <stdio.h>
#include <util/delay.h>
//
int read_adc(){
ADCSRA=0x87; while(!(ADCSRA&(1<<ADIF))); ADCSRA|=(1<<ADIF);
return ADC;
}
//
int main(){
long value,dust; char str[20];
DDRE=0xFF;
LcdInit();
LcdMove(0,0);
LcdPuts("ADC CSD Lab.");
ADMUX=0x43; ADCSRA=0x87;
while(1){
_delay_ms(1000);
PORTE=0x10;
_delay_us( 280);
value=read_adc();
_delay_us( 40);
PORTE=0x00;
_delay_us(9680);
dust=(value*0.000830078125-0.1)*1000.0;
sprintf(str,"Dust Val:%4d",(int)dust);
LcdMove(1,0);
LcdPuts(str);
}
void ADC_Init()
{
ADMUX=(1<<REFS0)|(3<<MUX0);
ADCSRA = (1<<ADEN)|(7<<ADPS0);
}
unsigned short read_adc()
{
unsigned short value;
ADCSRA = ADCSRA|0x40;
while(!(ADCSRA & (1<<ADIF)));
ADCSRA = ADCSRA|(1<<ADIF);
value = ADC;
return value;
}
----------------------------------------------------------------------
첨부파일에 Lcd 해더파일과 c 파일 넣어놓을께요 ..
딜레이 부분은 오류가 나서 뒤에 ms 붙여서 오류 잡아봤는데 이렇게 하는게 맞는지요.
포트는 adc 경우 3번핀 디지털 핀같은 경우 7번에 꼽아놨습니다.
댓글 0
조회수 3,514등록된 댓글이 없습니다.