BASIC4MCU | 질문게시판 | ATMEGA128 조도센서에 따라 모터회전 하게 하고 싶은데 어떻게 해야할까요 ?
페이지 정보
작성자 봉구 작성일2021-06-07 14:03 조회7,293회 댓글2건본문
조도 값에 따라 LED 2개를 초록불과 빨강불을 키고 싶은데
if(ad_val >100){ -> 이 부분 부등호에 따라 색깔만 바뀌고, 조도값에 따라서는 바뀌지 않습니다.
어디가 문제일까요 ㅠㅠ
#include <mega128.h>
#include <delay.h>
void main(void)
{
int ad_val;
DDRC = 0xFF;
PORTC = 0x00;
DDRB=0x20; // PB5 out
TCCR1A=0x82;
TCCR1B=0x1A;
OCR1A=3000;
ICR1=19999; // OCR1A -> OC Clear / Fast PWM TOP = ICR1 / 8분주
ADMUX = 0x01;
ADCSRA = 0x87; // ADEN=1, ADFR=1, ADSC=1, 16MHz // 256분주 -> 125kHz
delay_ms(5);
while(1){
ADCSRA = 0xC7; // ADEN=1, ADSC = 1 변환 시작
while((ADCSRA & 0x10) == 0); // ADIF=1이 될떄까지
ad_val = (int)ADCL + ((int)ADCH << 8); // A/D값 읽기
if(ad_val >100){
PORTC = 0b01000000;
OCR1A = 2000; // 0 degree, >2ms pulse
delay_ms(1000);
PORTC = 0b00000000;
}
else{
PORTC = 0b10000000;
OCR1A = 1000; // 180 degree, <1ms pulse
delay_ms(1000);
PORTC = 0b00000000;
}
}
}
댓글 2
조회수 7,293master님의 댓글
master 작성일
#include <mega128.h>
#include <delay.h>
//
void main(void){
int ad_val;
DDRC=0xFF;
DDRB=0x20; // PB5 out
TCCR1A=0x82; TCCR1B=0x1A; OCR1A=3000; ICR1=19999; // OCR1A -> OC Clear / Fast PWM TOP=ICR1 / 8분주
ADMUX=0x01; ADCSRA=0xE7;
delay_ms(5);
while(1){
ad_val=ADCW;
if(ad_val>100){ PORTC=0b01000000; OCR1A=2000; } // 0 degree, >2ms pulse
else { PORTC=0b10000000; OCR1A=1000; } // 180 degree, <1ms pulse
delay_ms(1000);
PORTC=0b00000000;
}
}
봉구님의 댓글
봉구
여전히 빨강불만 출력이 되는데 혹시 회로가 잘못되었을까요 ? 회로사진 추가해서 올려보도록 하겠습니다!