인터럽트를 이용한 디지털 입력회로의 바운싱 현상 해결 - ATMEGA 2560

디지털 회로의 물리적 접점인 스위치를 사용할때 생기는 접점단속현성인 바운싱/채터링 현상은 디지털 시스템의 입력 오류를 만든다. 이를 해결하기 위한 여러가지 방법 중 가장 간단하고 추가적인 회로 구성이 필요하지 않은 방법인 인터럽트를 사용한 해결 방법을 알아본다.

바운싱

디지털 회로에서 스위치 입력을 사용할 때 항상 골치 아프게 하는 것 중 하나는 바로 바운싱(bouncing) 또는 채터링 (chattering) 이라고 불리우는 접점단속(接點斷屬) 현상이다.

기본적으로 스위치는 떨어진 두 지점을 물리적인 방법을 이용하여 하나로 붙여 주는 역할을 한다. 여기서 '물리적'이란 게 중요한데, 사람은 스위치를 한번 꾸~~욱 하고 누른것 같으나, 실제로는 스위치가 눌려서 두 접점이 붙는 그 찰나의 순간에, 물리적(기계적)인 반동으로 인해 튕겨 나왔다 다시 붙는 현상이 발생한다.

이 현상을 없에는 가장 좋은 방법은. 비싸고 좋은 스위치를 사는것! 비싸고 좋은 스위치는 싸구려 스위치보다 바운싱 현상의 발생이 덜 하다. 또 다른 방법은, 스위치에 병렬로 콘덴샤(cap)을 달아주는 것. 전압이 튀는 동안 콘덴샤가 일종의 버퍼 역할을 해 주며, 마구 튀어대는 전압을 잡아 준다.

하지만 문제는, 콘덴샤를 달고 스위치를 바꿔도, 근본적으로 그 해결이 안된다는 것.. 어찌 되었든 결국엔 소프트웨어에서 바운싱 현상으로 인한 오류를 막기위한 방법을 마련해 두어야 한다. 그렇지 않으면 나는 분명 버튼을 한번 눌렀는데, 결과는 수~수십 번 누른 것과 같은 결과가 나온다. 게다가 이건 랜덤인지라.. 한 번 누른걸로 나올지, 몇십 번 누른걸로 나올지, 언제 나올지 예상이 불가능하다. 결국 내가 만든 시스템이 어떻게 동작할 지 전혀 예상 할 수 없는 랜덤박스가 되어 버린다.

오실로스코프로 본 바운싱

오실로스코프로 본 접점의 바운싱 파형
오실로스코프로 본 접점의 바운싱 파형

NKK Switch 회사에서 만든, YB26WSKW01-2CF02-JB 토글식 푸시스위치를 이용해, 스위치가 동작하는 순간에 어떤 일이 일어나는지 오실로스코프로 확인해 본 그림이다. 이 그림은 스위치를 '딱 한 번' 누른 순간이다. 노란색은 스위치의 출력단을 찍었고, 하늘색은 스위치로 동작하는 ATMEGA 2560 AVR의 인터럽트 루틴이 실행된 것을 의미한다. 몇번 실행된건지 세기도 싫다...

지연시간으로 바운싱 회피

이러한 바운싱 현상은 물리적 스위치를 사용한다면 필연적으로 해결해야 할 문제이다. 이를 위한 여러가지 방법이 존재한다. 그 중 지연시간을 이용해 바운싱을 회피할 수 있다.

간단히 말해, 스위치를 동작해서 스위치의 바운싱 현상이 사라질 때 까지 약간의 시간을 두고 기다리는 것이다. 그럴경우, 의도하지 않은 추가적인 동작을 하지 않게 된다. 별도의 회로를 구성하거나 하지 않아도 되기 때문에 가장 간단하게 사용할 수 있는 방법이다.

적용과 결론

ISR(PCINT0_vect) { PCICR = PCICR & 0xFE; // 하는동안 딴 짓 못하게 인터럽트 백터 막고 PORTA=0xff; // 불을 켜 보고 // 할거 하고 _delay_ms(1); // 스위치를 입력을 1msec 동안 씹는다. PCIFR = (1<<PCIF0); // 기다릴만큼 기다렸으니, 인터럽트 플래그 해제 PCICR = PCICR | 0x01; // 인터럽트 다시 활성화 PORTA=0x00; // 불을 꺼 보자 }

오실로스코프로 본 바운싱 회피
실행 결과

처음 인터럽트가 발생하고 1msec 동안 (PORTA 가 HIGH) 십수차례 바운싱 현상으로 인한 전압변화가 있었지만, 추가적인 실행 없이, 1번만 실행되는 것을 알 수 있다. 물론, 단점도 있다. 어찌 되었든 임의의 지연시간을 추가로 할당 한 것이기 때문에, 전체적인 시스템의 동작 속도는 느려지게 된다. 정말 즉각적인 반응이 필요한 시스템에서는 사용하기에 곤란할 수 있긴 하지만, 보통 일반적인 목적의 스위치에서는 충분히 사용할 만 하고, 추가적인 비용없이 사용할 수 있는 해결 방법이다.

이 글은 2020. 1. 7. 14:18 작성 되었습니다.

반응형