Ps2 джойстик своими руками

Ps2 джойстик своими руками

Как прикошачить джойстик от PlayStation к USB. Часть первая.

Автор: Spider
Опубликовано 10.04.2007

Часть первая — PSX.

В этой статье я постараюсь изложить свой опыт по адаптации джойстика от Sony PlayStation к USB. Начнём с того, что джойстики в USB это HID устройства, которые работают в виндах в минимальной конфигурации без сторонних драйверов. Как говорится Plug and Play в прямом смысле.

Начинал я с того, что наткнулся на IgorUSB реализацию USB устройства на AVR от Игоря Чешко. Но Чешко пишет на ASM и, для меня, разбираться в этом деле было тяжко. Ко всему этому я не смог найти документацию на HID. Всё что нашёл, это генератор HID кадров от Microsoft. Потом мне встретился MJoy. Тут ребята уже реализовали джойстик, но он был какой-то МАКСИМАЛЬНЫЙ. В нём куча кнопок и осей, и опять же ничего не понятно по отношению к HID. И тут нашему вниманию открывается статья из Журнала Радио 1/2007. Ребята реализовали то что я так давно порывался сделать. Ну значит скачал я это дело и начал разбираться. О ужас, что они понаворотили! Какой неграмотный, на мой взгляд, код! Я сел и начал его чистить. Исходный код от журнала был рассчитан на 2 джойстика PSX2 в одном устройстве. Но у меня на руках один джойстик да ещё и от PSX. Если кто не в курсе, то разница в джойстиках у PSX и PSX2 в наличии у последнего аналоговых осей. И задача у меня стояла, сделать именно USB джойстик, а не переходник.

После непродолжительных поисков, я таки нашёл описание протокола работы джойстика и расположение контактов.

Как вы могли заметить из таблицы, то джойстик работает на SPI шине. Только есть ещё одна нога ACK. Она используется как подтверждение корректности переданных джойстиком данных. Все команды и параметры состоят из 1 байта по 8 бит. После каждого удачно переданного или принятого байта, джойстик дергает ногой ACK на 1 клок, если этого не произошло — считается, что передача закончилась неудачей.

