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


Чтобы зря они не пылились, решил я их подключить к компьютеру, конечно же, через 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
Ой лол. А я только что смонтировал плату для весьма похожего проекта :) И тоже на тини2313. Тока я полностью заменил электронику пада — она была дохлая.
Прошивку полностью сам ваял или воспользовался чем-то вроде PixelKit?
SV5/SV6 — ISP?
Геймпад слева кстати не от денди на вид, а от сеги, по конфигурации кнопочек. Хотя надпись гласит «8 бит»… И он почти такой же, как тот, который я для своего проекта использовал :)
Прошивку полностью сам ваял или воспользовался чем-то вроде PixelKit?
SV5/SV6 — ISP?
Геймпад слева кстати не от денди на вид, а от сеги, по конфигурации кнопочек. Хотя надпись гласит «8 бит»… И он почти такой же, как тот, который я для своего проекта использовал :)
O_o А как можно заменять её электронику?? С этого места можно поподробнее. А то у меня тоже парочка дохлых валяется))
А прошивка? может есть где почитать на эту тему? А то там какойто контроллер залитый компаундом)) я чет даже не представляю как это работает)
Разбираем пад, вынимаем плату, срисовываем ее геометрию и выкидываем нахрен. Разводим свою плату с блюкджеком и шлюхами и вставляем внутрь. ПРОФИТ!
Хотя в некоторых случаях выгоднее оставить пад как есть и сделать конвертер его протокола (гуглится) в USB HID в виде штекера на конце родного кабеля. Но к сеге это не очень относится, во первых там параллельный интерфейс, а во вторых этот джой был элементарно дохлый.
Хотя в некоторых случаях выгоднее оставить пад как есть и сделать конвертер его протокола (гуглится) в USB HID в виде штекера на конце родного кабеля. Но к сеге это не очень относится, во первых там параллельный интерфейс, а во вторых этот джой был элементарно дохлый.
Кстати, а как у девайса дела обстоят с дребезгом контактов? В прошивке его подавления не заметил, в джое оно по моему тоже отсутствует.
А никак. Что там было на входе регистра в джое, то и отсылается в комп. Но одиночные нажатия на кнопки и регистрируются как одиночные нажатия, значит дребезг куда-то всё-таки девается. Возможно из-за задержки во времени — пока контроллер прочитает данные от всех остальных джойстиков и отправит их в комп.
Для Денди без проблем можно на асме писать под 6502ой проц. Если нет проблем с английским, то вот и вот. Картридж с игрой сдампить вполне реально, что и делают с помощью специального устройства.) Там в картридже несколько ПЗУшек стоит. Микросхема переключения страниц ПЗУ, если нужно. Иногда дополнительный звуковой чип и дополнительное ОЗУ.
Комментарии (39)
RSS свернуть / развернуть