Так часто бывает, что дома валяется всякий хлам который жалко выбросить. В данном случае, джойстики (геймпады) от Сеги. То ли раньше мороженное было вкуснее, то ли бывает хочется впасть в детство.
Имеем: Один или несколько джойстиков от Сеги (или еще чего, не так уж и важно).
Хотим: Гамать (играть) с их помощью на эмуляторах или в современные игры
Решение 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 джойстика для сеговского корпуса
Подбор элементов
- Как уже говорилось, микроконтроллер ATMEGA8A-AU в корпусе SOIC32
- SMD кварц на 12МГц
- Конденсаторы 22пФ х2, 0.1мкФ х1, 47мкФ х1 в SMD, как рекомендовано в даташите. Но, не обязательно точно такой же емкости.
- Резисторы на 1.5кОм и 68Ом Каждого по два.
- Два стабилитрона 3V6 или 3V3 тоже в SMD. Наверное можно и немного отличные использовать. Не проверял.
- Одна тактовая кнопка для кнопки MODE, что располагается под правым указательным пальцем. Такую искать было лень, поэтому просто выпаял со старого геймпада.
- Еще понадобится что-то вроде 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
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
После того как все заработало, все это было успешно запихано в старенький корпус и еще раз проверено.
Как оказалось, играть удобно. Результат превзошел ожидания.
Получилось два таких.
У этого винтик на крестовине. Т.к. он бывалый имел когда-то механическую травму, которая лечилась тонким сверлом и винтиком.
После перерождения джойстики почти год работают исправно. Даже пережили новые, купленные в магазине.
А еще бы…
- Вроде это и не нужно, но запилить бы туда еще bootloader, чтобы иметь возможность перепрошить устройство прямо по USB
- Еще есть мысль встроить в джойстик эмуляцию мыши и клавиатуры, чтобы было удобно управлять ПК с джойстика. Но тут надо еще разбираться с V-USB. Может и дойдут руки.