먼저 알아둘 용어
저항망·ADC(Analog-to-Digital Converter) 코드 — 저항망은 버튼 상태에 따라 다른 분압을 만드는 연결입니다. ADC 코드는 그 전압을 기준 전압에 대한 숫자로 표현한 값으로 실제 공차와 잡음 범위를 함께 고려해야 합니다.
히스테리시스(hysteresis)·디바운스(debounce) — 히스테리시스는 상태 진입과 해제 경계에 차이를 두어 경계 근처의 흔들림을 줄이는 방법입니다. 디바운스는 접점이 짧게 여러 번 튀는 구간을 안정된 한 번의 입력으로 처리합니다.
비율 측정·병렬 경로 — 버튼망 전원과 ADC 기준이 같으면 전원 변화 일부가 전압의 비율에서 상쇄될 수 있습니다. 두 버튼을 동시에 누르면 저항이 병렬이 되어 별도의 전압이 생길 수 있습니다.
저항 연결을 정한 뒤 버튼별 전압을 계산합니다
예를 들어 ADC 노드(node)를 10 kΩ으로 3.3 V에 풀업(pull-up)하고, 여섯 버튼 각각이 서로 다른 저항을 통해 그 노드를 GND(Ground)로 연결하는 구조를 생각합니다. 버튼 아래쪽 저항을 0 Ω·1 kΩ·2.2 kΩ·4.7 kΩ·10 kΩ·22 kΩ으로 가정하면 한 버튼만 누른 이상적인 전압은 다음과 같습니다. 아래는 설계 계산 예이며 측정 결과나 모든 부품에 적용할 권장값은 아닙니다.
| 상태 | 아래쪽 저항 | 이상적인 ADC 노드 전압 |
|---|---|---|
| 버튼 1 | 0 Ω | 0 V |
| 버튼 2 | 1 kΩ | 0.300 V |
| 버튼 3 | 2.2 kΩ | 약 0.595 V |
| 버튼 4 | 4.7 kΩ | 약 1.055 V |
| 버튼 5 | 10 kΩ | 1.650 V |
| 버튼 6 | 22 kΩ | 약 2.269 V |
| 누르지 않음 | 개방 | 3.300 V |
전압은 3.3×아래쪽 저항/(10 kΩ+아래쪽 저항)으로 계산합니다. 실제 판정 범위는 풀업과 아래쪽 저항의 공차, 접점 저항, ADC 잡음·정착을 포함해 이 표와 별도로 정합니다. 무입력의 전원 전압이 ADC 허용 범위와 맞는지도 확인합니다.
작동 원리
각 버튼이 다른 분압을 만들면 한 ADC로 여러 상태를 구분할 수 있습니다. 버튼을 판별할 때는 계산한 전압 하나가 아니라, 저항 오차와 ADC 잡음, 접점 저항 때문에 달라질 수 있는 전압 범위를 사용합니다. 동시에 두 버튼을 누르면 새 병렬 경로가 만들어져 다른 단일 버튼처럼 보일 수 있습니다.
적용 순서
- 무입력과 각 단일 버튼의 실제 전압·ADC 코드를 기록합니다. 전원과 온도, 저항 공차에 따른 최소·최대 구간을 계산하거나 측정합니다.
- 서로 이웃한 상태의 구간 사이에 여유를 두고 판정 경계를 정합니다. 기준 전압과 버튼망 전원이 같다면 비율 측정의 이점을 활용하되 절대값을 무조건 고정하지 않습니다.
- 연속된 여러 샘플이 같은 구간에 들어올 때만 상태를 바꾸고, 눌림과 해제에 히스테리시스·디바운스를 둡니다.
- 가능한 동시 누름 상태를 시험합니다. 지원하지 않을 상태는 오류/무효로 처리하고 단일 버튼으로 잘못 해석되지 않는지 확인합니다.
적용 조건과 한계
저항망에 긴 배선이 붙으면 잡음·입력 정착·정전기 보호 조건이 추가됩니다. 보호소자와 필터(filter)의 누설·용량도 전압 구간과 응답에 영향을 줍니다.
동시 누름은 항상 무효 구간으로 나타나는 것이 아닙니다. 위 계산 예에서 0 Ω 버튼과 다른 버튼을 함께 누르면 0 Ω 버튼 하나와 같은 전압이므로 ADC만으로 구분할 수 없습니다. 지원하지 않는 조합이 단일 명령으로 겹치는지 실제 저항망으로 확인합니다. 조합 식별이나 중요한 명령의 독립성이 필요하면 별도 입력 또는 적합한 키 매트릭스(matrix) 방식과 요구사항을 비교합니다.
확인과 기록
각 버튼 상태에서 측정된 코드의 최솟값과 최댓값을 기록하고, 이웃 버튼으로 판정될 경계까지 얼마나 여유가 있는지 확인합니다. 노이즈가 많은 상태에서도 버튼 하나가 다른 버튼으로 판정되지 않는지 반복 확인합니다.