BASIC4MCU | 질문게시판 | 코드비젼 초음파 질문..
페이지 정보
작성자 초짜 작성일2018-11-16 18:38 조회6,422회 댓글3건본문
초음파 센서를 달았는데...7_seg에서 막 1-11 이렇게 뜨고 거리제면 알수없는 숫자가 나오네요ㅠㅠ
근데 도대체 머가 문제인지 모르겠네요 ㅠㅠ
#include <mega128a.h>
#include <delay.h>
#define TRIGGER PORTD.0flash unsigned char seg_pat[10]={0x3f, 0x06, 0x5b, 0x4f, 0x66,0x6d, 0x7d,0x07,0x7f,0x6f};
flash unsigned char seg_on[4] = {0x08, 0x04,0x02,0x01};typedef unsigned char U8;
U8 EEE[16];
U8 dsp_no =0;
U8 echo_st =0;void Distance_out(void);
unsigned int cnt =0;
unsigned int dist = 0;
unsigned int N1000, N100, N10,N1;
void main(void)
{
DDRB = 0xFF;
DDRD = 0b11111101;
DDRG = 0xFF;
PORTB =0x0;
PORTD = 0x0;
TRIGGER =0;TIMSK = 0x41;
TCCR0 = 0x07;
ASSR = 0x0;
TCNT0 =176;
TCCR2 = 0x00;
TCNT2 = 138;
SREG = 0x80;while (1)
{
// Please write your application code here
cnt =0;
TRIGGER = 1;
delay_us(15);
TRIGGER = 0;
while(PIND.1 ==0);
TCNT2= 138;
TCCR2 = 0x02;
while(PIND.1 !=0){
if(cnt >300)break;
}
TCCR2= 0x0;
if(cnt >2 && cnt <300)dist = cnt;
else dist =300;
Distance_out();
delay_ms(100);
}
}
void Distance_out(void){
int buf;N1000 = dist/1000;
buf = dist%1000;
N100 = buf/100;
buf = buf%100;
N10 = buf/10;
N1 = buf%10;}
interrupt [TIM0_OVF] void TIMER0 (void)
{
unsigned char pat;
TCNT0 =176;
if(dsp_no ==0)pat =N1;
else if(dsp_no ==1)pat =N10;
else if(dsp_no ==2)pat =N100;
else pat =N1000;PORTG = seg_on[dsp_no];
PORTB = (seg_pat[pat]&0x70) | (PORTB &0x0F);
PORTD = (seg_pat[pat]&0x0F) | (PORTD &0x0F);
dsp_no = (dsp_no +1)%4;}
interrupt [TIM2_OVF] void TIMER2(void)
{
TCNT2 = 138;
cnt++;
}
댓글 3
조회수 6,422master님의 댓글
master 작성일
어디 예제로 공부하는지 모르겠지만
예제를 제공하는 곳에 문의 해보세요
master님의 댓글
master 작성일
우리 사이트 초음파센서 예제는 16비트 타이머를 사용하고 있습니다.
타이머 클럭은 0.5us로 정밀하죠
8비트 타이머로는 긴 시간을 측정하지 못하고, 정밀도도 안나옵니다.
//
https://www.basic4mcu.com/bbs/board.php?bo_table=gesiyo6&wr_id=63
강좌 게시판의 기초 예제를 먼저 공부하시는 것이
더 빨리 실력을 키울 수 있습니다.
100여개의 예제가 있는데 하는데까지 공부해보세요
너무 어려운 예제는 건너 뛰면 됩니다.
초짜님의 댓글
초짜
PORTD = ((seg_pat[pat]&0x0F)<<4) | (PORTD &0x0F); 이리써야하는데..
PORTD = (seg_pat[pat]&0x0F) | (PORTD &0x0F); 이렇게 써서 오류가 낳네요 ㅋㅋㅋㅋㅋ