from Project/└ Other.. 2013. 8. 1. 01:52

사전적 의미로는 
전자회로 내의 스위치나 계전기의 접점이 붙거나 떨어질 때 기계적인 진동에 의해

실제로는 매우 짧은 시간안에 접점이 붙었다가 떨어지는 것을 반복하는 현상으로 회로에 좋지않은 영향을 끼치므로 없애는게 좋습니다.


실제 회로에서는 스위치의 과도 현상으로 인해 나타나는 전류의 단속 현상 이라고도 합니다.


이 문제를 방지하기 위해선 크게 Hardware 적 방법과 Software 적 방법이 있는데요.


쉽게 사용하는 Hardware 적 방법은

스위치에 저항과 Capacitor를 병렬로 잘 연결해서 하는 방법인데 부피 차지가 크므로 비추천 합니다.

나중에 찾아보니 SW방식의 경우 delay가 생기기때문에 빠른 응답속도가 필요한 프로그램에서는
별로 좋은방법이 아니라고 하네요.
따라서 HW 방법을 더 추천합니다. RS 플립플롭을 활용한 방법인데요.
자세한 방법은 http://blog.naver.com/l_2442_l/90049261377 이 링크를 참조하세요


더 좋은 방법으로 Software 적 방법을 보자면

시간지연(Time delay)루틴을 이용하는 방법인데,

키가 눌러질 때는 처음 Low 상태가 검출되면 20ms 정도의 시간 지연을 주고 다시 Low상태를 확인하여 키가 눌러진 것으로 인식하고

그 다음 손을 떼서 High상태가 검출되면 20ms의 시간 지연 후에 다시 High 상태를 확인하여 떼어졌음을 인식합니다.

위 두가지를 합쳐서 1번 스위치가 눌렸음을 알 수 있게 됩니다.


이를 간단한 프로그래밍으로 나타내면,

delay_ms(100);  //스위치 누를 때의 채터링 방지용 딜레이

while(!PIND.?);  //스위치가 ?인 동안 대기

delay_ms(100);  //스위치가 손을 뗄 때의 채터링 방지용 딜레이

이것을 인터럽트 루틴에 넣어서 실행하면 됩니다.

,