[AVR] bouncing 현상 하드웨어적 해결방법
Q1. 기계식 스위치에서 발생하는 바운싱 (bouncing) 또는 채터링 (chattering)이 무엇인지 설명하라.
기계적으로 스위치를 누를 때 전압이 회로에 불규칙적으로 공급되어 전류가 비정상적으로 흐르는 현상
Q2.다음은 바운싱을 방지하는 (debouncing) 기능을 포함한 스위치 회로
가) 오랜 시간 동안 스위치가 눌려지지 않고 있다. 이 때의 상태를 설명하는 회로를 그리고 출력 전압 v를 구하여라.
커패시터에 걸린 전압은 시간이 무한히 지나면, R2와 같은 전압이 걸리고, 출력 전압은 5R2/(R1+R2)이다.
나) 위 상태에서 사용자가 스위치를 누른 후 계속 그 상태를 유지하였다. 스위치를 누른 직후부터 출력
전압 v의 변화를 그래프로 그려라. 출력 전압 v가 최종적으로 수렴하는 값과 그 값까지 수렴하는데
걸리는 시간을 구하고 이를 그래프에 표시하여라.
다) 사용자가 스위치를 누르고 있다가 뗐다. 스위치를 뗀 직후부터 출력 전압 v의 변화를 그래프로 그려라.
출력 전압 v가 최종적으로 수렴하는 값과 수렴하는데 걸리는 시간을 구하고 이를 그래프에 표시하여라.
라) 사용자가 스위치를 누를 때와 뗄 때 출력 전압 v의 변화 속도는 어떻게 다른지 그 이유가 무엇인지
설명하여라. (HINT: 시정수)
마) 위 회로에서 capacitor가 없는 상태에서 스위치를 눌렀다 떼었다. 이 때 스위치에서 바운싱 현상이
발생하여 출력 전압 v는 다음 그림과 같은 형태가 되었다고 가정하자. 위 그림에 표시된 펄스의 폭은 모두 0.5 ms이다. capacitor가 연결되어 있는 상태에서 이런 바운싱 현상이 발생했다면 출력 전압 v의 형태가 어떻게 달라지게 되는 그래프를 그리고 설명하여라. (질문 (라)의 답을 이해한다면 이 질문에 쉽게 답할 수 있을 것이다.
3\. 실험 5에서는 외부 인터럽트 INT3과 INT7을 사용했지만 이번 실험에서는 이 인터럽트를 사용하지 않고 PCINT만을 사용할 것이다. interrupt\_init() 함수에서 PCINT을 사용하기 위한 설정을 하려고 한다. ATmega1281의 PB5와 PB6은 PCINT5와 PCINT6 입력으로 사용할 수 있다. 이를 위하여 아래 함수를 완성하고 그 내용을 설명하여라.
pin change interrupt는 해당 포트(PORTB)의 한 핀이라도 1이 되면 인터럽트가 발생한다. PCMSK를 통해 핀의 조건인 1이 되면 interrupt가 발생하도록 설정하고, PCINT5, 6이 PCIE0가 컨드롤 하기 때문에 PCICR의 해당 Bit를 1로 masking하여 PCIn의 인터럽트를 활성화시킨다.
```
void interrupt_init(void){
PCMSK0 |= _BV(PCINT6)|_BV(PCINT5);
PCICR |= _BV(PCIE0);
sei();
}
```