Adapter Retro Game Controller STM32

Арбрани
Вт 20 октября 2015 г. 16:13
Я работаю над созданием адаптера игрового контроллера с несколькими протоколами из Maple Mini.

Я инженер -программист и только очень слегка балуется в электронике. Я сталкиваюсь с какой -то неизвестной территорией с несколькими 1 проволочными протоколами на нескольких контроллерах, и я надеюсь, что смогу задать здесь несколько вопросов для получения помощи. Если нет, есть ли другие общие доски электроники, к которым я могу присоединиться?

Проблема с контроллерами Nintendo; N64 и GameCubes.
Они оба используют один 3.3V строка данных.

3.Линия 3V вытянута высоко в консоли, поэтому мне нужно имитировать это в STM32.
Нужно ли мне натянуть линию высоко в цепи с внешним резистором? Это единственный способ?
Когда я хочу передавать на линии, я установите вывод на output_open_drain?
Когда я хочу получить на линии, мне нужно установить штифт на input_pullup или плавание из -за внешнего подтягивания?

[Обновлять]
Я поднял линию высоко с 2.2K резистор до 3.3V линия питания и использовалась output_open_drain для передачи и input_floating для получения. Я переключился на использование Рика Кимбалла dwt_timer Для лучшего микросекунтного времени.
Я смог отправить команду опроса и прочитать обратно кнопку. Время не идеально. Мне нужно учесть некоторые циклы, потерянные для логического контроля и опроса по штифрам. Я бы копался в металле и обошел методы удобства, но я еще не обнаружил, сколько теряется.

[Обновлять]
Джайтер времени был вызван прерыванием USB во время общения. Я смог успешно общаться с контроллером, временно отключив прерывания во время общения. Сейчас я переезжаю на некоторые другие контроллеры, которые у меня есть под рукой, которые в настоящее время являются контроллерами SNES и GameCube.

Большое спасибо!

Арбрани
Вт 20 октября 2015 г., 19:30
Я подумал, что могу поговорить немного больше о проекте, а не только о текущей проблеме.

Я использую Maple Mini с 7 логическими штифтами на контроллер для управления 4 контроллерами с одним USB/Maple Mini. Я знаю, что Teensy может загрузиться как 4 отдельных джойстиков, я не изучал его с помощью Maple Mini, но я видел, как кто -то, работающий над джойстиком, Hid на этом форуме. Мы решим эту проблему, когда доберемся до нескольких контроллеров :)

Я собираюсь использовать несколько разъемов DB-15 для адаптеров контроллера консоли, чтобы я мог подключить большое количество типов контроллеров в эту систему. Мини -адаптер Maple может использовать несколько типов контроллеров одновременно, например, мы можем разместить контроллер SNES на контроллере Port1 и Sega Genesis на порте2.

Я собирал и пишу протоколы связи для пары контроллеров. До сих пор я написал битовые биты для SNES, N64, GameCube, Sega Genesis (Master System) и Sega Saturn Controllers.

Я использую планировщик кооперативных задач, и эти контроллеры - это задачи, которые контролируют их собственный таймер опроса. Высокая приоритетная задача - это та, которая ищет подключения / отключения контроллера. Я собираюсь использовать 4 контакта на DB-15, чтобы создать кусочек, проводя идентификатор типа контроллера, пайки в логику 3.3V PIN.

Идентификация контроллера не спланирована из -за требований к выводам, я думаю, что я использую регистр переключения PISO, чтобы захватить идентификационные глины из кабельных адаптеров. Одна проблема с этим методом заключается в том, что некоторые адаптеры могут работать для нескольких контроллеров (например, контроллеры SEGA и большинство, которые используют разъем DB-9).

Когда эта задача находит новый контроллер, она помещает задачу контроллеров в список задач, в котором отслеживает, какие задачи/контроллеры подключены к каким портам. Когда он обнаруживает, что контроллер удаляется, он также удаляет задачу из планировщика.

