USB геймпад из джойстика SEGA MegaDrive (Genesis)

Так часто бывает, что дома валяется всякий хлам который жалко выбросить. В данном случае, джойстики (геймпады) от Сеги. То ли раньше мороженное было вкуснее, то ли  бывает хочется впасть в детство.

Имеем: Один или несколько джойстиков от Сеги (или еще чего, не так уж и важно).
Хотим: Гамать (играть) с их помощью на эмуляторах или в современные игры


Решение 1: Если геймпады рабочие, имеет смысл сделать переходник на USB
Выглядеть может примерно так:

Но, об этом в другой статье (здесь надо разместить ссылку, когда руки дойдут написать о переходнике).

Решение 2: Если геймпады не рабочие, интересно превратить их в USB устройства запихнув внутрь новую начинку. Останется старый сеговский корпус, который привычно держать в руках, и можно будет подключать напрямую к ПК через USB.

Итак, запихнем в наши старые корпусы новую начинку.
В моем детстве были очень распространены такие джойстики с такими платами внутри. В новоделах плата может быть совсем другой неудобной формы. Но, надеюсь, у Вас есть точно такой же джойстик.

Для этих джойстиков были использованы микроконтроллеры ATMEGA8A в корпусе SOIC, которые можно купить по 50-100 рублей за штуку. Программного USB в этих микроконтроллерах нет. Поэтому потребовалось использовать программную эмуляцию USB при помощи библиотеки V-USB ( Wikipedia ,  Site )

Для изготовления платы был взят текстолит толщиной 1.5 мм. Плата нужна не прямоугольная, а со скосами и полукруглыми углублениями. Все скосы и углубления легко делаются при помощи бормашины с дисковой насадкой. Достаточно прижать старую плату к новой заготовке и подточить все выступающие части по ее контуру.

Схема

Я использую не очень популярную программу KiCAD. Зато она Open Source.

Немного поясню. Во главе всего ATMEGA8-AU. В верхней части схемы выводы для подключения программатора. Каждый вывод сделан отдельным элементом намеренно, чтобы было легче разбросать их по плате.
В левой части немного стандартной обвязки и кварц. Можно было запросто обойтись и без кварца. Просто так захотелось.
С кнопками управления, думаю, все понятно.
Иногда возникают вопросы вот с этой частью:

Это один из вариантов подключения AVR к USB. Об этом кстати много написано в разных источниках. По этой схеме у меня работает много устройств уже долгое время.
D1 и D2 — стабилитроны. Хорошо работают и 3V3 и 3V6 — проверял. А для диодов существует немного другая схема.

В файле PDF распечатка Схема USB джойстика для сеговского корпуса

Подбор элементов

  1. Как уже говорилось, микроконтроллер ATMEGA8A-AU в корпусе SOIC32
  2. SMD кварц на 12МГц
  3. Конденсаторы 22пФ х2, 0.1мкФ х1, 47мкФ х1 в SMD, как рекомендовано в даташите. Но, не обязательно точно такой же емкости.
  4. Резисторы на 1.5кОм и 68Ом Каждого по два.
  5. Два стабилитрона 3V6 или 3V3 тоже в SMD. Наверное можно и немного отличные использовать. Не проверял.
  6. Одна тактовая кнопка для кнопки MODE, что располагается под правым указательным пальцем. Такую искать было лень, поэтому просто выпаял со старого геймпада.
  7. Еще понадобится что-то вроде USB шнура от поломанной мышки и не нужный USB кабель

Разводка

Разводка на скорую руку. Тоже в KiCAD.
Самым сложным оказалось сделать контактные площадки под верхние кнопки.

Все-таки придется просверлить некоторое количество отверстий:
Четыре под кнопку MODE.
Шесть для переходов с обратной стороны.
И еще 4 (они не обозначены) для впайки проводов которые пойдут на USB разъем (VCC, GND, D+, D-)

В файле PDF распечатка gamepad-pcb

 

Изготовление платы

Далее все изготавливается при помощи лазерного утюга или может еще чего. Напаиваются все элементы и получается что-то вроде этого.

Правую плату делал сын. Припоя не жалел.

В общем к такой плате было припаяно еще 4 проводка от ненужного USB кабеля и 6 проводков для подключения к самопальному программатору USBAsp, которые в последствии были отпаяны.
Кстати, USBAsp тоже работает на ATMEGA8 и подключается по USB при помощи программной эмуляции.

Вот мой старенький самопальный программатор. Работает как часы.

Когда микроконтроллер подключен к программатору и отвечает не поло было бы его запрограммировать.

 

Программа

С программой не заморачивался. Взял переделанную программу для USB-SEGAГеймпад переходника и еще раз переделал под то, что задумано.
Изначально программа была взята из какой-то статьи в журнале РАДИО.
В файле все исходники и fuses.
usb-joypad-src

Здесь собранная прошивка для ATMEGA8 в формате HEX
Собрана на avr-gcc

usb-gamepad-hex

Fuses
H: 0xc9
L: 0xef

Для avdude:
-U lfuse:w:0xef:m -U hfuse:w:0xc9:m
Например просто установить фьюзы:
avrdude -U lfuse:w:0xef:m -U hfuse:w:0xc9:m

После прошивки и установки fuses все должно заработать.  Включаем USB в комп и джойстик должен определиться.
Если не определяется, чаще всего проблема в контактах. Как говориться, double check connection.
А я путал полярность на стабилитронах. Ничего страшного не произошло. Просто устройство не определялось. Перевернул стабилитроны и все заработало.

Для тестирования в Linux удобно использовать программу antimicro

Название джойстика определяется как «www.radio.ru SEGA MegaDrive USB Joystic» т.к. изначально исходник был взят откуда-то оттуда.
Если есть желание, название можно поменять в файле usbconfig.h
Смотрите строки:
#define USB_CFG_VENDOR_NAME
#define USB_CFG_DEVICE_NAME

После того как все заработало, все это было успешно запихано в старенький корпус и еще раз проверено.
Как оказалось, играть удобно. Результат превзошел ожидания.

Получилось два таких.

У этого винтик на крестовине. Т.к. он бывалый имел когда-то механическую травму, которая лечилась тонким сверлом и винтиком.
После перерождения джойстики почти год работают исправно. Даже пережили новые, купленные в магазине.

 

А еще бы…

  1. Вроде это и не нужно, но запилить бы туда еще bootloader, чтобы иметь возможность перепрошить устройство прямо по USB
  2. Еще есть мысль встроить в джойстик эмуляцию мыши и клавиатуры, чтобы было удобно управлять ПК с джойстика. Но тут надо еще разбираться с V-USB. Может и дойдут руки.