내가 사용한 한 가지 방법은 CMOS 입력의 용량 특성을 활용합니다.
이 회로 시뮬레이션 – CircuitLab을 사용하여 작성된 회로도
스위치 위의 회로에서 닫을 때 풀다운 저항은 GPIO의 입력 커패시턴스를 접지 수준까지 충전 / 방전 할 수 있습니다.
이 회로의 트릭은 GPIO의 양방향 특성을 사용하여 스위치가 열려있을 때 입력을 로직 하이 레벨로 충전하는 것입니다.
제어 루틴은 주기적으로 핀을 높은 레벨로 끄거나 간단히 충전을 유지하기에 충분히 긴 기간 동안 풀업을 가능하게합니다. 그런 다음 입력 핀은 동적 메모리 비트처럼 작동하며 대부분의 장치에서 상당한 시간 동안 충전을 유지합니다.
올바르게 구성된 경우 버튼을 누르면 핀의 충전이 재생률보다 빠르게 방전됩니다. 그런 다음 해당 조건을 새로 고치기 작업 전에 읽기로 새로 고침 알고리즘의 일부로 감지하거나 인터럽트를 구동하는 데 사용할 수 있습니다.
커패시터를 재충전하고 저항과 스위치가 닫혀 있으면 커패시터를 재충전하기 위해 전력이 리프레시 펄스 동안 잠시 사용된다. 그러나, 리프레시 펄스의 길이는 짧고 폴링 주파수는 리프레시 전류가 상대적으로 중요하지 않게한다.
분명히이 방법은 활발한 방법입니다. 마이크로가 잠자기 상태가되면, 깨어날 때 스위치 상태가 결정되지 않습니다. 깨우기 후 첫 번째 새로 고침주기는 핀 읽기를 무시해야합니다. 또한이 방법을 사용하여 마이크로를 깨워서는 안됩니다. 잠자리에 들기 전에 핀을 저출력으로 활성화하여 전류가 0 인 상태로 유지하는 것이 좋습니다.
셋업 딥 스위치와 같은 더 많은 정적 스위치를 읽으려면 연속 새로 고침주기 대신 전용 루틴을 사용할 수 있습니다. 읽은 후 부동 입력 문제를 방지하기 위해 GPIO 핀을 활성 저출력 상태 (제로 전류)에서 "파킹"해야합니다.
참고 :이 기술은 트레이스 길이가 길고 잡음이 많은 영역을 통과하는 경우 노이즈 감도가 약간 저하됩니다. 따라서 R1은 입력 핀에 가까워 야합니다. 그러나 핀에 가까운 정전 용량을 추가하지 않는 한 스위치를 전면 패널 어딘가에서 어딘가에 연결하는 것은 권장하지 않습니다.