V-USB 를 활용한 ATmega328/168P기반의 USB 키보드 1

키보드나 마우스 혹은 조이스틱과 같은 장치를 만들어보려고 할 때 HID 프로파일을 지원하는 제품을 찾게 된다. 이러한 제품의 경우 개발이 간편하고 고급 기능을 지원하지만 단가가 높은 편이다. 

반면 ATmega AVR 에  V-USB를 사용하면 ATmega8 과 같은 비교적 저렴한 가격의 IC 로도 USB 1.1 규격의 키보드나 마우스, 조이스틱과 같은 다양한 USB 장치들을 만들 수 있다.

V-USB 관련하여 아래 웹사이트에 재미있는 프로젝트들이 많이 있다.

이번에 ATmega328/168P와 V-USB를 사용해서 5V 로 동작하는 작은 테스트용 키보드를 만들어 보려고 한다.


V-USB 를 사용한 장치는 호스트 장치와 연결시 ATmega328/168P에 있는 UART 포트인 PD0 와 PD1으로 통신하지 않고 PD2 와 PD4 를 사용하게 된다. 여기서ATmega328/168P의 경우 5V 전원 공급에서 디지털 포트도 5V 까지 동작하게 되는데 이 부분을 주의해야 한다.

일반적으로 USB는 전원 공급에 5V를 사용하지만, 양쪽 데이터 라인은 HIGH 에서 2.8V~3.6V, LOW 에서 0.0V~0.3V  전압으로 정격화된다. 이는 호스트 측으로 입력이 3.6V 보다 높아지지 않도록 주의해야 함을 의미한다. 만약 5V 신호를 그대로 USB 데이터 라인에 입력하게 되면 호스트 장치의 입력 회로를 손상시킬 수 있다.



USB 데이터 라인의 회로 손상을 방지하기 위해 일반적으로 사용되는 방법으로 왼쪽 회로처럼 데이터 라인에 3.6V 제너 다이오드를 병렬로 사용해서 전압을 조정하는 방법이 있다. 만약 이 방법이 마음에 들지 않는다면 ATmega328/168P 에 3.3V 전원을 공급하는 방법도 있다.

오른쪽 회로는 아두이노 호환 보드에서 흔하게 볼 수 있는 CH340C를 사용한 USB 시리얼 통신 포트이다. ATmega328/168P에 아두이노 부트로더를 함께 다운로드 받으면 아두이노와 동일하게 사용할 수 있다.


이것은 키보드의 메인보드라고 볼 수 있다. 왼쪽의 핀 헤더는 디지털, 오른쪽 핀 헤더는 아날로그로 구성되어있다. 하단의 USB는 시리얼 통신용이고 상단은 HID로서 호스트 장치 연결에 사용된다. 우측 상단의 LED 는 왼쪽부터 동작상태, 전원, RX, TX 순이다.


키보드는 5x4 배열로 구성하였다. 쿼티를 모두 구성해봤자 부품과 노동력도 많이 들어가고 어차피 그렇게 사용하지도 않을 것 같고 재미로 만드는 것 이기에 텐키나 천지인 정도를 생각하고 만들어 보았다.


Comments

Popular posts from this blog

[Python] - 블루투스 모듈 HC-06의 MAC 주소를 이용하여 통신 포트 찾기

[POE] - 패스 오브 엑자일 획득키 F 의 사용법 (Path of Exile)

[Arduino] - HC-06를 이용해 PC 와 Arduino 블루투스 연결

[Raspberry Pi] - 라즈베리 파이에서 멀티미디어 감상에 적절한 비디오 세팅