Страница 1 из 1

какой usb джойстик сделать?

Добавлено: Сб сен 17, 2011 10:41:09
95Виталь
собрался сделать джойстик но игрового порта у меня нет и поэтому задача затруднилась-надо делать на какойто другой порт (USB) какую схему мне посоветуете желательно попроще и подешевле

Re: какой usb джойстик сделать?

Добавлено: Сб сен 17, 2011 22:32:35
oleg235
Без микроконтроллера все равно не сделаешь. Оно тебе вообще надо?

Re: какой usb джойстик сделать?

Добавлено: Вс сен 18, 2011 07:01:44
kotofeev
Если нет игрового порта, то проще купить... А может от сом порта? Хотя я такие не встречал.

Re: какой usb джойстик сделать?

Добавлено: Вс сен 18, 2011 07:14:12
95Виталь
про сом порт я не слышал .... а кто нибудь собирал MJoy16?

Re: какой usb джойстик сделать?

Добавлено: Пн сен 19, 2011 15:18:59
virf
есть куча вариантов купить игровой порт, или на юсб, ком порте в нете полно схем только контролеры слишком пудреные

Re: какой usb джойстик сделать?

Добавлено: Пт сен 23, 2011 22:13:14
nibiluk
Я делал MJoy8 работает прекрасно http://www.joysticks.ru/joysticks/handmade/mjoy.shtml

Re: какой usb джойстик сделать?

Добавлено: Вс дек 04, 2011 22:03:51
igorkov
Делал USB-HID джойстик. Возникла следующая проблема: с помощью HID Descriptor Tool собрать следующий дескриптор HID-а:

Код: Выделить всё

    0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)
    0x09, 0x04,                    // USAGE (Joystick)
    0xa1, 0x01,                    // COLLECTION (Application)
    0x05, 0x02,                    //   USAGE_PAGE (Simulation Controls)

    0x09, 0xb0,                    //   USAGE (Aileron)
    0x15, 0x81,                    //   LOGICAL_MINIMUM (-127)
    0x25, 0x7f,                    //   LOGICAL_MAXIMUM (127)
    0x75, 0x08,                    //   REPORT_SIZE (8)
    0x95, 0x01,                    //   REPORT_COUNT (1)
    0x81, 0x02,                    //   INPUT (Data,Var,Abs)
	
    0x09, 0xb8,                    //   USAGE (Elevator)
    0x15, 0x81,                    //   LOGICAL_MINIMUM (-127)
    0x25, 0x7f,                    //   LOGICAL_MAXIMUM (127)
    0x75, 0x08,                    //   REPORT_SIZE (8)
    0x95, 0x01,                    //   REPORT_COUNT (1)
    0x81, 0x02,                    //   INPUT (Data,Var,Abs)
	
    0x09, 0xbb,                    //   USAGE (Throttle)
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
    0x26, 0xff, 0x00,              //   LOGICAL_MAXIMUM (255)
    0x75, 0x08,                    //   REPORT_SIZE (8)
    0x95, 0x01,                    //   REPORT_COUNT (1)
    0x81, 0x02,                    //   INPUT (Data,Var,Abs)

    0x09, 0xba,                    //   USAGE (Rudder)
    0x15, 0x81,                    //   LOGICAL_MINIMUM (-127)
    0x25, 0x7f,                    //   LOGICAL_MAXIMUM (127)
    0x75, 0x08,                    //   REPORT_SIZE (8)
    0x95, 0x01,                    //   REPORT_COUNT (1)
    0x81, 0x02,                    //   INPUT (Data,Var,Abs)

    0xc0                           // END_COLLECTION
Если кратко, 4 аналоговых оси: элероны, руль высоты, газ, руль направления, по 1 байту на каждую ось. Собственно, при подключении устройства видны и корректно обрабатываются только газ и руль направления. Пробовал менять свойства, пределы значений, так же пробовал другие варианты осей (Dial, Slider), так же переставлял местами оси. Ничего не помогает: упорно видится только газ и руль направления. Может кто знает, что в данном дескрипторе неверно?

После того, как взял из MJoy дескриптор (обрезав его до 4х каналов):

Код: Выделить всё

    0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)
    0x15, 0x00,                    // LOGICAL_MINIMUM (0)
    0x26, 0xff, 0x00,            // LOGICAL_MAXIMUM (255)
    0x75, 0x08,                    // REPORT_SIZE (8)
    0x09, 0x04,                    // USAGE (Joystick)
    0xa1, 0x01,                    // COLLECTION (Application)
    0x09, 0x01,                    //   USAGE (Pointer)
    0xa1, 0x00,                    //   COLLECTION (Physical)
    0x09, 0x30,                    //     USAGE (X)
    0x09, 0x31,                    //     USAGE (Y)
    0x95, 0x02,                    //     REPORT_COUNT (2)
    0x81, 0x82,                    //     INPUT (Data,Var,Abs,Vol)
    0xc0,                             //   END_COLLECTION
    0xa1, 0x00,                    //   COLLECTION (Physical)
    0x09, 0x32,                    //     USAGE (Z)
    0x09, 0x33,                    //     USAGE (Rx)
    0x95, 0x02,                    //     REPORT_COUNT (2)
    0x81, 0x82,                    //     INPUT (Data,Var,Abs,Vol)
    0xc0,                             //   END_COLLECTION
    0xc0                              // END_COLLECTION
Все 4 оси видятся, но под несколько другими именами. Собственно настроить софт на данном этапе не особая проблема, но все же может кто сталкивался, почему надо делать такой несколько замороченный дескриптор и почему не прокатил мой вариант?