메뉴 바로가기

서브메뉴 바로가기

본문 바로가기

logo

묻고 답하기
WhiteAT2015.01.06 21:53

올려 주신 코드는 폴링 방식으로 펄스를 체크하는 방식입니다.

이런 방식은 정확한 시간을 측정하기 어렵습니다.


INT0, INT1 을 사용하신거 같은데 상승 에지를 디텍트 하려면


기본 레지스터를 설정하고

MCUCR = 0x0F; // INT0, INT1 상승에지 사용

GICR = 0xC0    ; // INT0, INT1 인터럽트 사용

_SEI();        // 전체 인터럽트 인에이블

while(1) {}       // 무한 루프 



 

인터럽트 루틴을 따로 처리하면 됩니다.

int starttime=0;

int endtime=0;

    // INT0 걸리면

  ISR(INT0_vect)

  {

   // INT0 처리

    starttime =  TCNT0;

  }

 

   // INT1 걸리면

  ISR(INT1_vect)

  {

   // INT1 처리

    endtime =  TCNT0;

  }



시간 차 구하기

시간차 = (endtime - starttime)/ 스케일값   ; 입니다.

(이 값은 클럭 속도와 DIV 값에 따라 달라지므로 스케일값을 구해서 계산하시면 됩니다.)

사진 및 파일 첨부

여기에 파일을 끌어 놓거나 왼쪽의 버튼을 클릭하세요.

파일 용량 제한 : 0MB (허용 확장자 : *.*)

0개 첨부 됨 ( / )