BASIC4MCU | 질문게시판 | 답변 : 아트메가128/ srf05 초음파센서를 이용한 타이머 인터럽트 질문입니다
페이지 정보
작성자 master 작성일2022-05-26 14:56 조회446회 댓글0건본문
#include <avr/io.h>
#define F_CPU16000000UL
#include <util/delay.h>
//
#define TRIG 6
#define ECHO 7
//
#define SOUND_VELOCITY 340UL
//
#define STOP_SPEED 00
#define LOW_SPEED 77
#define MID_SPEED 153
#define HIGH_SPEED 225
//
#define MOTOR_CW 0xa0
#define MOTOR_CCW 0x60
#define MOTOR_BRAKE 0xe0
#define MOTOR_STOP 0x00
//
int motor_speed[4]={STOP_SPEED,LOW_SPEED,MID_SPEED,HIGH_SPEED};
unsigned int distance,i;
volatile int count=0,value=0;
//
int main(void){
DDRB=0xff; PORTB=MOTOR_CW;
DDRE=((DDRE|(1<<TRIG))&~(1<<ECHO));
TCCR2=0x6c;
while(1){
TCCR1B=0x03; PORTE&=~(1<<TRIG); _delay_us(10);
PORTE|=(1<<TRIG); _delay_us(10); PORTE&=~(1<<TRIG);
while(!(PINE&(1<<ECHO))); TCNT1=0X0000;
while(PINE&(1<<ECHO)); TCCR1B=0X00;
distance=(unsigned int)(SOUND_VELOCITY*(TCNT1*4/2)/1000);
//
if (distance<100){ OCR2=motor_speed[0]; }
else if(distance<300){ OCR2=motor_speed[1]; }
else if(distance<500){ OCR2=motor_speed[2]; }
else { OCR2=motor_speed[3]; }
}
}
현재 초음파 센서를 이용해 모터 속도를 조절하는 코드를 작성중인데
여기서 초음파 센서의 delay 코드를 타이머 인터럽트 쪽으로 바꾸는식으로 코드를 짜고싶은데
막혀서 질문 드립니다
//
딜레이라고는 10us 딜레이 밖에 안보이는데 구지 이렇게 짧은 딜레이를 인터럽트로 바꿀 필요가 있을까요?
원래는 50ms~100ms 정도의 딜레이를 무한루프 제일 아래에 두어야 합니다.
지금처럼 딜레이 없이 초음파를 사용하면 제대로 거리값을 측정하지 못합니다.
//
https://cafe.naver.com/circuitsmanual/115690
SRF-04 (SRF-05, HC-SR04) 초음파센서 인터럽트로 읽기 - 16비트 타이머
SRF-04 (SRF-05, HC-SR04) 초음파센서 인터럽트로 읽기 - 8비트 타이머
인터럽트를 사용해서 거리값을 측정하는 예제를 공부해서 완성시켜보세요
댓글 0
조회수 446등록된 댓글이 없습니다.