ATmega128_초음파 센서

JS·2023년 3월 5일
0

ATmega128

목록 보기
8/9

초음파 센서를 이용하기 위해서는 외부 인터럽트에 대해 알아야한다.

사용할 초음파의 모델명은 HC-SR04이다.
해당 모델의 데이터 시트이다.
https://cdn.sparkfun.com/datasheets/Sensors/Proximity/HCSR04.pdf

이 데이터 시트를 기반으로 초음파센서 Driver를 만들 것이다.
데이터 시트에 의하면 HC-SR04스팩은 다음과 같다.

  • 해당 초음파센서는 2~400cm 까지 측정이 가능하다.
  • 오차는 3mm이다.
  • 초음파의 송수신이 가능하다.

(위의 그림1은 최소10μs 이상 High 신호가 인가될 경우, 그림2는 송신부에서 40KHz의 펄스가 8번 사이클 전된 것 그림3은 수신부에서 40KHz 펄스를 받으면 Echo pin에서 신호를 Low로 변경하는 그림)

trigger에서 최소10μs 이상 High 신호가 인가될 경우, 자동적으로 초음파센서의 송신부에서 40KHz의 펄스가 8번 사이클 전송되며, 8개의 신호가 모두 출력됐을때, Echo신호가 High로 변경됨. 그 후, 수신부에서 40KHz 펄스를 받으면 Echo pin에서 신호를 Low로 변경

소리의 속도는 340m/s -> 1초에 340m
Echo 신호가 High였다가 Low로 바뀌는 시간을 정확히 계산하기 위해서 Timer/Counter를 이용한다. -> 이를 위해서 외부 인터럽트를 사용

  • PE4~7, PD0~3핀이 인터럽트로 활용가능하다(INT0~7)
  • 외부 인터럽트란, Pin에 걸려 있는 신호에 따라서 Interrupt를 동작시키는 것
    -> 이때, 사용 가능한 신호는 Falling Edge, Rising Edge, Low신호이며, 주로 사용되는 신호는 Falling Edge, Rising Edge 신호이다.
  • ISCn1핀과 ISCn0 핀으로 특정 상태에서 인터럽트가 걸리도록 설정한다.

외부 인터럽트A는 EICRA(External Interrupt Condtol Register A)라 불리우며, 이 경우, 0 ~ 3번 까지 Interrupt Control이 가능

ISC bit이용하여 다음과 같이 Interrupt 설정이 가능하다.

  • 00 -> Low 신호에서 인터럽트가 걸리도록 한다.
  • 01 -> 기능 없음
  • 10 -> Falling Edge에서 인터럽트가 걸리게 한다.
  • 11-> Risig Edge에서 인터럽트가 걸리게 한다.

외부 인터럽트B는 EICRB(External Interrupt Condtol Register B)라고 하며, 이 경우, 4 ~ 7번 까지 Interrupt Control이 가능

ISC bit이용하여 다음과 같이 Interrupt 설정이 가능하다.

  • 00 -> Low 신호에서 인터럽트가 걸리도록 한다.
  • 01 -> Falling Edge, Risig Edge에서 모두 인터럽트가 걸리도록 한다.
  • 10 -> Falling Edge에서 인터럽트가 걸리게 한다.
  • 11-> Risig Edge에서 인터럽트가 걸리게 한다.

이러한 Interrupt가 원하는 핀에 걸리도록 하는것이 인터럽트 마스크 레지스터EIMSK(External Interrupt Mask Register)이다.

예를 들면 현재 사용하는 ATmega128의 경우, 나머지 핀이 LCD에 이용되고 있기때문에 PB3번 핀을 이용할 것이다.
이를 사용하기 위한 Mask Register를 이용하여 3번 레지스터만 사용이 가능하도록 해보자.
-> 이 경우 EIMSK를 00001000로 설정해준 뒤, EICR와 &연산을 해주면 된다.
이렇게 되면 다른 핀의 경우, EICR의 설정에 관계없이 0이 되지만, 3번 핀의 경우, 1과 &연산을 함으로써 EICR의 값을 따라가게 된다.

초음파센서를 이용하여 거리를 구하기 위한 공식
-> 340 x 4 x 10^-6 x TNCT

이때의 카운터는 16bit인 1번 카운터를 이용하자

0개의 댓글