본문 바로가기
코스웨어/13년 스마트컨트롤러

<11일 정리> AVR로 초음파 센서 값 LCD로 출력하기 - 문예진

by 알 수 없는 사용자 2013. 6. 11.
728x90
반응형

<초음파 흐름>

-초음파의 선연결:

에코 아웃풋: PIN 6번

트리거 인풋: PIN 97

1) 트리거 신호를 PIN97에 일정시간 준다

2) 초음파 센서에서 알아서 트리거 신호가 들어오면 8번의 초음파를 쏜다

3) 8개의 초음파를 다 쏘자마자 상승하면 타이머 인터럽트가 걸려서 시간을 잰다 

4) 8개의 초음파가 다 돌아오면 하강엣지가 발생하고 타이머가 카운트 한 값을 계산하는 인터럽트가 걸린다



<초음파 센서 회로 연결도>


   

<인터럽트가 걸리는 순간>



<소스 분석>


-트리거 인풋 핀인 PIN97 은 PORTA의 구역이다. TRG_Init 에서 PORTA를 아웃풋으로 셋팅하고 핀을 low로 셋팅한다.

-타이밍도를 보면 트리거 신호를 일정시간 보낸다. TRG_Pulse 함수가 소스로 나타낸 것이다.


-트리거 신호를 주고 8개의 초음파가 나가고 Ehco 핀이 상승 될 때까지 와일문으로 기다린다.

-타이머 카운트 방식은 오버플로우로 한다

-글로벌 인터럽트 sei 를 적으면 모든 인터럽트가 허용이 된다. 에코 상승했을 때 인터럽트가 걸리도록 설정해 놓았기 때문에 아까 와일문을 빠져나왔기 때문에 sei를 허용하면 상승엣지에 인터럽트가 걸리게 된다.

-타이머가 카운트 되고 하강엣지가 되었을 때 


vector_5 인터럽트가 나와서 카운트 한 값(uiTic)을 uiDist에 넣는다. 

-다시 UTRA_Run 함수로 오면 벡터 5함수에서 uiState가 0이 되었기 때문에 와일문을 빠져나오고,

다시 타이머와 에코함수(하강엣지에 인터럽트)가 초기화 된다.


-3자리를 하나씩 쪼개서 계산한 값을 LCD에 출력하게 된다.





728x90