키보드에서 키 매트릭스 사용시 다이오드 사용 이유.


영문이긴 하지만 제가 설명보다 더 쉽게 이해할 수 있습니다.
http://pcbheaven.com/wikipages/How_Key_Matrices_Works/

//////////////////////////////////////////////

결론부터 말하자면
키 매트릭스 방식을 사용할 경우 다이오드를 꼭 사용해 주어야 하는 이유는 고스트키 때문 입니다.

다이오드란?
여러 기능이 있지만 여기서는 전기의 흐름을 제어하기 위해 사용합니다.
다이오드는 전기를 흘릴수 있는 방향이 정해져 있기 때문입니다.


키 매트릭스를 사용하는 이유는 IO(인풋/아웃풋)핀의 수를 적게 사용하여 가격을 낮출수 있기 때문입니다.

      A1       A2
        |          |
B1  --D--------F--
        |          |
B2  --C--------V--


키 매트릭스 동작은 대략 다음과 같습니다.
(정확하진 않고 이해하기 쉽게 각색했습니다.)

---------------------------------------------------------------------------------------
정해진 클럭마다 다음과 같은 반복을 합니다.

B1에 전기를 흘려주고 A1, A2에 전기가 오는지 체크합니다.
  이때 A1에 전기가 온다면 D를 누른 것이고 A2에 전기가 온다면 F를 누른것 입니다.
B1에 흘려주던 전기를 끊습니다.

B2에 전기를 흘려주고 A1, A2에 전기가 오는지 체크합니다.
  이때 A1에 전기가 온다면 C를 누른 것이고 A2에 전기가 온다면 V를 누른것 입니다.
B2에 흘려주던 전기를 끊습니다.

반복.
---------------------------------------------------------------------------------------


다이오드를 사용하지 않으면 다음과 같은 상황에 고스트키라는 현상이 발생합니다.
D, F, V를 동시에 눌렀다면 누르지도 않은 C가 눌렀다고 판단하게 됩니다.
왜냐하면 다음과 같습니다.

---------------------------------------------------------------------------------------
B1에 전기를 흘려주고 A1, A2에 전기가 오는지 체크합니다.
  이때 D, F를 누른것이므로 A1, A2에 전기가 옵니다.
B1에 흘려주던 전기를 끊습니다.

B2에 전기를 흘려주고 A1, A2에 전기가 오는지 체크합니다.
  이때 V를 누른것 이므로 A2에 전기가 옵니다.
  하지만 B2에 흘려준 전기가 V -> F -> D 를 타고 A1에도 전기가 흘러서 C도 눌렀다고 오판하게 됩니다.
B2에 흘려주던 전기를 끊습니다.
---------------------------------------------------------------------------------------

고스트키를 해결하기 위해 버튼마다 다이오드를 붙여주게 됩니다.
대략 다음 회로과 비슷하게 됩니다.
정해진 곳으로만 흐르게 되어 고스트키 문제가 해결되게 됩니다.

혹시 오류나 추가해야할 것이 있어 알려주신다면 업데이트 하겠습니다.

댓글

  1. 작성자가 댓글을 삭제했습니다.

    답글삭제
  2. 궁금한게 d f v 누르면 b1 b2 a1 a2 모두 전기 흐르게 되고
    그러면 문자 c 도 입력되는거 아니에요?
    제가 전기쪽은 잘 몰라서 이렇게 질문드리게 되었네요

    답글삭제
    답글
    1. 질문처럼 되려면 B1, B2에 한꺼번에 전기를 흘렸을때 입니다.
      하지만 키입력을 체크할때는 B1에 전기를 흘리고 A1, A2에 전기가 들어오는지 체크하여 처리한 후 끊습니다. 그리고 다음 B2에 위의 동작을 반복하게 됩니다. 질문하신 것같이 되진 않습니다.
      위에 적혀있듯이 제 나름대로 이해하기 쉽게 각색한 부분이 있습니다. 정확히는 On, Off 처리가 반대입니다.
      혹시 질문이 해결되지 않으셨다면 "키보드 매트릭스 알고리즘"에 관해 찾아보시길 바랍니다. 현재 대부분의 기계식 키보드가 키입력을 처리하는 방식입니다.

      삭제
  3. 늦게 보게 되었네요
    답변 감사합니다^^
    이런저런 일로 바빠서 못보고 있다가
    이제야 아두이노로 키보드 디자인하고 회로 만드려고 준비하고 있네요

    답글삭제

댓글 쓰기

이 블로그의 인기 게시물

파이썬 vscode에서 자동 코드 정렬. Formatter.

Unity3D git 저장소에 올릴때 필요없는 파일 제외하기. gitignore

플러터(flutter) 개발 참고 사이트들.