![image](https://habrastorage.org/getpro/habr/post_images/c2c/48a/4f6/c2c48a4f649227ef09b0fb6a12ce5c21.jpg)
Часто радиолюбители сталкиваются с проблемой оформления выносного пульта управления устройством. Если число кнопок на нем велико, то для сокращения числа проводов в соединительном кабеле пульт оснащают шифратором команд нажатых кнопок, а устройство дешифратором. В этой ситуации может выручить старый джойстик, от некогда популярных игровых приставок «Dendy». Задача радиолюбителя сильно упрощается, так как джойстик имеет неплохой дизайн и оснащен готовым шифратором команд нажатия кнопок.
Что внутри джойстика?
Примерная схема шифратора, применяемого в джойстиках «Dendy» приведена на рис. 6, в конце статьи. Сведения об интерфейсе между джойстиком и игровой приставкой, вариант схемы джойстика, а также варианты схем дешифраторов можно найти на страницах журнала «Радио». [л] Информация о нажатых кнопках джойстика передается в последовательном формате с использованием тактирующего сигнала «Clock» от управляемого устройства. Для синхронизации с ним джойстик имеет вход «Latch», на который подается короткий импульс с высоким логическим уровнем в начале каждого цикла получения данных от джойстика.
Устройство дешифратора и его работа
Предлагаемое устройство, электрическая принципиальная схема которого изображена рис. 1, является дешифратором, преобразующим сигналы джойстика в дискретные логические уровни, соответствующие нажатым кнопкам.
![image](https://habrastorage.org/getpro/habr/post_images/ce0/84d/0f6/ce084d0f6c0495a84cbca32c78498b40.jpg)
Его основа — микросхема 74HC595N (DD3), представляющая собой 8-разрядный регистр сдвига с последовательным вводом и последовательным и параллельным выводом информации. Параллельный вывод информации осуществляется через буферный регистр с выходами, которые имеют три состояния. Информационный сигнал подают на вход SER (вывод 14), сигнал записи — на вход SCK (вывод 11), а сигнал вывода («защелкивания») — на вход RSK (вывод 12). Этот регистр принимает байт, несущий в себе информацию о нажатых кнопках, последовательно, и выдает на выходы Q0 — Q7 в параллельном виде. Таким образом, состояние каждого отдельного выхода, выходного регистра микросхемы, будет соответствовать сопоставленной ему кнопке на джойстике. Соответствие выводов регистра и кнопок джойстика показано в представленной ниже таблице.
![image](https://habrastorage.org/getpro/habr/post_images/d27/c4d/d51/d27c4dd51941ed140118a2a907700907.jpg)
На микросхеме DD2 собран формирователь синхроимпульса «Latch», необходимый для фиксирования состояния кнопок на джойстике и вывода старшего бита данных из джойстика на выход «Data». Происходит это, по положительному фронту импульса. По отрицательному фронту этого импульса, начинается цикл считывания байта данных. Этот момент обозначен как «цикл опроса джойстика» (смотрим рис. 2). Следующие по порядку биты, будут выдаваться на выход «Data» с появлением положительного фронта тактового импульса, на входе «Clock» джойстика. Также, синхроимпульс «Latch» подается на вход RSK регистра сдвига, это необходимо для «защелкивания» принятого байта в выходном регистре и выводе его на выходы Q0 — Q7 в параллельном виде. «Защелкивание» принятого байта происходит по положительному фронту импульса. Этот момент времени обозначен как «цикл обновления информации на выходе регистра 74НС595» (смотрим рис. 2). С приходом каждого синхроимпульса, информация на выходе регистра будет обновлена.
![image](https://habrastorage.org/getpro/habr/post_images/c56/60c/c42/c5660cc42c7fc2884f904985373b39cb.jpg)
На микросхеме DD1 собран генератор тактовых импульсов. Частота которого равна 100 килогерц. Тактовые импульсы подаются на вход «Clock» джойстика и на вход SCK приемного регистра 74НС595. Данные о состоянии кнопок джойстика выдаются на выход «Data» по порядку, начиная со старшего бита — D7, D6… D0. Происходит это по положительному фронту тактового импульса на входе «Clock» джойстика. Считываемые с выхода «Data» биты, подаются на вход SER регистр 74НС595. Запись принятого бита в регистр происходит также по положительному фронту импульсов этого генератора.
— чувак! У тебя момент обновления бита информации на выходе «Data» совмещен с моментом чтения установленного бита на выходе «Data»!
— да… это точно. Но джойстик довольно «тормозной», и обновление бита, после прихода положительного фронта тактового импульса, происходит спустя 120 nC. Пока джойстик раздумывает, шустрый 74НС595 успевает записать предыдущее значение c выхода «Data», за 20 nC.
— эээ, «Кулибин»! За время действия импульса «Latch» у тебя в выходной регистр 74НС595 пишется мусор — подряд два бита D7!
— да, признаюсь — халтура. Но после окончания цикла записи всего байта, лишние биты «вывалятся» из регистра в никуда, и никак не повлияют на точность принятой информации.
Интерфейс SPI
И еще один момент… Многие, посмотрев на картинку (Рис. 2) увидели схожесть с таймингом коммуникационного интерфейса SPI. Да да да… за некоторыми отличиями, это он и есть! Надо подменить названия сигналов: «Latch» на CS или SS, сигнал «Clock» на CSLK или CLK, сигнал «Data» на MISO, SDO или SO (кому как больше нравится). Джойстик можно опрашивать встроенным в МК периферийным модулем SPI. Для этого надо отсылать на устройство байт, неважно какой, например FF.
Правда если кому-то этот байт может пригодиться, его можно загружать нужной информацией. Например, для регистра со светодиодами. Или же не загружать, а пересылать принятую информацию от джойстика еще кому-то. То есть, пин MOSI можно использовать.
Принятый байт будет содержать информацию о нажатых кнопках. Нажатой кнопке будет соответствовать бит равный нулю, а не нажатой единице. Если на джойстике не нажата ни одна кнопка, то будет принят байт FF, если умудрится зажать все кнопки сразу, то принятый байт будет содержать 00. SPI интерфейс необходимо настроить для работы в режиме ведущего (Master), ну это-то и так понятно… а режим синхронизации настроить CPOL=1, CPHA=0 (Mode 2). При таком раскладе, данные с выхода «Data» (MISO для МК) будут считываться микроконтроллером по отрицательному перепаду тактового сигнала CSLK, поданного на вход «Clock» джойстика. А обновление бита информации на выходе «Data» джойстика и на входе MISO микроконтроллера, будет происходить по положительному фронту тактового импульса. Таким же способом джойстик можно подключить к плате «Arduino».
![image](https://habrastorage.org/getpro/habr/post_images/37c/5e4/946/37c5e4946163458a4dd1689244d418e7.png)
«Turbo A» и «Turbo B»
Ранние модели джойстиков содержали 8 кнопок, более поздние десять. Добавилось две кнопки «Turbo A» и «Turbo B». Но на протоколе обмена данными, это никак не отразилось — он остался прежним. Добавленные турбо кнопки эквивалентны кнопкам «А» и «В» с той лишь разницей, что при нажатии на кнопку «Turbo A» будет нажиматься кнопка «А», только со скоростью 12 с половиной раз в секунду. Это справедливо и для кнопок «Turbo B» и «В». Генератор турбо нажатий добавили в сам джойстик (см. рис.6, выделен красным). При нажатии на турбо кнопки на выходах Q6 и Q7 регистра DD3 будут присутствовать импульсы с периодом 80 мС и скважностью равной двум.
![image](https://habrastorage.org/getpro/habr/post_images/d55/d4d/68b/d55d4d68b6a897bd1b6dbb3d11677e5c.jpg)
Встречаются джойстики с еще большим количеством кнопок, а также и с меньшим. Нажатие дополнительных кнопок на таких джойстиках эквивалентно нажатию сразу двух кнопок на старых моделях. При подключении к дешифратору контрольных светодиодов, разобраться с работой кнопок «супер джойстиков» будет не сложно.
UPD: По поводу SNES.
В комментариях к статье было справедливо замечено:
В тексте речь идёт про генератор турбо нажатий, а к нему идёт картинка с джойстиками, где такого генератора нет. Ниже написано «Нажатие дополнительных кнопок на таких джойстиках эквивалентно нажатию сразу двух кнопок на старых моделях», но это тоже несправедливо по отношению к SNES.
Генератора турбо нажатий в джойстиках SNES нет. То есть, никаких импульсов на выходе дешифратора, при подключении такого джойстика вы не увидите. Мало того, протокол SNES не радикально, но отличается от протокола NES. Отличие состоит в том, что он 16-и битный. Информативные биты только – D15 – D4, биты D3 – D0 всегда равны единице. При подключении такого джойстика к предложенному дешифратору вы получите информацию о кнопках: «B», «Y», «Select», «Start», «Up», «Down», «Left» и «Right». Информация о кнопках: «A», «X», «L» и «R», будет утеряна. Разъем SNES показан на рис. 3 крайний справа.
![image](https://habrastorage.org/getpro/habr/post_images/f23/630/d3c/f23630d3c581d9e3a469c77c4cf1d211.jpg)
UPD: Благо, которое дарит нам «Turbo»
Наверно кто-то, прочитав про импульсы на выходе дешифратора при нажатии кнопок «Turbo A» и «Turbo B» расстроился:
– Эээ… так кнопки «Turbo» использовать нельзя, как обидно, две кнопки потеряны.
– Нет! Совсем они и не потеряны.
Давайте представим что вам, при управлении каким-либо устройством, необходимо осуществлять приращение какого-либо параметра в сторону увеличения или уменьшения оного. Если при этом требуется высокая дискретность установки величины, то можно устать тискать кнопки «плюс» и «минус», пусть это будут кнопки «А» и «В». Тут-то как раз и пригодятся турбо кнопки. При использовании джойстика совместно с микроконтроллером вы будете избавлены от написания лишнего куска программного кода, потому как вам уже не надо будет втискивать расширенный интерфейсный функционал в две кнопки. Он уже расширен до четырех, и снабжен логикой работы.
Интерфейс SNES, NES
Совместно с предлагаемым дешифратором можно применить любой джойстик, который обладает интерфейсом SNES, NES или «Virtual Boy». А также их многочисленными клонами — «Dendy»,
![image](https://habrastorage.org/getpro/habr/post_images/9d8/1eb/b86/9d81ebb86326901e05fe5cd13b7eef72.jpg)
Подключение приборов к дешифратору
Сигналы на выходе дешифратора соответствуют уровням TTL. Нажатой на пульте кнопке соответствует — высокий уровень, низкий — не нажатой. Если подключаемое к дешифратору устройство согласуется по уровням TTL, то дополнительных мер по согласованию не требуется.
Если на выходе дешифратора необходимы инверсные состояния сигналов (кнопка нажата — ноль, кнопка не нажата — единица) то, элемент DD1.4 (Рис. 1) необходимо исключить из схемы.
В тех случаях, когда приборами, подключенными к дешифратору, нельзя управлять логическими уровнями или требуется гальваническая развязка по питанию, следует применить реле или оптопару рис. 4 а, б.
![image](https://habrastorage.org/getpro/habr/post_images/478/b81/ec1/478b81ec1f6a035b68c7f47d11cae1c8.jpg)
Если для управления, чем-либо требуются сигналы управления статического типа (кнопку нажал, чета там включились, нажал еще раз, выключилось), устройство необходимо дополнить триггером. Применив одну микросхему К155ТМ2 (смотрим рис. 4 в), кнопки «Start» и «Select» можно превратить в переключатели. Возможно, тут проявится эффект дребезга контактов (если подавление не реализовано в самом джойстике). В этом случае необходимо уменьшить частоту тактового генератора, например до 100 герц. При этом джойстик будет опрашиваться 10 раз в секунду, и проблема дребезга будет решена.
Конструкция устройства
Большинство деталей монтируются на печатной плате из одностороннего фольгированного стеклотекстолита толщиной 1…1,5 мм, чертеж печатной платы приведен на рис. 5. Светодиоды можно устанавливать только на этапе настройки, для наглядности.
![image](https://habrastorage.org/getpro/habr/post_images/d65/968/b47/d65968b47da32ee99506e82edd1ba5e3.jpg)
В устройстве применены резистор С2-23, МЛТ, пленочный конденсатор C4 – К10-17, керамический конденсатор C3 – КМ-6, оксидные конденсаторы С1, С2 – К50-35 или импортные аналоги перечисленных типов деталей. Разъем XR1 позаимствован в неисправном DVD плеере. При отсутствии оригинального разъема, устройство необходимо оснастить любым другим, подходящим по конструкции и габаритным размерам. Питают устройство от источника питания 12 В и током 50 мА.
UPD: Если вдруг кому пригодится, то по «натовской» классификации: DD2 – SN7493, DD1 – SN7400, это будет 155 серия. Или SN74LSxx это будет 555 серия, а вообще ставьте все что найдете, главное чтобы были цифры 93, 00 и 74.
![image](https://habrastorage.org/getpro/habr/post_images/df1/1fe/3e1/df11fe3e17f65c01704f5173869ca1ea.jpg)
Литература:
Джойстик Dendy – выносной пульт управления
С. КУЛЕШОВ, г. Курган
Журнал «Радио» №4 2002 г.
Декодеры команд джойстиков от игровых видеоприставок
С. РЮМИК, г. Чернигов, Украина
Журнал «Радио» №6 2004 г.
Ремонт джойстика «Денди»
С. Голубев г. Омск
Журнал «Радио» №6 1996 г.
PS.
Если кому понадобится — вот плата. (в картинке спрятан архив)
![image](https://habrastorage.org/getpro/habr/post_images/077/b4a/938/077b4a938a3609affa93c8e4a13349fa.jpg)
Для любителей кино, у меня нашелся какой-то видео отчет — мол, схема на мази…