1.

예전에 USB 조이스틱을 만들기 위해서 인터넷을 열심히 돌아보았던 기억이 나네요.

USB가 대중화되기 이전에는 사운드 카드의 미디 포트에 조이스틱을 연결해서 사용했습니다(http://lovme.tistory.com/1)

인터넷 돌면 시리얼 포트 패러러 포트에 연결해서 사용하는 조이스틱 회로를 구할 수 있던데, 요새 컴퓨터는 이 포트들이 사라져가는 추세죠.

심지어, 콘솔 게임기도 USB(플스3)포트를 사용합니다.



강좌라고 하기는 좀 그렇고.. 걍 저랑 같이 따라 만들면서 '아 이렇게 해서 USB조이스틱을 만들 수 있구나'하는 걸 느껴보아요.



2.

준비물.

USB가 돌아가는 칩, 회로기판, 회로용 부품, 납땜용 연선, 인두기, 인두 받침, 납, ... 등등

제가 지금 쓸 줄 아는게 MICROCHIP의 PIC시리즈 제품 밖에 없으니깐 그걸루 만들어보아요.

그리고, MICROCHIP에서 제공하는 솔루션 들이 너무나도 훌륭해서 그냥 그거 가져다가 바로 쓰면 됩니다.

그럼 바로 만들 수 있어요!!!

더이상 USB 조이스틱 회로를 찾기 위해 인터넷을 헤매이지 않아도 됩니다. ㅎㅎ



3.

Microchip Application Libraries(http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2680&dDocName=en547784)

이런거 쓰는 많은 분들이, 마이크로칩에서 당사 제품에 대한 지원이 너무나도 뛰어나다고 하십니다.

다른 칩은 어떤지 모르겠네요.

제가 봤을 때 정말 훌륭합니다. 그냥 여기서 제공하는 자료만 보고 뚝딱뚝딱 만들면 왠만한 수준 낮은 어플리케이션은 손쉽게 만들 수 있습니다.

위 링크를 들어가시면 하단 부에 마이크로칩 어플리케이션 라이브러리즈가 있습니다.

사용하시는 운영체제에 맞추어 다운 받아 인스톨 하시면 됩니다.

저는 윈도우 xp를 쓰니깐 윈도우용을 받아볼게요.

설치를 마치고 C:\Microchip Solutions v2011-12-05\USB\Device - HID - Joystick\Firmware 폴더에 가보면

main.c 파일이 있습니다.

C언어를 아시는 분이시라면 들어가서 같이 함 보죠.



4.

main.c

파일의 구조를 살살 살펴보아요.

전반부의 /**CONFIGURATION*************** 은 데모보드에 맞게 컴파일 했을 때 바로 올려서 쓸 수 있게 해놓은거에요.

앞부분 무시무시무시~

/** PRIVATE PROTOTYPES *********************************************/
void BlinkUSBStatus(void);
BOOL Switch2IsPressed(void);
BOOL Switch3IsPressed(void);
static void InitializeSystem(void);
void ProcessIO(void);
void UserInit(void);
void YourHighPriorityISRCode();
void YourLowPriorityISRCode();
void USBCBSendResume(void);
void Joystick(void);

함수 프로토 타입 정의 입니다.

원래, 이 main.c은 조이스틱 데모 입니다.

즉 USB 조이스틱의 완전판이 아니라 데모버전인데요.

PC나 PS3에 연결 했을 때, 조이스틱으로 인식하게 되는 것. 그리고, 스위치2번을 눌렀을 때 버튼이 작동되는 것 입니다.


/** DECLARATIONS ***************************************************/
//http://www.microsoft.com/whdc/archive/hidgame.mspx
#define HAT_SWITCH_NORTH            0x0
#define HAT_SWITCH_NORTH_EAST       0x1
#define HAT_SWITCH_EAST             0x2
#define HAT_SWITCH_SOUTH_EAST       0x3
#define HAT_SWITCH_SOUTH            0x4
#define HAT_SWITCH_SOUTH_WEST       0x5
#define HAT_SWITCH_WEST             0x6
#define HAT_SWITCH_NORTH_WEST       0x7
#define HAT_SWITCH_NULL             0x8

햇스위치라고 정의되어있어서 조이스틱의 아날로그 버튼(플스3 조이패드)을 생각했는데요. 생각과 달리 패드의 4방향 버튼입니다. 그걸, 8방향으로 나타낸거라 생각하심되요.

아직은 이건 작동을 안합니다.

함수나 작동에 대한 구문이 안적혀 있거든요.

C는 시키는데로 해주는 녀석이라 ㅋ


그리고, 밑에 구조체를 보면

typedef union _INTPUT_CONTROLS_TYPEDEF
{
    struct
    {
        struct
        {
            BYTE square:1;
            BYTE x:1;
            BYTE o:1;
            BYTE triangle:1;
            BYTE L1:1;
            BYTE R1:1;
            BYTE L2:1;
            BYTE R2:1;//
            BYTE select:1;
            BYTE start:1;
            BYTE left_stick:1;
            BYTE right_stick:1;
            BYTE home:1;
            BYTE :3;    //filler
        } buttons;
        struct
        {
            BYTE hat_switch:4;
            BYTE :4;//filler
        } hat_switch;
        struct
        {
            BYTE X;
            BYTE Y;
            BYTE Z;
            BYTE Rz;
        } analog_stick;
    } members;
    BYTE val[7];
} INPUT_CONTROLS;

요런 녀석이 있네요.

정의된 이름을 보면 감이 오시죠? ㅎㅎ

딱 마침 플스3에 사용할 수 있도록 구조체가 정의되어 있는걸 보실 수 있습니다.

요걸 이용해서 플스3용 조이스틱을 만들 수 있는 것 입니다. ㅎㅎ


밑을 더 보면 이제 버튼을 눌렀을 때 작동 되는 데모에 대한 구문이 적혀 있는데 그건 패스.

나중에 더 보죠.



5.

다시 재료로 돌아와서..

http://neochip.co.kr/goods/list.php?category=037&sort_field=price&sort_type=asc 로 가봅니다.

USB를 쓸 수 있는 칩 중에서, 가장 가격이 싸고, 사용하기 편리한 칩으로 하죠.

SMD 제품을 쓰면 핀피치가 0.8mm인데, 그 사이사이 간격도 그정도 입니다.

그래서 나중에 땜질 할 때, 성질 버릴 수 있습니다. 편하게 DIP타입으로 해요.

PIC18F25J50-I/SP  요 녀석이 좋을 것 같네요.

플스3용 패드에 필요한 버튼이 최소한으로 생각해보면,

상,
하,
좌,
우,
네모,
세모,
오,
엑스,
L1,
L2,
R1,
R2,
홈,
스타트,
셀렉트

15핀이 필요하니깐 28핀 짜리로 하면 되겠습니다.

게다가 PIC18F25J50은 PIC18F46J50이랑 한 가족이므로, HardwareProfile - PIC18F46J50 PIM 데모보드의 헤더랑 소스파일만 살짝 손봐서 바로 쓸 수 있겠네요.

그럼, 칩 주문하러 ㄱㄱㄱㄱ

칩을 주문 했으니 다른 부품들도 사러 가보죠(칩 프로그래머가 없다면 사지 마세요.).



필요한 부품은,

만능기판, 발진용 크리스탈과 세라믹 케페시터(싸니깐), 리셋회로용 저항, 납땜용 연선, 납땜용 재료들.. 입니다.



6.

회로도.

회로를 어떻게 짤 것이냐.

아는게 하나도 없는데 --;

우리는 이 시점에서 다시 한번 MICROCHIP의 SUPPORT에 찬양을 ㅎㅎ

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en540669 에서 pdf로 된 user guide를 다운 받습니다.

이 녀석이 바로 PIC18F46J50 PIM 데모보드의 회로도 입니다.

문서의 말미에 Board Schematics라고 회로도가 나와있습니다.

이 회로도를 참조해서 우리는 우리가 필요한 회로를 만들면 되는 것입니다.

아주 빠르고 쉽게 만들 수 있죠? 참 좋네요 ㅎㅎㅎ


회로의 요점은 이것 입니다.

3.3볼트 전원을 사용할 것(USB는 전원이 5볼트 입니다. 그런데, PIC18F25J50 칩은 3.3볼트 짜리에요.

그니깐 전원은 3.3볼트로).

칩 프로그래밍용 핀헤더 빼놓을 것(일명, ICSP. 칩 프로그래머 있으신 분에 한함).

그리고, 15개의 핀을 조이스틱의 버튼들에 할당할 것.


이렇게 해서 만들어진 회로는 다음 시간에 올려볼게요.




전. 부품 값 송금하러 ㅋㅋㅋ
Posted by 공돌이pooh
,