BASIC4MCU | 질문게시판 | 답변 : 적외선 센서 사용 질문입니다..
페이지 정보
작성자 master 작성일2019-12-04 15:12 조회5,083회 댓글1건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=11027
본문
//스위치를 누르면 모터가 돌아가고,적외선센서를 막으면 모터가 off,그렇지 않으면 on 하는 것을 만들고 싶은데요....작동은 하지 않는 상태입니다.//#include <avr/io.h>#include <avr/interrupt.h>#include <util/delay.h>#include <stdio.h>//volatile int count=0,cnt=0;//ISR(TIMER_COMP_vect){if(++count==255)count=0;//if(count<cnt)PORTF=0x03;else PORTF=0x00; //모터가 돌지않는 거}//void main(){DDRF=0xff; // F가 모터,C가 센서,A가 스위치OCR0=0x05; TCCR0=0x01; TIMSK=0x02; // 출력비교,타이머가 해당값이 되면 오버플로우ADMUX=0x01; ADCSRA=0xc7;sei();while(1){if(PINC&0x01){if(PINA==0x01)cnt=0;if(PINA==0x02)cnt=50;if(PINA==0x04)cnt=100;if(PINA==0x08)cnt=200;if(PINA=0x10)cnt=255;}else{ cnt=0; }}}
if(PINA==0x01)cnt=0;if(PINA==0x02)cnt=50;if(PINA==0x04)cnt=100;if(PINA==0x08)cnt=200;if(PINA=0x10)cnt=255; // 문법 오류 있습니다. if(PINA==0x10) 조건식의 논리비교는 == 두개 사용해야합니다.스위치를 누르면 1이 입력되는 경우의 체크인데요if(PINA&0x01)cnt=0;if(PINA&0x02)cnt=50;if(PINA&0x04)cnt=100;if(PINA&0x08)cnt=200;if(PINA&0x10)cnt=255;다른 비트의 영향을 받지 않으려면 이렇게 체크하는 것이 더 좋습니다.//OCR0=0x05; TCCR0=0x01; TIMSK=0x02; // 출력비교,타이머가 해당값이 되면 오버플로우
분주비가 1이면 너무 짧지 않나요?
타이머 주기는
16000000/1/(5+1)=0.375us
이렇게 짧으면 인터럽트 함수 실행하기에도 시간이 부족해서 메인함수가 실행되지 않습니다.
분주비 1이라도 CTC비교매치 인터럽트는 TCCR0=0x01; 이 아니고 TCCR0=0x09; 로 설정 해야합니다.
128이 아니라서 mcu 디바이스명을 알아야하는데 언급된 것이 없습니다.
TCCR0=0x0A; OCR0=19; TIMSK=2; // 16000000/8/(1+19),10us
우선 10us로 변경 해서 돌려보세요//
//스위치를 누르면 모터가 돌아가고,적외선센서를 막으면 모터가 off,그렇지 않으면 on 하는 것을 만들고 싶은데요....작동은 하지 않는 상태입니다.//#include <avr/io.h>#include <avr/interrupt.h>#include <util/delay.h>#include <stdio.h>//volatile int count=0,cnt=0;//ISR(TIMER_COMP_vect){if(++count==255)count=0;//if(count<cnt)PORTF=0x03;else PORTF=0x00; //모터가 돌지않는 거}//void main(){DDRF=0xff; // F가 모터,C가 센서,A가 스위치TCCR0=0x0A; OCR0=19; TIMSK=2; // 16000000/8/(1+ 19),10usADMUX=0x01; ADCSRA=0xE7;sei();while(1){if(PINC&0x01){if(PINA&0x01)cnt=0;if(PINA&0x02)cnt=50;if(PINA&0x04)cnt=100;if(PINA&0x08)cnt=200;if(PINA&0x10)cnt=255;}else{ cnt=0; }}}
댓글 1
조회수 5,083돼지11님의 댓글
돼지11 작성일정말 감사합니다!!