Система команд у джойстика проста как никогда.
Первым байтом джойстику всегда надо передать 0x80, а вторым 0x42. Одновременно с передачей второго байта, необходимо принимать от джойстика данные, которые будут являться идентификатором типа джойстика. Я смог найти 5 разных идентификаторов. Такие как:
0x41 Standard Digital Pad (PSX)
0x23 NegCon (https://en.wikipedia.org/wiki/NeGcon)
0x73 Analogue Controller in Red Mode (PSX2) (https://en.wikipedia.org/wiki/Dual_Shock_2)
0x53 Analogue Controller in Green Mode (PSX2)
0x12 PSX Mouse

После этого контроллер шлёт джойстику 0xFF параллельно принимая ответ. Длина ответа у каждого джойстика разная. Но первый байт ответа всегда равен 0x5A. Во всех приведённых ниже данных, нажатие на клавишу соответствует 0. Т.е. если все клавиши нажаты данные будут равны 0х00, в противном случае 0хFF.

Для джойстика 0x41 Standard Digital Pad (PSX) это выглядит так:

  • Bit 7 — SLCT: Select Button
    Резиновая клавиша SELECT. Это она только на джойстике select, мы же сможем использовать её как захотим.
  • Bit 6..5 — Res: Reserved Bits
  • Bit 4 — START: Start Button
    Резиновая клавиша Старт. Всё то же самое, что и с SELECT.
  • Bit 3 — UP: Up Button
  • Bit 2 — RIGHT: Right Button
  • Bit 1 — DOWN: Down Button
  • Bit 0 — LEFT: Left Button
    4 клавиши обозначающие крест на джойстике.

  • Bit 7 — L1: Левый верхний шифт
  • Bit 6 — R1: Правый верхний шифт
  • Bit 5 — L2: Левый нижний шифт
  • Bit 4 — R2: Правый нижний шифт
  • Bit 3 — Зелёная клавиша
  • Bit 2 — Красная клавиша
  • Bit 1 — Синяя клавиша
  • Bit 0 — Розовая клавиша

    После приёма DATA2 контроллер может повторить всё сначала и делать так постоянна, дабы быть в курсе состояния клавиш джойстика.

    Для джойстика 0x23 NegCon это выглядит так:

    Я не буду подробно расписывать кнопки, думаю из предыдущего описания и так всё понятно.

    Bits 7..0 — STE7..0: Угол поворота

    Это положительное число в диапазоне от 0 до 255 характеризует угол поворота главной оси джойстика.

  • Bits 7..0 — BUT17..0: Степень нажатия I
  • Bits 7..0 — BUT27..0: Степень нажатия II
  • Bits 7..0 — L17..0: Степень нажатия L1

    Для джойстика 0x73 Analogue Controller in Red Mode это выглядит так:

    Как вы могли заметить, у этого джойстика формат данных не сильно отличается от обычного цифрового джойстика. Разве что добавилось ещё 2 кнопки.

  • Bit 6 — JOYL: Нажатие на левый джойстик
  • Bit 5 — JOYR: Нажатие на правый джойстик

    Тут ничего не изменилось.

  • Bits 7..0 — RJX7..0: Ось Х правого джойстика
  • Bits 7..0 — RJY7..0: Ось Y правого джойстика

  • Bits 7..0 — LJX7..0: Ось Х левого джойстика
  • Bits 7..0 — LJY7..0: Ось Y левого джойстика

    Как вы уже могли догадаться все оси имеют диапазон значений от 0 до 255, с центром в 127.
    Что же касается джойстика 0x53 Analogue Controller in Green Mode то у него отличие только в порядке бит данных DATA1 и DATA2 в следующей форме:

    Видно, что клавиши перемешались. Зачем это надо я не знаю — у меня не было соньки никогда. Что касается аналоговых осей, то там всё так же.

    Мышь я даже рассматривать не буду, ибо это настолько ущербный пережиток.

    Вот и кончилась теория. Перейдём к практике.
    Т.к. когда я разводил и травил плату, я ещё не знал о SPI режиме джойстика и делал всё рассчитывая, что всё получится. В итоге я получил такую схему:

    Прошу простить за качество схемы, но делалось на скорую руку.
    Печатная плата получилась следующего вида:

    Я старался расставить отверстия так, как в джойстике находятся рёбра жёсткости, но в итоге всё равно уплыл в сторону. Может у вас получится лучше.
    После всего этого остаётся всё напаять и прошить процессор. Плата разрабатывалась с учётом установки непосредственно в корпус джойстика, что у меня с успехом и получилось. Родной провод джойстика я просто выкинул и заменил его купленным в ближайшей лавке USB A-B проводом, с отрезанной частью USB-B.
    Устройство не требует наладки и работает при правильной сборке сразу после включения.
    Прошивка, которая идёт с этой статьёй отлажена для работы с Standard Digital Pad. Если вы собираетесь использовать её для работы с Analogue Controller, то необходимо будет в Makefile изменить PSX = 1 на PSX = 2 и пересобрать код. Замечу, что я НЕ писал PSX2 код. Он находится в стадии отладки и будет в такой пока я не найду таковой джойстик или кто-то то не поделится «впечатлениями». Я буду рад помочь довести код до ума, но пока в этом просто не смысла. Так что пишите.

    Источник

    Геймпад (игровой джойстик для ПК) из старой клавиатуры и бытового хлама

    В данной самоделке необходимы следующие материалы и инструменты:

    — старая клавиатура;
    — тактовые кнопки;
    — провода;
    — обрезки фанеры;
    — мелкие шурупы;
    — картон;
    — шпатлёвка по дереву;
    — клей ПВА;
    — паяльник и принадлежности;
    — отвёртка;
    — электролобзик;
    — ручной лобзик;
    — шуруповёрт;
    — клеевой пистолет.

    Для начала разберём старую «клаву».
    Откручиваем все болтики снизу и клавиатура легко разделяется.



    От клавиатуры нам необходима только плата.



    Отложим пока это всё в сторону и возьмём небольшой обрезок фанеры.

    Подготовим шаблон из картона.

    Произведём по сделанному шаблону разметку на фанере.


    По разметке отрежем всё лишнее с помощью электролобзика.

    При помощи наждачной бумаги уберём неровности и заусенцы.

    Вот такая должна получиться заготовка.


    Изготовим таким же образом копию предыдущей заготовки.


    Отступаем 1 см от края и наносим с помощью циркуля разметку.



    Просверлим отверстие возле линии разметки, необходимое для прохождения пилки электролобзика.




    Далее вырезаем внутреннею часть заготовки.


    Вот так должно выглядеть.

    Две получившиеся заготовки необходимо склеить между собой.


    Равномерно распределим клей по поверхности.


    Прочно прижимаем части между собой.


    После высыхания клея и хорошего соединения, сделаем обработку наждачной бумагой.


    Приготовим тонкую фанеру

    По предварительно сделанной разметке (по форме изготовленной детали) ручным лобзиком (аккуратно, так как фанера тонкая) выпилим крышку.

    Вот, что должно у нас получиться.

    Прикладываем крышку на основную деталь корпуса.



    Сверлим тонким сверлом крепёжные отверстия.

    По ходу работы в сделанные отверстия вкручиваем шурупы, чтобы избежать смещения.




    После фиксации крышки произведём чистовую обработку.



    Вырезаем шаблон в виде крестика.

    Прикладываем с левой стороны и делаем разметку.


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

    С правой стороны сделаем разметку.

    Примерный внешний вид будущего джойстика.

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



    Дальше маленьким сверлом в наших углублениях уже делаем отверстия насквозь.


    В верхней части и на лицевой стороне корпуса ещё просверлим два сквозных отверстия.




    И наконец приступим к электронной начинке.

    Разберём старую ненужную электронику и найдём платы с тактовыми кнопками.


    С плат выпаиваем нужные нам кнопки.


    Ко всем кнопкам припаиваем по два провода.


    В углубления корпуса установим кнопки, продёргивая провода в сквозные отверстия и проклеиваем их с обратной стороны горячим клеем.



    Пользуясь шпаклёвкой по дереву замажем щели.

    Обработаем поверхность наждачкой.


    Для эстетичности покрасим корпус.

    Вернёмся к плате демонтированной из клавиатуры.

    Отпаяем «родной» кабель.

    Также выпаиваем один светодиод и подпаиваем к нему провода.


    Устанавливаем светодиод в отверстие на лицевой стороне корпуса, дополнительно можно закрепить горячим клеем.


    Продёргиваем в отверстие сверху usb кабель.


    Возьмём плату от «клавы» и припаяем светодиод, соблюдая полярность.

    Провода от usb кабеля паяем по указанной схеме.



    Затем при тщательном осмотре дорожек определим контакты игровых кнопок.

    Зачищаем нужные нам контакты на плате.

    Подпаиваем к контактам провода от соответствующие кнопкам на будущем геймпаде.

    Всё разместив в корпусе, закрываем крышку.


    И вот наш великолепный девайс готов.

    Включаем любимую игрушку и проводим испытание.


    По словам автора самоделки всё отлично работает, хотя я в этом не уверен, так как кабель usb был припаян напрямую к плате где раньше был кабель ps/2, а они отличаются по некоторым функциям, кто, что думает поэтому поводу, пишите в комментарии.

    Но не спешите расстраиваться, потому, что устройство имеет право на жизнь при некоторых дополнениях или изменениях, иначе я бы это не публиковал, а именно: применение специального переходника с ps/2 на usb, благо сейчас на «Алике»(AliExpress) всё продаётся, либо использовать в этой самоделке плату от usb клавиатуры.

    Источник

    Читайте также:  Белье с косточками своими руками
    Оцените статью