Я посмотрю, смогу ли я перенести то, что у меня есть, сегодня вечером.

Спасибо!

Mrburnette
Вт 20 октября 2015 г., 20:00
[QUOTE = "Arbraini"<...>
Проблема с контроллерами Nintendo; N64 и GameCubes.
Они оба используют один 3.3V строка данных.

3.Линия 3V вытянута высоко в консоли, поэтому мне нужно имитировать это в STM32.
Нужно ли мне натянуть линию высоко в цепи с внешним резистором? Это единственный способ?
Когда я хочу передавать на линии, я установите вывод на output_open_drain?
Когда я хочу получить на линии, мне нужно установить штифт на input_pullup или плавание из -за внешнего подтягивания?

Большое спасибо![/цитировать]

Глядя на вложение, кажется, что правильный резистор, подтянутый до +VCC, подходит.

Что касается штифта CMOS ввода/вывода, планируете ли вы выполнять управление необработанным портом? Как правило, один (как и я) будет думать, что библиотека будет использована, как в этом примере: http: // themikerogers.com/2010/09/20/sup ... ER-Part-3/ Но вы, безусловно, можете сделать все манипуляции встроенными.
Раскрытие: я никогда не переплетал игровой контроллер, поэтому, хотя мой вход может быть скудным, я нахожу проект интересным : Geek:
x2wii_n64.jpg
x2wii_n64.JPG (137.94 киб) просмотрено 2018 раз

Арбрани
Ср 21 октября 2015 г. 12:23
Спасибо за схему!

Я обновил основной пост.

Я смог общаться с моим контроллером N64 вчера вечером. Было поздно, и у меня был только час свободного времени, но это отличный первый шаг. У меня не будет времени сегодня вечером, но если я смогу исправить проблему времени в четверг, если останется достаточно времени, я поставлю его на GitHub, в противном случае ему нужно будет ждать выходных.

Прямо сейчас мои биты 4US работают около 4.5US LONG, и при чтении обратно кнопку состояния в какой -то момент время должно проскользнуть, потому что я перестаю видеть команды, отправляемые из STM32. Я думаю, что попадаю в бесконечную петлю в ожидании состояния, которое, вероятно, было пропущено (или в ожидании последнего бита, которое, вероятно, уже прошло).

Арбрани
Вт 27 октября 2015 г. 13:47
Я думаю, что эта тема станет чем -то вроде журнала разработки.

Я начал намечать на булавки и понял, что достаточного количества толерантных булавок 5 В для обработки 4 контроллеров одновременно. Чтобы решить проблему, на которую я рассматриваю 8-битный преобразователь логического уровня, чтобы обеспечить дополнительные два двунаправленных 5-В контакта на контроллер.

Должна сейчас 1 х кленовый мини, 4 х 3.3K подтягивающие резисторы, 1 x 8-битный преобразователь уровня логического уровня и 2 x 8-битный регистр сдвига PISO.

Мне также нужно начать изучать, как я могу получить Maple Mini, чтобы быть признанным 4 джойстиками.

Добрый день!

Rogerclark
Вт 27 октября 2015 г., 22:50
Вместо этого вы можете использовать Teensy.. Я думал, что у него была груза с толерантными булавками 5 В (но вам лучше проверить)

Либарра
Ср 28 октября 2015 г., 7:19
Привет, Арбрани,

Я думаю, что это возможно, Maple Mini может быть обнаружен как 4 Joyticks одновременно. Текущий дескриптор отчета HID должен быть изменен, чтобы включить по 4 раздела джойстиков каждый со своим собственным идентификатором, а методы хитджойстического класса также должны быть изменены, чтобы использовать аргумент идентификатора, хотя я еще не пробовал его.

Я думаю, что Teensy 3.X толерант на 5 В только в цифровых булавках, но не на аналоговых, поэтому я не знаю, достаточно ли их, но, как говорит Роджер, вам лучше проверить.


Либарра

Арбрани
Пт 30 октября 2015 г. 13:10
Спасибо за подростковое предложение. Даже без аналоговых контактов Teensy 3.1/3.2 имеет 34 5 В толерантных булавок. Этого было бы более чем достаточно, и я не сомневаюсь, что подростка будет очень хорошо работать для этого проекта. Тем не менее, Teensy - в 4 раза стоимость клонов Maple Mini, у меня уже есть клоны Maple Mini, а стоимость преобразователя логического уровня составляет 1 доллар США.

У моего инженера-инженера по электронике была поговорка: если вам это нужно, купите четыре. Если вам нужно четыре, купите двадцать. Teensy слишком богат для этого заявления.

Но у меня есть 4 Maple Minis и 5 преобразователей логического уровня по заказу ;)

