ATmega128 HR-SR04 초음파 센서 제어하기 - 2

2019. 8. 24. 14:58임베디드/ATmega128

처음에 초음파 센서를 제어했던 로직은

1. 트리거 펄스를 gpio 출력으로 주고

2. 60ms delay를 주면서, 인터럽트를 기다린다.

3. 첫 에코 신호부터 타이머를 동작시켜 TCNT를 세고, 두번째 에코 신호 때 거리를 환산한다

 

이와 조금은 유사하지만 약간 다르게 초음파 센서를 제어할 수 있다

 

[출처] https://cafe.naver.com/circuitsmanual/115690

 

 

초음파센서가 거리를 측정하는데 약 50~60ms의 여유를 둬야만 한다. 기존에는 60ms를 기다렸다. 현재는 50ms를 유지하는데, 유지를 delay가 아닌 PWM으로 기다릴 수 있다. 총 60ms의 PWM 파형을 만들어내는데, high 구간을 10us로 잡는다.

 

 

PWM 출력핀을 트리거 핀과 연결해 10us 트리거 신호를 발생시키도록 한다. 그리고 기존의 echo 신호는 외부인터럽트 4번으로 받는다

 

1. FAST PWM 14번 모드 (OC1A를 출력으로 설정)

2. 64분주, 1/16M*64 = 4usec

3. trigger OCR1A는 12usec를 줄 것이기 때문에 3-1=2를 준다

4. ICR1은 50ms로 맞출 것이기 때문에 ICR1=50ms/4usec -1 = 12499

 

그리고 인터럽트 조건을 상승,하강엣지를 모두 주는 것이 아닌 인터럽트 문에서 번갈아서 주게 된다