임베디드/ATmega128 2008/03/15 22:48

Bouncing
스위치에서 필연적으로 생기는 현상으로, 스위치에 내장된 스프링과 같은 탄성체가
접점에서 떨어질때 자신이 가진 탄성과 접촉면의 불균일성 때문에 농구공 튀듯이
부르르 떠는 현상, 결과적으로 여러번 개폐가 수초내에 생기는 것이다.

Chattering
이것 또한 스위치 필연적으로 생기는 현상으로, 이것역시 접점의 접촉면 불균일성
때문에 On/Off가 반복되다가 안정되는 현상이다 공학적인 면에서 봤을땐, 바운싱과
채터링을 거의 동일한 현상이라고 간주 한다,

내가 생각했을때는, 바운싱은 스위치의 신호가 떠는 현상만을 일컫는 것이고,
채터링은 바운싱 +입력 신호 검출이라 생각된다.

여기서 입력 신호 검출이란, 사용자가 스위치를 한번 눌렀을때, 이 신호를 잡아내는 MCU등은 워낙 빠른 속도로 동작하기
때문에 사용자가 잠깐 누르는 시간 동안에도 몇번씩 신호을 읽어 오게 된다. 그래서 스위치를 한번 눌렀음에도 불구하고 스위치를 여러번 누른것과 같은 효과가 생기는것이다.
이것을 통틀어서 채터링이 생긴다고 하는것 같다.

해결책
보통 2가지 방법으로 위 두가지 현상을 해결하는데 첫째는 하드웨어적인 해결이고
두번째는 소프트웨어적인 해결이다.
소프트웨어적인 해결만 생각해 보자

채터링 현상을 잡아 내기 위해선, 스위치가 눌러 졌을때와 스위치를 눌렀다 떼었을때를 생각 해보야 한다.

첫째, 눌렀을때 바로 스위치가 연결되는것이 아니고 수cycle동안 미세하게 신호가 떨리게 된다.
그래서 이 구간을 벗어나게 해야 되는데,
해결책으론 처음 눌렀을때 스위치 값과 수 cycle의 시간이 지난후에
스위치 값을 다시 읽어 처음에 읽은 값과 비교를 해보는것이다.
그래서 비교를 해서 동일 하다면 스위치 입력으로 간주하는것이다. 이와 비슷한 방법으로 cpu의 타이머 인터럽트 세팅해서 스위치가 눌러 졌을때 스위치 값을 한번 읽고,
타이머 동안의 시간이 지난후 다시 스위치 값을 읽어 오는 방법이 있겠다.

둘째로, 눌렀다 떼었을때다.
이부분이 사실 중요하다 볼수있다. 하룻동안 생각을 잘못해서 본인이 스위치 값만 읽어와서 0과 같으면 스위치를 떼었다고

간 주하고 프로그래밍을 했었다. 완전 잘못된 것이었다.
스위치가 눌린 상태든 떨어진 상태든지, 스위치가 열고 닫히는 구간에서 신호가 변하게 된다. 이것을 잡아 내면 되는것이다.
즉, 처음에 신호를 읽어오고 수cycle뒤에 스위치 값을 읽어와서
먼저 읽은 신호와 비교를 해서 신호가 다르면 스위치가 떨어졌다고 생각하면 되는것이다

'Computer Science' 카테고리의 다른 글

PIC16C84  (0) 2008.08.29
Electronic combination lock with PIC  (0) 2008.08.29
PIC의 활용 (PIC16F84, pic16f877)  (0) 2008.08.27
MFC 주요 멤버 변수와 함수  (0) 2008.08.26
C++ 에서의 메모리 할당  (0) 2008.08.12

+ Recent posts