여기 제품이 있습니다. 아이디어를 이해합니다.이 16 개의 버튼은 4x4 매트릭스를 사용합니다. 4 줄, 4 줄, 8 개의 케이블이 있습니다.
그러나:
멀티플렉서없이 어떻게 작동합니까?
여러 버튼을 정확하게 누르는 것을 감지 할 수 있습니까? 버튼이 같은 행이나 같은 열을 사용하더라도? 예 : 위치 (2,2) (2,3), (3,2) 및 (3,3)의 버튼을 동시에 눌렀습니다.
어떻게 작동합니까?
여기 제품이 있습니다. 아이디어를 이해합니다.이 16 개의 버튼은 4x4 매트릭스를 사용합니다. 4 줄, 4 줄, 8 개의 케이블이 있습니다.
그러나:
멀티플렉서없이 어떻게 작동합니까?
여러 버튼을 정확하게 누르는 것을 감지 할 수 있습니까? 버튼이 같은 행이나 같은 열을 사용하더라도? 예 : 위치 (2,2) (2,3), (3,2) 및 (3,3)의 버튼을 동시에 눌렀습니다.
어떻게 작동합니까?
답변:
멀티플렉서없이 어떻게 작동합니까?
그렇지 않습니다. 키패드 보드에는 스위치가있는 것 같습니다. 아마도 우리가 볼 수없는 다이오드가 있습니다. 그러나 왼쪽 보드에는 프로세서가있는 것처럼 보입니다. 거의 확실하게 멀티플렉싱이 펌웨어에서 수행되고 있습니다.
멀티플렉싱 알고리즘은 다음과 같이 작동합니다.
상기 과정은 충분히 반복되어 인간 관찰자에게 여전히 즉각적인 느낌을주는 시간 내에 모든 버튼이 점검된다. 이러한 맥락에서 "인스턴트"의 인간 한계는 약 50ms입니다. 저가형 마이크로 컨트롤러조차도 그보다 훨씬 적은 시간에 4x4 키패드를 스캔 할 수 있습니다.
여러 버튼을 정확하게 누르는 것을 감지 할 수 있습니까?
아마 그렇습니다. 한 가지 방법은 각 버튼과 다이오드를 직렬로 연결하는 것입니다. 그것들은 당신이 보여준 보드의 바닥에있을 수 있습니다. 다이오드를 사용하면 위에서 설명한 알고리즘이 작동합니다.
다른 방법은 저항을 선과 직렬로 연결하고 아날로그 전압을 측정하는 것입니다. 여러 행 / 열 줄을 함께 단락시키는 여러 단추가 있어도 어떤 단추를 눌렀는지 알아낼 수 있습니다. 이를 위해서는 다이오드 사용과 같은 디지털 입력뿐만 아니라 마이크로의 A / D 입력이 필요합니다.
다이오드가 없으면 팬텀 사각형이 나타납니다.
예를 들어 (2,2) (2,3), (3,2) 및 (3,3); 직사각형을 선택하여 아이러니 한 예를 선택했습니다. 당신이 경우 실제로 네를 누르면, 그것은 작동합니다. 그러나 사각형의 세 모퉁이를 누르면 네 번째 모퉁이도 눌려진 것처럼 보이지만 나타납니다 .
이 키패드는 사용자 데이터가 한 번에 한 번만 누르면 키보드 데이터 입력을위한 것입니다. 예를 들어, 주유소 신용 카드 입력 키패드에는 "shift"키가 없습니다.
그러나 S1을 Shift 키로, S3을 Alt-Shift 키로 설정하여 사용자가 S13을 누르는 동안 합리적으로 유지할 수 있으면 S15도 눌린 것으로 나타납니다.
Bare Atmel AVR 마이크로 컨트롤러에서 Assembly Language를 사용하여이 작업을 수행했습니다.
간단하게하기 위해 : 키패드 행 : Arduino 핀 4,5,6 및 7 사용 (AVR 핀 PD4, PD5, PD6 및 PD7) 키패드 열 : Arduino 핀 8, 9, 10 및 11 사용 (AVR 핀 PB0, PB1, PB2 및 PB3 ) 풀업이 활성화 된 상태에서 행 핀 입력을 만듭니다. 열 핀 출력 및 출력 0을 만듭니다. 모든 행 및 열 핀에서 핀 변경 인터럽트 사용. http://playground.arduino.cc/Main/PinChangeInterrupt
키패드의 버튼을 누르면 로우 핀이 낮아집니다. 인터럽트 루틴은 행 핀을 읽고 어느 핀이 낮은지를 찾아야합니다. 상위 4 비트는 3과 1이어야합니다. uint8_t 8 비트 변수를 사용하는 경우 변수를 16 또는 (var >> 4)로 나누어 4 비트를 숫자의 하위 비트에 넣을 수 있습니다. 비트 단위 OR | 240을 사용하여 상위 4 비트를 1로 설정하고 비트 NOT ~ 작업을 수행하여 모든 비트를 반전하므로 버튼 누름이 표시된 행을 나타내는 비트 세트가 하나만 있습니다. 이 번호를 0, 1, 2 또는 3으로 저장
하십시오. 핀 구성을 전환하십시오.
풀업이 활성화 된 상태에서 열 핀 입력을 만듭니다. 행 핀 출력 및 출력 0을 만듭니다. 열 핀을 읽고 어느 핀이 낮은 지 찾으십시오. 숫자를 오른쪽으로 이동할 필요가 없다는 점을 제외하고이 값을 사용하여 유사한 조작을 수행하십시오. var ^ 240 및 ^ var 후에는 키를 누른 열을 나타내는 단일 비트가 있습니다. 원하지 않는 인터럽트가 발생할 가능성이 있으므로 포트를 재구성하기 전에 인터럽트를 비활성화하십시오. 인터럽트 루틴을 떠날 때 중복 인터럽트 처리를 방지하기 위해 인터럽트 플래그를 지워야 할 수도 있습니다.