DUJINLABS.COM

전자회로 실무 / 입력·펌웨어

여러 버튼(button)을 ADC(Analog-to-Digital Converter) 하나로 읽을 때는 중심값 대신 허용 전압 구간을 정합니다

입력 핀(pin)을 아끼면서 여러 버튼(button)을 읽으려면 저항마다 다른 전압을 만드는 회로를 ADC(Analog-to-Digital Converter) 하나에 연결할 수 있습니다. 실제 전압에는 부품 오차와 잡음이 섞이므로 버튼마다 숫자 하나만 지정해서는 오입력이 생길 수 있습니다. 버튼별 허용 전압 구간과 손을 뗀 상태·동시 누름 상태를 구분하는 방법을 설명합니다.

먼저 알아둘 용어

저항망·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 노드 전압
버튼 10 Ω0 V
버튼 21 kΩ0.300 V
버튼 32.2 kΩ약 0.595 V
버튼 44.7 kΩ약 1.055 V
버튼 510 kΩ1.650 V
버튼 622 kΩ약 2.269 V
누르지 않음개방3.300 V

전압은 3.3×아래쪽 저항/(10 kΩ+아래쪽 저항)으로 계산합니다. 실제 판정 범위는 풀업과 아래쪽 저항의 공차, 접점 저항, ADC 잡음·정착을 포함해 이 표와 별도로 정합니다. 무입력의 전원 전압이 ADC 허용 범위와 맞는지도 확인합니다.

작동 원리

각 버튼이 다른 분압을 만들면 한 ADC로 여러 상태를 구분할 수 있습니다. 버튼을 판별할 때는 계산한 전압 하나가 아니라, 저항 오차와 ADC 잡음, 접점 저항 때문에 달라질 수 있는 전압 범위를 사용합니다. 동시에 두 버튼을 누르면 새 병렬 경로가 만들어져 다른 단일 버튼처럼 보일 수 있습니다.

적용 순서

  1. 무입력과 각 단일 버튼의 실제 전압·ADC 코드를 기록합니다. 전원과 온도, 저항 공차에 따른 최소·최대 구간을 계산하거나 측정합니다.
  1. 서로 이웃한 상태의 구간 사이에 여유를 두고 판정 경계를 정합니다. 기준 전압과 버튼망 전원이 같다면 비율 측정의 이점을 활용하되 절대값을 무조건 고정하지 않습니다.
  1. 연속된 여러 샘플이 같은 구간에 들어올 때만 상태를 바꾸고, 눌림과 해제에 히스테리시스·디바운스를 둡니다.
  1. 가능한 동시 누름 상태를 시험합니다. 지원하지 않을 상태는 오류/무효로 처리하고 단일 버튼으로 잘못 해석되지 않는지 확인합니다.

적용 조건과 한계

저항망에 긴 배선이 붙으면 잡음·입력 정착·정전기 보호 조건이 추가됩니다. 보호소자와 필터(filter)의 누설·용량도 전압 구간과 응답에 영향을 줍니다.

동시 누름은 항상 무효 구간으로 나타나는 것이 아닙니다. 위 계산 예에서 0 Ω 버튼과 다른 버튼을 함께 누르면 0 Ω 버튼 하나와 같은 전압이므로 ADC만으로 구분할 수 없습니다. 지원하지 않는 조합이 단일 명령으로 겹치는지 실제 저항망으로 확인합니다. 조합 식별이나 중요한 명령의 독립성이 필요하면 별도 입력 또는 적합한 키 매트릭스(matrix) 방식과 요구사항을 비교합니다.

확인과 기록

각 버튼 상태에서 측정된 코드의 최솟값과 최댓값을 기록하고, 이웃 버튼으로 판정될 경계까지 얼마나 여유가 있는지 확인합니다. 노이즈가 많은 상태에서도 버튼 하나가 다른 버튼으로 판정되지 않는지 반복 확인합니다.

작업 순서를 다시 확인합니다

여러 버튼을 ADC 하나로 읽을 때는 중심값 대신 허용 전압 구간을 정합니다 — 설명용 도해
여러 버튼을 ADC 하나로 읽을 때는 중심값 대신 허용 전압 구간을 정합니다 — 설명용 도해 · 클릭하면 확대됩니다.