Главная MJoy Часто задаваемые вопросы

Общие

Что такое MJoy?

В 90-х годах наиболее хардкорные из виртуальных пилотов и гонщиков делали джойстики самостоятельно. И если компания Logitech практически свела на нет самодельные рули, то с джойстиками возникла парадоксальная ситуация. Начиная с 2000 года качество игровых портов стало неуклонно падать, а серийные джойстики мало годились для новых симуляторов наподобие «Ил-2: Штурмовик». Самодельную же конструкцию на USB сделать не представлялось возможным. И лишь в 2004 году случилось то, чего так долго ожидали все виртуальные пилоты. Воспользовавшись реализацией USB-стека для микроконтроллеров AVR, разработанной Igor'ем Cesko, литовец Mindaugas Milasauskas (MeanDog) разработал первый в мире открытый USB-джойстик.

Каковы примерные технические характетистики MJoy?

Есть ли у MJoy преимущества перед игровым портом?

Есть, и несомненные. Только учтите: после игрового порта вам долго придётся переучиваться под USB — USB-джойстик намного чувствительнее.

Есть ли у MJoy преимущества перед фабричными USB-джойстиками?

Перед дорогими — сомнительно. Перед дешёвыми — да, есть (по свидетельству тех вирпилов, которые ставили в Logitech'и ценой до 50$ вместо штатного контроллера MJoy).

Какую схему выбрать — Meandog или LazyCamel?

Я настаиваю на схеме LazyCamel — если, конечно, не нужна самокалибровка. Сделать самокалибрующуюся прошивку для схемы LazyCamel'а мне мешает только лень. Если кто-то из вас сделает, я буду рад захостить её у себя или выставить ссылку на ваш сайт.

Стоит ли строить MJoy16?

Если хватает шести осей и 24 кнопок MJoy, не стоит. Если же нужны 8 самокалибрующихся осей и 64 кнопки — вперёд!

Существуют ли другие открытые USB-джойстики?

Да. Например, для создания джойстика представляют интерес микроконтроллеры PIC — но цены в Киеве на них таковы, что один кристалл стоит больше, чем все детали MJoy'я.

См., например, ArtJoy.

Дают ли другие схемы USB-джойстиков преимущество?

Вот такие преимущества. Думайте сами, насколько они стоят свеч.

  1. Более качественный АЦП (если он там действительно более качественный; по этому поводу ничего сказать не могу).
  2. 12-мегабодный USB даёт бóльшую частоту опроса при большом количестве органов управления. В любом случае, больше 120 Гц получить физически не удастся.
  3. Схема (на печатной плате) получается несколько компактнее. PIC'у для «обвязки» требуется всего семь элементов, вместо четырнадцати у ATMeg'и.

Зато разводить PIC на макетке — сущее наказание. Как ни разводи — получатся одни перемычки.

Что такое самокалибровка? Нужна ли она?

Самокалибровка действует так. Джойстик запоминает, в каком диапазоне ходила ручка. Если, например, на нажатой педали выдаётся −120, а на отпущенной 45, джойстик запоминает эти значения, и растягивает этот диапазон до [−127; 127] (для осей высокой точности [−511; 511]). Конечно же, в самом начале джойстик будет выдавать всякую чепуху, но когда вы прокрутите все оси от края до края, всё придёт в норму.

Некоторые оси объявлены центрирующимися; для них также запоминается центральное положение (обычно в момент включения джойстика).

Чтобы сбросить самокалибровку, нужно в момент включения удерживать любую кнопку. После этого, конечно же, снова придётся подвигать всеми осями от края до края.

А теперь ответ на вопрос «нужна ли самокалибровка». Настоятельно не рекомендую. Во-первых, слегка снижается точность. Во-вторых, на вопрос «есть ли мёртвая зона» и «какие оси центрирующиеся» авторы прошивки ответили за вас. Определение центра в момент включения — тоже ловушка: вместо «сел и поехал» надо убедиться, что джойстик в центральном положении и только тогда подключать.

Есть отличные программы ручной калибровки наподобие DXTweak II, которые могут задать любую мёртвую зону и любое центральное положение. К тому же, если джойстик люфтит или педаль ненадёжно возвращается на край, даже самокалибрующийся джойстик придётся «укалибровать» DxTweak'ом.

Схемотехника и подключение

Я подключил MJoy в USB, оси дёргаются из стороны в сторону.

Это нормально. После того, как вы подсоедините потенциометры, всё будет в порядке.

Тогда что делать с незадействованными осями?

Соединить с землёй.

Как подключить восьмипозиционный переключатель видов?

Вот схема. Полярность диодов подходит как к схеме MeanDog'а, так и схеме LazyCamel'а.

Можно ли подключать джойстик на один USB-хост с клавиатурой? Мышью? Другим джойстиком? Флэшкой?

С клавиатурой, мышью и другим джойстиком — не только можно, но и нужно. Таймслотов хватит на всех, частота опроса не пострадает.

С флэш-диском и прочими устройствами, передающими информацию в массовом режиме — страдает только флэшка, но никак не джойстик.

Прошивки

Как работает удвоенная частота опроса?

В HID-режиме низкоскоростной USB за отданный ему таймслот успевает передать пакет длиной 8 байт. Исходный MJoy первый такт выдаёт пакет с осями, потом пакет с кнопками, и т. д. Если всё уместить в один пакет, автоматически удваиваем частоту. Почему MeanDog не выпустил такую прошивку — одному Богу известно.

В 12-мегабодном USB таких проблем больше нет — пакет имеет длину 64 байта. А вот частота опроса та же!

Почему нет защиты от дребезга кнопок?

Этот вопрос мне задавал один специалист по микроконтроллерам. Опыт показывает, что даже с частотой 100 Гц она не нужна. К тому же дребезжащие кнопки, как правило, ненадёжны и мало годятся в джойстик.

Почему в автомобильных прошивках газ авиационный, тормоз автомобильный, а сцепление — вообще «диск»?

Авиационный газ по двум причинам. Автомобильный в русских версиях Windows выглядит как «ускоритель» и является осью Y (из-за некорректно ведущих себя мелких игр вообще не стоит делать ось Y нецентрирующейся, лучше иметь «пустышку», что у меня и есть). Сцепление переименовано для того, чтобы его было видно в стандартной утилите калибровки Windows.

Как подключить несколько MJoy'ев к одному компьютеру?

Поскольку я ничего про Linux, MacOS и т. д. не знаю, будем говорить только про Windows.

Собственно говоря, есть две проблемы. 1) Негарантированный порядок подключения устройств. 2) Калибровка привязывается к VID (Vendor ID) и PID (Product ID) устройства. Всё это решается заменой VID и PID в прошивке одного из устройств. Есть два способа это сделать.

  1. Прошить разные устройства разными прошивками (в них разный PID).
  2. Перекомпилировать прошивку, заменив в исходниках VID и PID.

