BASIC4MCU | 질문게시판 | 센서 질문입니다
페이지 정보
작성자 오기 작성일2019-12-18 19:12 조회5,199회 댓글2건본문
#include <mega128.h>
#include <stdio.h>
#include <delay.h>
//
unsigned int adc_value, temp=0;
//
void main(void){
DDRB=0xFF;
ADMUX=0x41; ADCSRA=0xE7; // lm35 60번핀(ADC1)으로 옮겨서 0x41로 변경했습니다
while(1){
adc_value=ADCW;
temp=(int)( (float)adc_value * 5000.0 / 1023.0 );
if(temp>550){ PORTB=0xFF; delay_ms(200); }
else { PORTB=0x00; delay_ms(200); }
}
}
실행중인 예제 소스입니다. 부저 확인차 16,17번에 두개를 달았어서 0xff로 변경했습니다.
부저가 작동안된 원인은 코드비젼 문제였던 것 같습니다. 다른 노트북 코드비젼을 사용하니 작동됩니다
여기서 온도값이 550 밑으로 내리면 부저가 바로울리고
울리지 않는 최저값인 550에서도 온도센서인 lm35의 온도를 올려도 부저가 작동하지 않습니다.
op앰프를 사용하지 않았다하더라도 상식선을 벗어난 온도값이고 센서에 온도를 올려주어도 작동하지 않는 이유를 모르겠습니다.
매번 답변해주셔서 감사합니다.
댓글 2
조회수 5,199master님의 댓글
master 작성일
temp=(int)( (float)adc_value * 5000.0 / 1023.0 );
if(temp>550){ PORTB=0xFF; delay_ms(200); }
소스에서의 550은 55도 입니다.
55도로 바꾸려면
temp=(int)( (float)adc_value * 500.0 / 1023.0 );
if(temp>55){ PORTB=0xFF; delay_ms(200); }
이렇게 하면 됩니다.
master님의 댓글
master 작성일
계산 결과를 10배로 만든 이유는
sprintf(str,"%2d.%d",temp/10,temp%10);
정수형 변수로 소숫점 1자리를 표기하기 위한 것입니다.