В эти выходные у меня будет время поиграть с гидами джойстика, чтобы получить четыре в.
У меня работали контроллеры SNES, я не могу сказать, мертв, мой контроллер GameCube (это сторонняя сторона, которую я купил в благотворительном магазине), но он не отвечает.

Спасибо!

Rogerclark
Пт 30 октября 2015 г., 8:50 вечера
Re: Teensy

Цена на Teensy также является проблемой для меня, тем более что доставка за пределами США много добавляет к стоимости, я думаю, что это добавляет 50% к цене.

Вот почему я никогда не покупал его.

Я предполагаю, что если бы доска STM32, как и Maple Mini, не существовало, мне пришлось бы купить подростковый.

Но теперь, когда они существуют, я купил 5, и это все еще дешевле, чем один подросток.


Я уверен, что Teensy - это лучшая доска, но не эффект затрат на то, что я хочу

Арбрани
Вт 10 ноября 2015 г. 13:38
Развитие все еще происходит, но некоторые другие жизни замедляют вещи. Я также жду, когда больше типов ретро -контроллеров отправляются из Японии, и не похоже, что они прибудут до конца ноября.

Я реформировал задачи, чтобы не было задач для каждого типа контроллера, а задача порта Joypad, которая управляет одним джойстиком USB и соответствующим входным портом. В планировщике будет 4 из этих задач, и то, какими были отдельные задачи контроллера, теперь являются классами со статическим методом запуска, который обрабатывает связь и возвращает состояние кнопки.

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

Luc_exe
Вт 10 ноября 2015 г., 17:02
Эй, хороший проект.

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

В настоящее время я работаю над аналогичным проектом, с Crontroller Dreamcast в беспроводном моде, использующем STM32 и NRF24L01+ или ESP8266 (они прибыли неделю назад, но еще не тестировались). Maple Bus, используемый в портах контроллера Dreamcast, немного сложно, но интересно экспериментировать с. Он использует 2 провода для двунаправленной связи (половина дуплекса), и цель каждого провода меняется между данными и часами при каждой передаче битов. При этом 2 бита переносятся только за 1 цикл : o

Спасибо за совет и ссылку при использовании Rick's Delay_cycle с помощью DWT Register, чтобы получить лучшее управление временем, я буду хорошо взглянуть на это. Время это определенно одна из проблем биггетов при эмуляции/чтении протокола контроллера.

Я также заинтересован в том, чтобы дескриптор сообщил 4 контроллера всего за 1 STM32 от USB (но я не уверен, может ли он фактически обрабатывать эмуляцию протокола для 4 контроллеров одновременно). Пожалуйста, скажите нам, если вам удастся заставить его работать.

Rogerclark
Вт 10 ноября 2015 г., 19:46
Вы можете рассмотреть возможность использования NRF51822 вместо NRF24L01

Теперь я разработал, как запрограммировать прошивку на этом устройстве BLE с помощью Arduino IDE и использования другой платы STM32F103C, прошитой с прошивкой, чтобы выступить в качестве программиста.

Оформить мой YouTube Stuff... это последнее видео




Это может быть более гибким вариантом, чем 24L01

Но ESP8266 также является отличным устройством, оно просто зависит, если вы хотите использовать Wi -Fi или какую -либо другую форму. Но NRF51822 - Bluetooth, поэтому он также может взаимодействовать с такими устройствами, как таблетки и телефоны (которые имеют возможность BLE)