«Перекомпилировать, заменив в исходниках VID и PID» — как это сделать?

На сайте Atmel качаем программу AVR Studio. Загружаем исходник прошивки, выбираем Project/Assembler Options. В поле AVR Assember устанавливаем Version 1. В конце текста находим такие строчки:

.equ    VendorUSBID    =0x0777    ;vendor identifier (Atmel=0x03EB)
.equ    DeviceUSBID    =0x0001    ;product identifier (USB Joystick)
...
DevNameStringDescriptor:
        .db (DevNameStringDescriptorEnd-DevNameStringDescriptor)*4-2,3;length, type: string descriptor
        .db "MJoy"
DevNameStringDescriptorEnd:

Их и нужно подменять. Название джойстика может состоять исключительно из 4 символов (странное ограничение IgorPlug'а). Прошивка компилируется нажатием F7. Если всё сделано правильно, должно откомпилироваться, выдав семь предупреждений.

Не получается прошить программатором XXX.

Если подключение правильное, а программатор действующий, остаётся ещё одна причина — конфигурационные флаги микросхемы.

Дело в том, что в Atmel принята странная нотация: сброшенный в 0 флаг считается активным. Например, SPIEN = Serial Programming Interface ENabled: если он запрограммирован (в значении 0), то возможна работа последовательным внутрисхемным программатором. По этой причине есть два формата флагов: прямой (вкл=1) и инверсный (вкл=0, как в PonyProg). Первый формат соответствует цифрам, которых записаны в конфигурационных битах, второй — реальному смыслу этих битов.

Так что попробуйте инвертировать все флаги и прошейте микросхему (если её ещё не убили неправильно установленными флагами; хороший последовательный программатор должен зафиксировать опасные флаги — SPIEN=0 и RSTDISBL=1).

Подробнее про конфигурационные флаги AVR'ов на Easy Electronics.

Откуда взялся USB VID 0x777?

В наследство от MeanDog'а. Сам он позаимствовал его у некой Comda Enterprise Corp., которая производит компьютерные аксессуары.

...Раздел постоянно пополняется

Made with Notepad++

© 2007—2014 Mikhail Merkuryev. All rights reserved.