Как собрать usb контроллер

Обновлено: 07.07.2024

За основу схемы взяты сдвиговые регистры 74hc595 которые управляются микроконтроллером PIC18F252. Выхода схемы логические, т.е. лог "1" или лог. "0". Они маломощ ные, по этому для управления какими нибудь устройствами нужны усилители (ключи). Не забывайте про гальваническую развязку управляемых устройств со схемой ! Контроллер управляется по протоколу USART непосредственно с компьютера. Способы реализации протокола рассмотрены ниже.

Рассмотрим два способа получения USART.

1-ый, самый простой способ:
Это преобразователь уровня RS232 в USART. Схема которого приведена ниже.

Думаю здесь рассказывать нечего. 7,8 выводы подключаются к СОМ порту компьютера, а 9,10 к основной схеме устройства.

2-ой способ: Преобразователь USB - COM

Практически на всех новых компьютерах нет последовательного COM порта, а большая часть старой техники, работает именно через этот интерфейс, так называемый RS232. На новых компьютерах появилась последовательная шина USB, но протокол обмена данными через USB сложнее, чем по RS232.
Благодаря разработкам английской компании FTDI (Future Technology Devices International) появилась возможность преобразовать USB в "виртуальный" последовательный порт, обмен данными с которым ведут привычными хорошо известными методами.

Это преобразователь интерфейсов USB to COM предназначен для подключения к USB шине модема, сканера, различную измерительную аппаратуру, т.е. фактически любое устройство, ранее использовавшее интерфейс RS-232. Причем пользователю не требуется никаких знаний об устройстве и работе USB. Поставляемые компанией FTDI программные драйверы создают впечатление, что обмен идет через обычный COM порт. Разумеется, это справедливо только в том случае, если программное обеспечение использует COM порт в стандартном режиме.
Принципиальная схема преобразователя интерфейса показана на рисунке. Его основа - микросхема DD1 FT232BM включена по стандартной схеме, рекомендованной изготовителем.

Микросхему ЭСППЗУ DD2 AT93C46 можно не устанавливать. В ней хранятся идентификаторы изготовителя (VID) и персональный (PID), заводской номер изделия и другие данные. Это необходимо, если по USB с компьютером одновременно связаны несколько устройств на микросхемах FT232BM. Особенно важен серийный номер, так как программный драйвер полагается на его уникальность, ассоциируя тот или иной виртуальный COM-порт с конкретным устройством. Если ПЗУ отсутствует, к компьютеру можно подключить только одно образующее виртуальный COM порт устройство. Вместо AT93С46 можно использовать AT93C56 или AT93C66. Программируется ПЗУ непосредственно в устройстве с помощью специальной утилиты, поставляемой FTDI.

comp90-5.jpg

Я немножко подукоротил схемку и сделал вот так. Питание сделал от общей схемы устройства.

Выводы RX и TX к основной схеме устройства. Драйвер к этой МС можно скачать на оф. сайте под конкретную ОС.

Работа устройства представляет из себя двухстороннюю связь с ПК на скорости 115200 Кбит/сек. с проверкой контрольной суммы команды. Т.е. исключены ошибочная передача данных. При запуске программы происходит опрос наличия подключенного устройства и если оно обнаружено или утеряно в процессе, программа даст знать.

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

В архиве лежит программа для ПК и демо прошивка для МК устройства. Прошивка на PIC18F252 для конкретного ПК оригинальна, для её получения , пишите мне. Демо прошивка работает 10 минут, затем МК надо заново перепрошивать.

Зима в северных широтах — время, когда у FPV пилота появляется время, чтобы отдохнуть от гонок и постоянных поломок, взять в руки паяльник, и смастерить что-нибудь полезное для своего хобби.

Раз уж на улице летать холодно, то будем тренировать навыки пилотирования на симуляторах. Для этого нужно подключить свою радиоаппаратуру к компьютеру через специальный адаптер, который преобразует PPM сигнал с пульта в сигналы USB-джойстика, понятные компу. Такие адаптеры, конечно не редкость и стоят копейки в китайских магазинах. Однако доставки заказа ждать долго, да и будет ли он работать так как мы ожидали? Например у меня есть вот такой:


Он по каким-то, еще не постигнутым мною причинам, наотрез отказывается адекватно калиброваться в симуляторе FPV Freerider, хотя прекрасно работает в Phoenix RC и Aerofly RC 7. А FPV Freerider вполне неплохо передает физику акро-полета на гоночном коптере, да к тому же имеет бесплатный демо-режим.

Решено — делаем адаптер сами!

Немного матчасти:

Большинство мало-мальски серьезных RC-аппаратур имеют разъем, куда выводят управляющие сигналы в PPM (Pulse Position Modulation) формате. PPM-cигнал представляет собой последовательность коротких импульсов, промежуток между которыми определяет управляющее значение каждого из каналов радиоаппаратуры.
Суть PPM отлично передает картинка:


Чтобы декодировать PPM нужно точно замерять интервалы времени между последовательными импульсами (при этом не имеет значения между какими фронтами: передними или задними, ведь длительность самих импульсов всегда одинакова).

Реализация:

Почерпнув вдохновения из статьи AlexeyStn о создании PPM-to-USB адаптера на базе STM32F3Discovery, но имея в распоряжении только Arduino Pro Micro (Leonardo) с аппаратной поддержкой USB, начнем несложный путь к своему адаптеру.

На гитхабе можно найти несколько похожих проектов, и некоторые даже не требуют аппаратного USB в контроллере. Однако большинство из них нужно серьезно допиливать напильником, чтобы получить нечто рабочее. Годным проектом оказался rc-leonardo-joy, который начал работать почти сразу после заливки скетча, но в нем тут же обнаружились некоторые недостатки: все показания джойстика были не очень стабильными — маркер курсора в панели управления все время плясал вокруг установленной точки. Не могу сказать, что это существенно влияло на управляемость в симуляторе, но мы ведь хотим тренироваться на хорошей аппаратуре!

Что ж, лезем в код и видим: вычисление ширины импульса PPM сделано через обработку внешнего прерывания и замер интервалов между вызовами функции micros():


Читаем о функции micros() в документации Arduino:

Returns the number of microseconds since the Arduino board began running the current program. This number will overflow (go back to zero), after approximately 70 minutes. On 16 MHz Arduino boards (e.g. Duemilanove and Nano), this function has a resolution of four microseconds (i.e. the value returned is always a multiple of four). On 8 MHz Arduino boards (e.g. the LilyPad), this function has a resolution of eight microseconds.

То есть мало того, что функция не отличается особой точностью и всегда возвращает значения кратные 4 мкс, так она еще и переполнится через 70 минут, выдав нам какое-нибудь кривое значение замеренного интервала. Не годится. Лучше будет использовать таймер и его прерывания по захвату внешних сигналов.

Смотрим дальше: большая часть данных о положении джойстика искусственно ограничены одним байтом (0-255):

Сказано — сделано!
Форкаем репозиторий, переписываем код на использование таймера для отсчета PPM интервалов:

Увеличиваем интервалы отклонения стиков до 0-1000 в HID descriptor:

Настройки скетча:

Имеет смысл убрать дефайн для футабы, если у вас другая аппаратура:

и по-необходимости подстроить значения микросекунд в параметрах, если ваша аппаратура выдает другие тайминги:

Компиляция:

Чтобы скомпилировать и залить скетч, нужно подменить библиотеки работы с USB в самой среде Arduino, предварительно сделав бэкапы.
Для этого идем в недра Arduino по пути . \Arduino\hardware\arduino\cores\arduino\, бэкапим usbapi.h и hid.cpp, после чего перезаписываем их одноименными файлами из папки ArduinoLibs репозитория. Далее открываем скетч, подключаем Arduino Leonardo и заливаем.

Подключение:

Все до безобразия просто: с одной стороны вставляем USB, c другой – паяем два провода (на Digital Pin 4 и землю) и втыкаем соответственно в PPM и землю разъема передатчика. Получается как-то так:


В Windows 7 устройство распознается как составное (клавиатура, мышь, джойстик) с именем Arduino Leonardo.

Отдельного упоминания заслуживает разъем в аппаратуре. Где-то это обычный аудио-джек, а где-то (как в моей Futaba 7C) – нечто похитрее:


Для сборки различных «папа»-разъемов я уже давно успешно использую горячий клей. Для этого кладем на «маму» бумагу, или полиэтилен, протыкаем эту подложку пинами, чтобы они воткнулись в разъем с другой стороны, а затем постепенно заливаем между пинами клей, попутно придавая ему форму мокрыми пальцами. Провода, конечно, нужно припаять заранее, чтобы не расплавить застывший клей при пайке. Получается не всегда эстетично, но весьма функционально:


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

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

P.S.

На игровых выставках разработчики Objects in Space показывали демо своей игры с контроллером на кокпите огромного космического корабля. Он был дополнен загорающимися кнопками, аналоговыми приборами, световыми индикаторами состояния, переключателями и т.д… Это сильно влияет на погружение в игру:


На сайте игры выложен туториал по Arduino с описанием коммуникационного протокола для подобных контроллеров.

Я хочу создать то же самое для своей игры

В этом примере я потрачу примерно 40 долларов, чтобы добавить красивые, большие и тяжёлые переключатели на кокпит симулятора гонок. Основные затраты связаны с этими самыми переключателями — если бы я использовал простые переключатели/кнопки, то цена была в два раза ниже! Это настоящее оборудование, способное выдерживать 240 Вт мощности, а я буду пускать по ним только примерно 0,03 Вт.

Предупреждение: я решил сэкономить, поэтому оставляю ссылку на дешёвый китайский веб-сайт, где закупаю кучу разных компонентов/инструментов. Один из недостатков покупки компонентов по дешёвке заключается в том, что часто у них нет никакой документации, поэтому в статье я решу и эту проблему.

Основные компоненты

    — $9
  • гоночная панель переключателей зажигания — $26
  • Куча соединительных проводов («male to male», «male to female», и т.д. ) — $2




Рекомендуемые инструменты

  • Паяльник (стоит выбирать хороший, но с работой справится и дешёвый)
  • Припой (с канифолью 60/40 — с ним легко работать, хотя он и вреден для окружающей среды..)
  • Термоусадочная трубка (и промышленный фен, фен для волос или зажигалка) или изолента
    (и стержни к нему), или какая-нибудь эпоксидная смола

  • Кусачки/плоскогубцы для зачистки проводов, или просто ножницы, если нужно сэкономить.