Арбрани
Вторник 08 декабря 2015 14:28
Прошел почти месяц с момента моего последнего поста: \

Я построил плату разработчика, которая поднимает два «порта», используя винтовые стойки. Я не мог найти переключатели, поэтому я в конечном итоге положил 8 раздвижных переключателей в три раза на краю. Я еще не начал делать отчет STM как многочисленные джойстики, но я читал в программ USB. Я также могу включить пользовательское устройство в устройство и некоторое программное обеспечение на компьютер, чтобы сообщить, какой тип контроллера подключен, которое может даже продвигаться до самого пользовательского картирования кнопок.

Я посмотрел протокол контроллера Dreamcast, он дикий. Я подобрал несколько подержанных контроллеров на eBay и некоторых виртуальных машинах, с которыми можно поиграть, но я не начался на них. Запуск нескольких контроллеров Dreamcast может быть слишком налогом: \

Я также думал об использовании таймеров и DMA для обработки связи с некоторыми контроллерами, но не сделал больше, чем читал руководство и Go Cross Eyeed.

И я начал создавать настраиваемую печатную плату для запуска соединений. Protoboard занял 3 недели свободного времени, и у «реальной» доски было бы вдвое больше соединений.

Rogerclark
Вторник 08 декабря 2015 г., 19:14
Чтобы перечислить STM32 на USB в качестве нескольких джойстиков, вам нужно будет использовать концепцию композитного USB -устройства.

Я не уверен, как точно настроить структуры данных USB для этого, но вы можете посмотреть, что делает Liboopencm3.

На самом деле вам может в конечном итоге придется кодировать, используя libopencm3, а не API Arduino, чтобы накапливать это, потому что в настоящее время ни у кого не было времени, чтобы посмотреть, как заставить код Arduino есть составное устройство.

Я думаю, что @JCW расследовал, заменив код низкого уровня Libusb на USB -код от LibooenCm3, но это долгий путь вниз по его списку ;-)

Арбрани
Пт 05 августа 2016 г. 13:37
Я все еще рядом, я думаю, 6 месяцев - это много времени, но он пролетел мимо.

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

Как далеко я ушел: я смог заставить POC сообщить об одном устройстве и нескольких контроллерах. Я думаю, что сделал это, сообщив одному устройству с несколькими коллекциями в отчете HID. Мне пришлось в значительной степени изменить код платы и код STM32, я получил N64 и SNES, работающие в качестве геймпадов в Windows, но я сделал это, жестко кодируя контроллер и не обнаружив, какой из них был подключен. На данный момент мне пришлось все собрать.

С тех пор я придумал редизайн:
Отбросить два адаптера уровня линии 3V3-5 В. Это будет слишком медленно, чтобы общаться с контроллерами Dreamcast.
Отбросить два переключателя Piso. Они были использованы для обнаружения типа контроллера. У меня сейчас новый метод.
Отбросить переключатель транзистора 5 В. Это использовалось для контроллеров SEGA.

Первоначально я пытался вытащить 4 игровых контроллера из одного микроконтроллера, это потребовало работы вышеуказанного оборудования. Вместо этого я собираюсь использовать один микроконтроллер для чтения входов из 2 игровых контроллеров. Затем приобретите один поступок как раб и сообщите о картировании джойстика с мастером, который будет выступать в качестве USB -устройства на компьютер.

С одной UC до двух игровых подушек у меня будет все толерантные GPIO 5 В, я могу использовать 4 контакта с АЦП для чтения напряжений от адаптеров контроллера для обнаружения типа контроллера. В интересном повороте я собираюсь использовать 1-проводной протокол связи N64 для связи между двумя UC.

Итак, я собираюсь начать переработать макет и программное обеспечение POC, посмотреть на получение последнего кода SMT32Duino и найти более чистый способ реализации джойстиков USB.

-дрю