Первое поделие.

Завалялись у меня два вот таких геймпада от Денди.

Чтобы зря они не пылились, решил я их подключить к компьютеру, конечно же, через USB (до этого как-то раз подключал через LPT, но там нужны специальные драйвера, которые под Windows 7 работать отказались. Ну и через USB удобнее). Для этого было сконструировано следующее поделие.

Внутри — ATTiny2313 с обвязкой под работу на V-USB, схема практически стандартная.

К слову сказать, устройство с подобным функционалом видел когда-то в журнале «Радио», но поглядев в исходники того проекта, я в ужасе оттуда убежал.)) Да и контроллер там был Mega8.

Это мой первый «цифровой» проект (до этого собирал только гитарные примочки, да мигалки-пищалки на картонках в детстве), поэтому не обошлось без косяков. Косяки, правда, к «цифре» никак не относятся — банально ошибся в разводке платы, поэтому пришлось кинуть пару перемычек и перерезать пару дорожек.

Второй косяк заключался в том, что я не учёл высоту корпуса, и разъемы для геймпадов упёрлись в BLS-ки :(. Поэтому третий разъём пришлось прикрутить с лицевой стороны корпуса.

Ну и в довершении фейлов, прорезая отверстия для разъёмов, я в нескольких местах сломал корпус.:)

Программная часть очень проста, используются стандартные настройки V-USB для создания HID-устройств ввода. HID-дескриптор репорта состоит из четырёх одинаковых частей, описывающих свойства каждого геймпада (две оси, 4 кнопки).
Сам гемпад от Денди внутри представляет собой обычный сдвиговый регистр, ко входам которого подключены кнопки. Подключается по пяти проводам:

VCC — Питание +5В
GND — Земля
LATCH — Вход, «защёлкивающий» данные
CLK — Тактовый вход
DOUT — Выход

Распиновка:


Считывание данных из геймпада реализуется простым алгоритмом:
1. Данные защёлкиваются, подачей на вход LATCH импульса высокого уровня.
2. С импульсами высокого уровня на входе CLK данные о нажатых кнопках выдаются на выход DOUT (0 — кнопка нажата, 1 — не нажата) в следующем порядке:
A, B, SELECT, START, UP, DOWN, LEFT, RIGHT.

Данные, посылаемые в компьютер, имеют следующий формат:
struct  
{
  uint8_t reportID;
  union
  {
    uint8_t data;
    struct
    {
       uint8_t X:2;
       uint8_t Y:2;
       uint8_t BUTTON1:1;
       uint8_t BUTTON2:1;
       uint8_t BUTTON3:1;
       uint8_t BUTTON4:1;
    };
  };
} reportBuffer;


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


Демонстрация работы устройства: (снято на мобильный телефон)


P.S. Светодиод сигнализирует о нажатиях на кнопки геймпадов.)

Схема, разводка платы (исправленная), прошивка, если кому интересны. =)
  • +1
  • 27 августа 2011, 15:46
  • QBasic
  • 1
Файлы в топике: UsbNesPads.zip

Комментарии (39)

RSS свернуть / развернуть
Ой лол. А я только что смонтировал плату для весьма похожего проекта :) И тоже на тини2313. Тока я полностью заменил электронику пада — она была дохлая.
Прошивку полностью сам ваял или воспользовался чем-то вроде PixelKit?
SV5/SV6 — ISP?
Геймпад слева кстати не от денди на вид, а от сеги, по конфигурации кнопочек. Хотя надпись гласит «8 бит»… И он почти такой же, как тот, который я для своего проекта использовал :)
0
  • avatar
  • Vga
  • 27 августа 2011, 15:59
Прошивку сам писал, частично подглядел в похожем проекте на сайте v-usb в примерах.) Там правда для одного геймпада был проект.

SV5/SV6 — ISP?
Да, он самый.

Да, по виду совсем как сеговский.) Но работает как от денди, причём клавиши «A» и «C» совпадают по функционалу.
0
O_o А как можно заменять её электронику?? С этого места можно поподробнее. А то у меня тоже парочка дохлых валяется))
0
В простейшем случае там внутри вот так
image
0
А прошивка? может есть где почитать на эту тему? А то там какойто контроллер залитый компаундом)) я чет даже не представляю как это работает)
0
Это не контроллер, это обычный восьмиразрядный сдвиговый регистр.)
Правда в моделях с Турбо-кнопками встроен ещё генератор этого самого «турбонажатия».
0
А какой регистр можно использовать из легко покупаемых? А что представляет из себя этот генератор?
0
И еще распиновку откуда взять?
0
Не регистра, а геймпада
0
Добавил в пост.
0
Почитать можно в книжке Королёва А.Г. «Игровые приставки».
0
Разбираем пад, вынимаем плату, срисовываем ее геометрию и выкидываем нахрен. Разводим свою плату с блюкджеком и шлюхами и вставляем внутрь. ПРОФИТ!
Хотя в некоторых случаях выгоднее оставить пад как есть и сделать конвертер его протокола (гуглится) в USB HID в виде штекера на конце родного кабеля. Но к сеге это не очень относится, во первых там параллельный интерфейс, а во вторых этот джой был элементарно дохлый.
0
А что за проект был, кстати?
0
Так сложно догадаться? USB HID геймпад из дохлого пада от сеги.
0
А. Я почему-то подумал, что что-то более суровое.)
0
А можно увидеть разводку? И что вы туда поставили вместо компаунда?
0
1) Когда допилю до рабочего устройства. Как джойстик его удалось запустить почти без проблем (HID оказался проще, чем я думал). Теперь разбираюсь с force feedback и в воздухе отчетливо запахло написанием HID мини-драйвера. Некоторые правда запустили и без драйвера, но там походу тини2313 уже мало.
0
Тьфу, опять рано послал. Асечные рефлексы.
2) Какой компаунд?
0
В самом джойстике микросхема залита компаундом, вот я про неё и спрашиваю)
0
Выкинул вместе с платой, что с ней еще делать? На новой плате, как несложно догадаться, подходящая AVR-ка. В моем случае — ATTINY2313-20P.
0
Так так, вот теперь как можно в футбол погонять:) А то все хотел купить джойстик. Как раз докучи джойстиков валяется, корпусок подходящий, тинька в дороге, и как раз в соике) Пошел делать печатку и USBшник докупать
0
  • avatar
  • Opie
  • 27 августа 2011, 17:33
И не только в футбол.
0
Кстати, а как у девайса дела обстоят с дребезгом контактов? В прошивке его подавления не заметил, в джое оно по моему тоже отсутствует.
0
  • avatar
  • Vga
  • 27 августа 2011, 19:09
А никак. Что там было на входе регистра в джое, то и отсылается в комп. Но одиночные нажатия на кнопки и регистрируются как одиночные нажатия, значит дребезг куда-то всё-таки девается. Возможно из-за задержки во времени — пока контроллер прочитает данные от всех остальных джойстиков и отправит их в комп.
0
Дребезг легко компенсируется низкой скоростью опроса. Я делаю раз в 100мс и забыл про проблему дребезга навсегда.
0
Достаточно 10мс исходя из физической природы дребезга.
0
О, я похожую байду делал лет 5 назад. Джойстик от Денди через АТ89С5131 прикидывался стандартной компортовой мышью. Курсор елозил от крестика, на кнопки повесил соответсвенно нажатие кнопок мыши, на турбо кнопку двойной клик. Когда раскурил на этом проце USB-HID, модифицировал в USB мышь.
0
  • avatar
  • Puff
  • 27 августа 2011, 22:07
А я к LPT такие джойстики только цеплял( Тогда и не слышал даже о микроконтроллерах))
0
  • avatar
  • Bonio
  • 27 августа 2011, 23:14
Сразу вспомнил вот эту статью.
habrahabr.ru/blogs/DIY/98865/
-2
Кстати, а кто знает на чем писали игры для Сеги и Денди? И реально ли скопировать картридж с игрой?
0
Для Денди без проблем можно на асме писать под 6502ой проц. Если нет проблем с английским, то вот и вот. Картридж с игрой сдампить вполне реально, что и делают с помощью специального устройства.) Там в картридже несколько ПЗУшек стоит. Микросхема переключения страниц ПЗУ, если нужно. Иногда дополнительный звуковой чип и дополнительное ОЗУ.
0
Реально, но они давным-давно все сдамплены (кроме может нескольких пиратских переделок). Ищи NES ROMSET.
0
эмм, а не могли бы на печатке марикировать детальки? А то чего то совсем запутался…
0
  • avatar
  • Opie
  • 16 ноября 2011, 07:33
Подписал, перезалил архив.)
0
Огромное спасибо :)
А чего за F1? Предохранитель какой?
0
  • avatar
  • Opie
  • 18 ноября 2011, 02:32
Да, самовосстанавливающийся предохранитель, на всякий случай.)
0
А можна печатку и прошивку выложить? Ну или отправте на dimashpak90@mail.ru. Заранее спасибо.
0
Извините, не заметил. На сколько я понимаю надо просто переключить на тактирование от внешнего кварца при заводских настройках и все?
0
Да, именно так.)
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.