BASIC4MCU | 질문게시판 | ATMEGA128을 이용한 초음파센서 거리측정 질문합니다.
페이지 정보
작성자 정기린 작성일2018-12-18 14:15 조회7,812회 댓글0건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=7000
본문
ATMEGA128을 이용하여 HC-SR04를 사용해보고 있습니다.아직 타이머 레지스터에 대한 이해가 부족하여HC-SR04에 대한 데이터시트를 보고 적용을 못시키고 있네요ㅠㅠ.우선, 프로그램은 코드비전을 사용하고 있습니다.인터럽트를 사용하지 않고 하는 방법으로 진행하고 있습니다.트리거 핀을 통해 10us의 길이의 펄스를 입력하고에코 핀에서 시간의 길이에 비례하는 펄스를 출력한다.58us가 1cm로 계산합니다.트리거핀을 포트C에 0번에에코핀을 포트A에0번 핀에 연결해서 테스트 하고 있습니다.관련 자료를 계속 찾다가 몇일째 막혀 질문 올립니다 ㅠㅠ.아! 그리고 혹시 답변해주실때 처럼 깔끔하게 소스를 올리는 것을 어떻게 하는지알 수 있을까요? 방법을 모르니 좀 보기 불편하게 올리게 되네요ㅠ 시간되시면 알려주시면감사하겠습니다.#include <mega128.h> //Atmega128 여러가지 레지스터값들 헤더파일#include <stdio.h>#include <delay.h> //딜레이를 쓰기위한 헤더#define Trigger PORTC.0 // 포트C 0번 트리거 출력#define Echo PINA.0 // 포트G 1번 에코 입력 PIN-> 포트 입력 레지스터(읽기만 가능)/* I/O포트 8비트 6개 A~F까지 포트G는 5비트이다. */unsigned int getEcho(void){unsigned int range;while(!Echo); //에코핀 하이TCNT1=0; //8주기 0.5usTCCR1B=2;while(Echo); // 에코 하강TCCR1B=8;range=TCNT1/116; // 범위cmreturn(range);}void main(void){unsigned int range;DDRB=0x60;DDRC=0x10;DDRA=0x00;TCCR1A=0;TCCR1B=8;delay_ms(100);while(1){Trigger=1;delay_us(10);Trigger=0; //10usrange = getEcho();/* 5cm이상 일 경우 끝에 LED점등 딜레이 후 소등.*/if(range>5){PORTC=0b00000001;delay_ms(100);PORTC=0x00;}/* 3cm이내일 경우 끝에서 두번째 LED점등 딜레이 후 소등.*/else if(range<3){PORTC=0b00000010;delay_ms(100);PORTC=0x00;}}}
댓글 0
조회수 7,812등록된 댓글이 없습니다.