기본적으로 AVR의 경우 USB 칩이 없으면 USB 통신이 불가능 합니다.(몇몇 ATUSB 모델 제외)
그것을 소프트웨어적으로 구현을 하여 USB통신이 가능하게 하는 라이브러리가 있더군요. 그리고 이 프로젝트는 GNU 라이센스를 따르구요!

V-USB 에 대해 좀더 자세히 알고 싶으신 분은 아래 링크에 방문해 보세요.

http://www.obdev.at/products/vusb/index.html



위 라이브러리를 이용하여 ATMega 128을 이용해 컴퓨터에서 가용가능한 키보드를 만들어 보았습니다. 이 소스를 이용해 범용 키보드(106키보드)도 제작이 가능합니다. 소스가 제법 길기 때문에 블로그에서 하나하나 소개는 못해드립니다만;; 일단 컴파일 가능한 소스를 첨부해 두었으니 공부용으로 사용해보시는것도 그리 나쁘진 않을겁니다.

이 소스를 컴파일 하기 위해서는 avr-gcc 가 필요합니다. 그중에서 윈도우에서 사용가능한 버전으로 winavr 이 있고 이는 아래 링크에서 좀 더 자세한 정보를 얻을 수 있습니다.

http://winavr.sourceforge.net/index.html

 현재 이 글이 블로깅 되는 시점에 최신버전은 20100110 버전이네요.

물론 첨부된 소스는 리눅스나 맥오에스 등에서도 컴파일이 가능하며, 그경우 각 OS 에 맞는 avr-gcc 를 설치해 둔 상태여야 합니다.

뭐;;; 서론이 길었습니다;; 첨부파일에 소스외에는 아무것도 포함되어있지 않기 때문에 보시기 조금 힘드실 수도 있겠습니다;;

우선 ATmega128 이용하였고, 크리스탈은 16Mhz 적용되어있습니다.

PORTD.0 - USB D-
PORTD.2 - USB D+

연결 되어있으며, PORTD.2 는 1.5kOhm 의 저항으로 풀업 되어있습니다.
그리고 PORTD.0과 PORTD.2 핀과 USB D-, USB D+ 사이에는 68Ohm 이 직렬로 연결되어있습니다.

USB V+ 에서 AVR VCC 핀으로 1n4004 두개가 직렬로 연결되어있는데, 이는 하나만 달거나 혹은 LED, 아니면 그냥 연결해도 무관할것 같습니다.

그리고 PORTA[2:0] 에 LED가 3개 연결되어있으며, 이 LED는 Numlock(0), Capslock(1), Scrolllock(2) 을 표시하는 역할을 합니다. 

PORTC에 키 매트릭스(4x4)가 연결되어있고, Low Nibble에 가로줄, High Nibble 에 세로줄이 연결되어있습니다.
(회로도가 없는점 양해 부탁드립니다;)


hid_keyboard_firmware.zip


마우스도 만들어 둔게 있는데, 그건 다음번 블로깅때 올리도록 하지요 ^^


저작자 표시 비영리 동일 조건 변경 허락
Posted by 나르미스


티스토리 툴바