Программное обеспечение

  • Arduino IDE для программирования процессора Arduino
  • Для создания контроллера, отображающегося как настоящий аппаратный USB-контроллер/джойстик:
    • FLIP для прошивки нового firmware в USB-контроллер Arduino
    • Библиотека arduino-usb на github
    • Моя библиотека ois_protocol на github
      , если вы хотите использовать контроллер как виртуальный USB-контроллер/джойстик.

    Предупреждение

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

    Для меня это был обучающий проект, поэтому в нём могут быть плохие советы или ошибки!

    Работаем с переключателями без документации.

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

    Простая двухконтактная кнопка/переключатель

    С кнопкой всё просто — в ней нет светодиодов и всего два контакта. Переключаем мультиметр в режим непрерывности/прозвонки () и касаемся щупами разных контактов — на экране будет отображаться OL (open loop, разомкнутая цепь): это означает, что между двумя щупами нет соединения. Затем нажимаем на кнопку, по-прежнему касаясь щупами контактов — на экране теперь должно отобразиться что-то типа 0.1Ω и мультиметр начнёт пищать (сообщая о том, что между щупами присутствует очень низкое сопротивление — замкнутая цепь).


    Теперь мы знаем, что при нажатии кнопки цепь замыкается, а при отжатии — размыкается. На схеме это можно обозначить как простой выключатель:

    Подключаем переключатель к Arduino

    Найдите на плате Arduino два контакта: помеченный GND и помеченный «2» (или любым другим произвольным числом — это контакты ввода-вывода общего назначения, которыми мы можем управлять через ПО).

    Если мы подключим переключатель таким образом, а потом прикажем Arduino сконфигурировать контакт «2» как контакт INPUT, то получим цепь, показанную слева (на рисунке ниже). При нажатии кнопки контакт 2 будет напрямую соединяться с землёй / 0V, а при отжатии контакт 2 не будет соединён ни с чем. Это состояние (ни с чем не соединён) называется «floating» (состояние с высоким импедансом) и, к сожалению, это не очень хорошее состояние для наших целей. Когда мы считываем данные с контакта в ПО (с помощью digitalRead(2)), получаем LOW, если контакт заземлён, и непредсказуемый результат (LOW или HIGH), если контакт находится в состоянии floating!


    Разработчикам ПО порядок может показаться обратным — при нажатии кнопки мы считываем false / LOW, а при отжатии — true / HIGH.

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

    Простейшая программа для Arduino, которая считывает состояние переключателя и сообщает PC о его состоянии, выглядит примерно так, как показано ниже. Вы можете нажать кнопку загрузки в Arduino IDE, а затем открыть Serial Monitor (в меню Tools), чтобы увидеть результаты.

    Другие переключатели почти без документации.

    Светодиодный переключатель с тремя контактами

    К счастью, на основных переключателях моей панели есть пометки трёх контактов:


    Я не полностью уверен, как он работает, поэтому мы снова переключим мультиметр в режим непрерывности и коснёмся всех пар контактов при включенном и отключенном переключателе… однако на этот раз мультиметр вообще не пищит, когда мы касаемся щупами [GND] и [+] при «включенном» переключателе! Единственная конфигурация, при которой мультиметр пищит (обнаруживает соединение) — когда переключатель «включен», а щупы находятся на [+] и [lamp].


    Светодиод внутри переключателя блокирует измерения непрерывности, поэтому из проведённых выше проверок мы можем предположить, что LED подключен непосредственно к контакту [GND], а не к контактам [+] и [lamp]. Далее мы переключим мультиметр в режим проверки диодов (символ ) и снова проверим пары контактов, но на этот раз важна полярность (красный и чёрный щуп). Теперь если мы соединим красный щуп с [lamp], а чёрный — с [GND], то светодиод загорится, а на мультиметре отобразится 2.25V. Это прямое напряжение диода, или минимальное напряжение, необходимое для его включения. Вне зависимости от положения переключателя, 2.25V от [lamp] к [GND] заставляет LED загореться. Если мы соединим красный щуп с [+], а чёрный — с [GND], то светодиод загорится только при включённом переключателе.

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

    1. [+] и [lamp] замыкаются накоротко, когда переключатель включен/замкнут.
    2. Положительное напряжение от [lamp] к [GND] всегда зажигает светодиод.
    3. Положительное напряжение от [+] к [GND] зажигает светодиод только при включенном/замкнутом переключателе.


    Честно говоря, о присутствии резистора здесь можно только догадываться. Светодиод должен быть соединён с соответствующим резистором, чтобы ограничивать подаваемый на него ток, или он сгорит. Мой не сгорел и похоже, что работает правильно. На форуме веб-сайта продавца я нашёл пост, в котором говорится об установленном резисторе, поддерживающем работу до 12 В, и это сэкономило мне время на проверку/вычисления подходящего резистора.

    Подключаем переключатель к Arduino

    Проще всего использовать переключатель с Arduino, проигнорировав контакт [lamp]: подключить [GND] к GND в Arduino и соединить [+] с одним из пронумерованных контактов Arduino, например 3.

    Если мы сконфигурируем контакт 3 как INPUT_PULLUP (так же, как и для предыдущей кнопки), то придём к показанному ниже результату. Слева вверху показано значение, которое мы будем получать, выполнив «digitalRead(3)» в коде Arduino.

    Когда переключатель включен/замкнут, мы считываем LOW и светодиод загорается! Для использования такого переключателя в данной конфигурации мы можем использовать тот же код Arduino, что и в примере с кнопкой.


    Проблемы этого решения

    После подключения к Arduino полная цепь выглядит так:


    Однако здесь мы можем увидеть, что при замыкании переключателя кроме небольшого ограничивающего ток резистора перед LED (я предполагаю, что его сопротивление 100 Ом) есть и ещё и подтягивающий резистор на 20 кОм, который ещё больше снижает величину тока, текущего через светодиод. Это означает, что хотя цепь и работает, светодиод будет не очень ярким.

    Ещё один недостаток этой схемы в том, что у нас нет программного контроля над LED — он включён, когда включён переключатель, и отключен в противоположном случае.

    Можно посмотреть, что случится, если мы подключим контакт [lamp] или к 0V, или к +5V.

    Если [lamp] подключен к 0V, то светодиод постоянно отключен (вне зависимости от позиции переключателя), а распознавание позиции Arduino всё равно выполняется. Это позволяет нам при желании программно отключать LED!


    Если [lamp] подключен к +5V, то светодиод постоянно включен (вне зависимости от позиции переключателя), однако распознавание позиции Arduino поломано — с контакта всегда будет считываться HIGH.


    Подключаем этот переключатель к Arduino правильно

    Мы можем преодолеть описанные выше ограничения (низкий ток/яркость светодиода и отсутствие программного контроля над светодиодом), написав больше кода! Чтобы разрешить конфликт между возможностью управления светодиодом и сломанным из-за него распознаванием позиции, мы можем разделить две задачи по времени, то есть временно отключать LED при считывании контакта датчика (3).

    Сначала подключим контакт [lamp] к ещё одному контакту Arduino общего назначения, например, к 4, чтобы можно было управлять lamp.

    Чтобы создать программу, которая будет правильно считывать позицию переключателя и управлять светодиодом (мы заставим его мигать), нам достаточно просто отключать светодиод перед считыванием состояния переключателя. Светодиод будет отключаться всего на доли миллисекунд, поэтому мерцание не должно быть заметно:


    В Arduino Mega контакты 2-13 и 44-46 могут использовать функцию analogWrite, которая на самом деле не создаёт напряжения от 0V до +5V, а аппроксимирует его при помощи прямоугольной волны. При желании можно использовать её для управления яркостью светодиода! Этот код заставит свет пульсировать, а не просто мерцать:

    Подсказки по сборке

    Пост и так уже довольно большой, так что я не буду добавлять ещё и туториал по пайке, можете его загуглить!

    Однако приведу самые базовые советы:

    • При соединении проводов с большими металлическим контактами сначала убедитесь, что паяльник нагрелся и какое-то время нагревайте и металлический контакт. Смысл пайки заключается в образовании постоянного соединения созданием сплава, но если горячей является только одна часть соединения, то у вас запросто может получиться «холодное соединение», которое выглядит как соединение, но на самом деле не соединено.
    • При соединении двух проводов наденьте сначала на один из них кусок термоусадочной трубки — после соединения трубку надеть будет нельзя. Это кажется очевидным, но я постоянно это забываю и мне приходится использовать вместо трубки изоленту… Протяните термоусадочную трубку подальше от соединения, чтобы она не нагрелась раньше времени. Проверив паянное соединение сдвиньте на него трубку и нагрейте её.
    • Тонкие маленькие соединительные провода, которые я упоминал в начале, хорошо подходят для соединений без пайки (например, при подключении к Arduino!), но довольно хрупкие. После пайки используйте для их закрепления клеевой пистолет и устраните из самого соединения все напряжения. Например, красные провода на показанном ниже снимке при работе можно случайно потянуть, поэтому после пайки я зафиксировал их каплей горячего клея:


    Но после заливки этого firmware в Arduino устройство становится USB-джойстиком и перестаёт быть Arduino. Поэтому чтобы перепрограммировать его, нужно заново перепрошить исходную firmware Arduino. Эти итерации довольно мучительны — загружаем код Arduino, прошиваем firmware джойстика, тестируем, прошиваем firmware arduino, повторяем…

    Пример программы для Arduino, которую можно использовать с этим firmware, показан ниже — он конфигурирует три кнопки в качестве вводов, считывает их значения, копирует значения в структуру данных, ожидаемую этим firmware, а затем отправляет данные. Смыть, намылить, повторить.

    Если у вас есть контроль над игрой, с которой должно взаимодействовать устройство, то в качестве альтернативы можно общаться с контроллером напрямую — нет необходимости делать его видимым для ОС как джойстик! В начале поста я упомянул Objects In Space; именно такой подход использовали её разработчики. Они создали простой коммуникационный ASCII-протокол, позволяющий контроллеру и игре общаться друг с другом. Достаточно просто перечислить последовательные порты системы (они же COM-порты в Windows; кстати, посмотрите, как ужасно это выглядит на C), найти порт, к которому подключено устройство с названием «Arduino», и начать считывать/записывать ASCII по этой ссылке.

    На стороне Arduino мы просто используем функции Serial.print, которые применялись в показанных выше примерах.

    Она содержит код на C++, который можно интегрировать в игру и использовать её в качестве «сервера», и код Arduino, который можно выполнять в контроллере, чтобы использовать его в качестве «клиента».

    Настраиваем Arduino

    В example_hardware.h я создал классы, чтобы абстрагировать отдельные кнопки/переключатели; например, «Switch» — это простая кнопка из первого примера., а «LedSwitch2Pin» — переключатель с управляемым светодиодом из второго примера.

    Код примера для моей панели кнопок находится в example.ino.

    В качестве небольшого примера давайте допустим, что у нас есть единственная кнопка, которую нужно отправлять в игру, и один управляемый игрой светодиод. Необходимый код Arduino выглядит так:

    Настраиваем игру

    Код игры написан в стиле «single header». Для импорта библиотеки включим в игру oisdevice.h.

    Для перечисления COM-портов и создания соединения с конкретным устройством можно использовать такой код:


    Получив экземпляр OisDevice, нужно регулярно вызывать его функцию-член Poll (например, в каждом кадре), можно получать текущее состояние вывода контроллера с помощью DeviceOutputs(), использовать события устройства с помощью PopEvents() и отправлять устройству значения с помощью SetInput().

    Пример приложения, делающего всё это, можно найти здесь: example_ois2vjoy/main.cpp.

    Чтобы контроллер мог работать в других играх (часть 2), нужно установить собственное firmware и одну программу Arduino, но чтобы контроллер полностью программировался игрой, мы использовали стандартное firmware Arduino и другую программу Arduino. Но что если мы хотим иметь обе возможности одновременно?

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

    Это приложение общается с OIS-устройством (программа из части 3), а затем на PC преобразует эти данные в обычные данные контроллера/джойстика, которые потом передаются в виртуальное устройство контроллера/джойстика. Это означает, что можно позволить своему контроллеру постоянно использовать библиотеку OIS (другое firmware не требуется), а если мы захотим использовать его как обычный контроллер/джойстик, то просто запустим на PC приложение ois2vjoy, выполняющее преобразование.

    Надеюсь, кому-то эта статья показалась полезной или интересной. Спасибо, что дочитали до конца!

    Если вам стало любопытно, то я приглашаю вас поучаствовать в развитии библиотеки ois_protocol! Думаю, будет здорово разработать единый протокол для поддержки всевозможных самодельных контроллеров в играх и стимулировать игры к прямой поддержке самодельных контроллеров!

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


    Когда у меня оказался джойстик от "Дэнди"(NES), первым делом я попытался подключить его к параллельному порту(LPT) ПК, но тут, меня подстерегал неприятный сюрприз - черная клякса(кристалл микросхемы, залитый эпоксидкой) оказалась неисправной. Этот проект был отправлен в "долгий ящик".

    схема


    Отлично, подумал я, эту схему можно использовать для любого "горелого" джойстика, с количеством кнопок менее 12-ти. Первым делом я прошил atmeg'у:

    Для прошивки я использовал программатор USBtiny и программу avrdude. Дальше я взялся за разводку платы, разводка платы выполнена в программе Sprint-Layout.

    Плата разведена под микросхему в корпусе DIP-28 и радиоэлементы для стандартного (черездырочного) монтажа. Затем печатная плата была изготовлена по фоторезистивной технологии, обрезана, просверлена и собрана (запаяна).

    собрана

    собрана

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

    вырез

    Отрезав ножку, я сменил диск на бор, перерезал дорожки и снял слой маски с мест будущей пайки.

    большая плата

    Потом, я проверил все в последний раз и припаял провода между двумя платами.

    соединение

    Ну и финальная сборка.

    сборка

    И результат стараний.

    результат

    Джойстик готов к работе, под ОС Linux/Windows XP/Vista/7 установка драйверов не требуются. Устройство было проверено в работе под ОС Debian Linux и Windows XP. Джойстиком можно пользоваться не только в эмуляторах старых игровых приставок, но и в современных играх для которых хватит кнопок.

    screenshot

    Но я поиграю в игры для которых Китайцы и сделали этот джойстик, приятного приступа ностальгии.

    Читайте также: