Внимание! Это временный неофициальный архив старой версии форума Полигон Призраков, созданный сочувствующим форуму участником. Этот сайт просуществует лишь до тех пор, пока администрация Полигона не сдержит своё обещание и не откроет официальный архив по адресу old.sannata.org.

Полигон-2

Форум о старых компьютерах

Объявление форума

Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС.

Полигон-2 »   Технический флейм »   Мышиный Антиконвертер
RSS

Мышиный Антиконвертер

Самопалка на тему COM -> USB или PS/2. Тренируемся на переходниках!

<<Назад  Вперед>> Страницы: 1 2
Печать
 
EJSanYo
Advanced Member


Всего сообщений: 318
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
28 дек. 2007
Как-то было дело, в прошлой теме затронут был вопрос, мол, раз уж можно превратить PS/2 в COM, то можно ли наоборот? И подумалось тогда, а в самом деле, не в теории, а на практике, возможно ли? И после некоторого исследования вопроса родилось вот такое чудо. Встречаем, "Антиконвертер"!



Переходник поможет подключить вашу, видавшую ещё молодого Гейтса, квадратную шариковую мышь к современной или не очень вычислительной машине при помощи относительно современного USB или PS/2 интерфейса. Давая тем самым "айтишникам" со стажем лишний повод вспомнить молодость и пустить скупую слезу, а новичкам - познать все прелести проскальзывания и тугих кнопок особенностей функционирования ещё "того" аппаратного обеспечения и, тем самым, немного приобщиться к даунгрейдерской субкультуре! :biggrin: Шучу, конечно. Настоящей целью создания сего поделия было изучение особенностей протокола, используемого в PS/2, и в частности, создание функциональной части, способной адекватно взаимодействовать с компом и выдавать себя, в частности, за PS/2 мышь. Которая будет использована в дальнейшем в прошивке более функционального переходника. Поскольку его плату лишний раз мурыжить ради этого не хотелось, и был придуман такой "облегчённый" макет.

И так, в настоящий момент (начиная с прошивки v.0.9) плата работает с мышами, работающими протоколом M$ Mouse для двух кнопок (без всяких "расширений для третьей кнопки и колеса"), а также протоколом PC Mouse (известным ещё как Mousesystem Mouse) с поддержкой трёх кнопок. Т.е., с самыми банальными и распространёнными. Распознаётся тип протокола автоматически: если в течение 200 мс после включения питания мышь не выдаёт признак M$ мыши (символ "M"), переходник полагает, что к нему подключена PC Mouse.

В зависимости от положения джампера переводит перемещения и нажатия кнопок либо в действия эмулируемой HID мыши на USB, либо эмулируемой стандартной (т.е. той, что без колеса и пяти кнопок) PS/2 мыши. Каких либо регулировок чувствительности и прочих дополнительных функций пока не реализовывал.

Переходник тестировался под Windows 98, XP, 7 x64, а также с различными DOS-овскими драйверами на как минимум десяти материнских платах различных производителей и поколений, а также под моим собственным переходником PS/2 -> COM, и на текущем этапе заработал везде.

Для удобства перепрошивки был добавлен также DFU Bootloader из проекта LUFA USB, немного подправленный для применения на моей плате.

Если кто-либо пожелает повторить переходник, или хотя бы ознакомиться с его принципом работы, вот все файлы проекта:

Аппаратная версия 1.0
v.0.9.6 beta
предыдущие версии:
v.0.9
v.0.8 beta
v.0.7 beta

В архивах сама прошивка, принципиальная схема и скриншоты фьюзов для использования прилагаемого бутлоадера и без него.

Бутлоадер
LUFA DFU Bootloader

В архиве проект под Atmel Studio, а также инсталляшка Atmel Flip (Атмеловской софтины для перепрошивки)


Некоторые технические подробности:

В качестве контроллера был взят AT90USB162. Примечателен он тем, что содержит в себе как более-менее полноценный физический уровень USB, так и некоторые элементы PS/2! Правда на аппаратном уровне там реализован, по сути, лишь его выходной каскад, а всё остальное приходится воспроизводить на уровне кода прошивки. Что практически ничем не отличается от "дрыганья ногами" обычного порта ввода-вывода.

Для эмуляции USB мыши были использованы встроенные библиотеки среды CodeVisionAVR (весьма удобные, стабильные и простые в применении, кстати), поэтому для компиляции проекта нужна её версия не ниже 3.12. Но есть и уже откомпилированный hex, он находится в папке \Release\Exe.

Для работы с COM портом используется асинхронный буфер, заполняемый по прерываниям UART. Процедуры сочинил сам мастер CodeVision.

С эмуляцией PS/2 всё гораздо сложнее. На данном этапе используется реализация, основанная на изысканиях dtvims (http://rukodelie-ds.ru/forum/viewtopic.php?t=619 и библиотеке ps2dev из проекта Arduido). Всё это, впрочем, пришлось во многом переосмыслить и доработать. На данном этапе формирование самих сигналов интерфейса выполняется программно, однако периодическая проверка на предмет опроса и конфигурирования мыши хостом сделана по прерываниям таймера. Часть "второстепенных" команд заменена "затычками" (переходник говорит, мол, "команда принята", но на деле ничего в своей работе не меняет). Примерно так же, как делали многие производителей поздних чипов для PS/2 мышей. :08: На практике это, по большому счёту, ни на что не влияет. Кроме того, из-за отсутствия адекватного оборудования, "второстепенные" режимы работы (по запросу и эхо) пока не тестировались. А из-за, как выяснилось, исключительного разнообразия особенностей работы хостовой части PS/2 на разных материнских платах, пока едва ли можно гарантировать, что текущая реализация их все учитывает и будет работать в любой ситуации.

Небольшие пояснения по схеме (по аппаратной версии 1.0):
XP1 - разъём DB-9 под COM-порт, XS1 - mini-DIN 6 для PS/2 мыши, XS2 - USB разъём (я брал полноразмерный USB-B). XP2 - линейка пинов для подключения программатора. Для соединения XS1 с портом компа я доработал провод от сломаной мышки (нет, сломалась она не в ходе этих экспериментов :biggrin: ).
Джампер XP4 в замкнутом состоянии активирует режим PS/2, в разомкнутом - USB. Проверяется он один раз при подаче питания. ВНИМАНИЕ!!! Перед тем, как включить комп в розетку (даже не просто перед "включить кнопкой". Ибо на разъёмах часто имеется дежурное питание даже при выключенном компе) правильно выставите джампер в соответствии с выбранным интерфейсом! В противном случае есть совсем небольшой, но всё же риск чего-нибудь сломать. (в USB уровни сигналов составляют порядка 3 вольт, а в PS/2 - порядка 5).

Джампер XP3 может активировать бут-загрузчик. В принципе Atmel записывает свой загрузчик в AT90USB162 прямо с конвейера. Но всё же я бы рекомендовал использовать тот, который прилагается в отдельном архиве.
Чтобы его откомпилировать, требуется поставить Atmel Studio, да ещё и LUFA стек поверх. :eek: Однако можно просто взять готовый hex из папки BootLoader_DFU\LUFA_DFU_16KB_4KB_1\LUFA_DFU_16KB_4KB_1\Release Кроме того, потребуется выставить правильно фьюзы (см. скриншот в архиве с основной прошивкой). ВНИМАНИЕ! Фьюзы BootLock нужно выставлять после заливки бутлодера в чип. А можно и не выставлять вообще. Состояние джампера проверяется в момент подачи питания, при этом комп его увидит как "Atmel USB Device". Драйвера на него после установки Atmel Flip искать в папке Program Files\Atmel\Flip 3.4.7\usb

Питание на переходник поступает от USB или PS/2. Никакого дополнительного источника, конечно, не тебуется.

Светодиод VD1 подмигивает при заливке прошивки через программатор, при успешном опознавании COM мыши и при получении от неё пакетов данных. Также он мигает, когда активен прилагаемый бут-загрузчик.
Anonymous
Advanced Member


Откуда: Москва(Россия)
Всего сообщений: 2537
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
22 нояб. 2011
Очень полезный проект! Вот у меня, например, есть множество 3-кнопочных мышек с rs232-выходом, которые прекрасно работают под дос и всевозможными юникс-подобными ос, но которые категорически винда отказывается опознавать, т.к. они тупые, в том числе есть со внутренностями, реализованными без микроконтроллера, на дискретных кмоп-микросхемах, и сразу переходят в работу, не выдавая байта отклика при инициализации, по которому винда мышу неподвижную опознаёт, насколько я понял. Потому цеплянием их на имеющиеся com-порты или через usb конвертер на ft232 с виндой их не подружить, не куроча виндовый драйвер. Я тоже на 162й в 12м году для этого спаял переходку на макетке, но так и забросил, т.к. сам винду не запускаю, а из покупателей мышей никто не жаловался пока. Такое у меня безобразие http://qbus.narod.ru/pic-241.jpg - с расчётом еще и на полную замену внутренностей мышки, кроме rs232 от максимчиков, на дополнительные гребёнки выведены дискретные сигналы для кнопок и оптопар.
EJSanYo
Advanced Member


Всего сообщений: 318
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
28 дек. 2007
Anonymous не исключено, что у вас мыши с протоколом "PC Mouse". Они как раз при активации ничего не выдают в порт. В таком случае, с той прошивкой, что сейчас, мой переход также работать не стал бы, поскольку программировался на протокол "MS Mouse". :rolleyes: С прошивкой, доработанной в части декодирования протокола мыши, наверно заработал бы.
Однако дело может обстоять и иначе - что ваши мыши вообще сделаны не под COM порт, а под специальную плату расширения. Как раз такую-то мышь и возможно было сделать на простейшей рассыпухе, не привлекая программируемую логику. Очевидно, с таким интерфейсом COM порт не работает. И моё поделие, очевидно, также работать не будет. Однако и в этом случае, если вы нагуглите истинное назначение контактов вашего разъёма, то скорректировав аппаратную и программную часть моего перехода, вполне смогли бы его приспособить для своих задач.
Anonymous
Advanced Member


Откуда: Москва(Россия)
Всего сообщений: 2537
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
22 нояб. 2011
Я же написал, что под дос и *никс они прекрасно работают, там com-порт реализаован на 1002хл1 и в более старых на 564ир6. Прекрасно работают и с графическими станциями NCD, которые гениусами комплектовались при продаже. Протокол, естественно, pcmouse.
EJSanYo
Advanced Member


Всего сообщений: 318
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
28 дек. 2007
Anonymous почитал даташит на эту самую ХЛ...и правда, ну просто очень железный чип! Каждую команду и состояние вывели на выделенные ноги. :biggrin:
Так что можете попробовать вариант №1. Будут вопросы - спрашивайте. Сразу обратите внимание на периодический сброс буфера пакета мыши по таймеру.
А может и я в процессе тоже попробую, спортивного интереса ради. Пара мышей, якобы умеющих "PC Mouse", у меня есть. Хоть и не настолько винтажных, чтобы совсем на рассыпухе.
P.S. Кстати, если не секрет, что это за модели у вас такие мышей? Неужели советские?
Anonymous
Advanced Member


Откуда: Москва(Россия)
Всего сообщений: 2537
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
22 нояб. 2011
Да, с подводных лодок списанные. Хотя, много куда ставились у вояк.
EJSanYo
Advanced Member


Всего сообщений: 318
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
28 дек. 2007
В процессе реставрации одного своего COM мыша с забавным названием "AK-77" (именно его немного видно на фото) сделал забавное наблюдение:

При вскрытии обнаружилось, что выполнен он на основе чипа EM83701. Так вот, оказалось, что если ноги 1 и 16 чипа замкнуть перемычкой, то мышь входит в режим т.н. "динамического разрешения". Меняет свою чувствительность в зависимости от скорости перемещения. Как результат - мышь двигается гораздо быстрее и отзывчивее, в чём-то даже приближаясь к своим PS/2 сородичам! Или как минимум, гораздо лучше, чем было. Забавно, что именно об этом кричали надписи на коробке (да, у меня сохранилась родная коробка от неё), да только до моего вмешательства эта фича не была активирована. Китайцы сами поставить перемычку не догадались. Видимо, невнимательно читали даташит. :08:

Вывод: таким образом, настоящим гуртовщикам мыши настоятельно рекомендуется знать элементную базу своих манипуляторов. Как знать, может и в вашей мыши таится ещё не раскрытый потенциал!
Оффтопик: Оффтопик: Anonymous ё моё, люди, где вы умудряетесь такое доставать?! :biggrin: Я в шоке.
EJSanYo
Advanced Member


Всего сообщений: 318
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
28 дек. 2007
Обновление прошивки!
Добавил поддержку протокола PC Mouse. Теперь если после подачи питания переходник некоторое время не получает байта, идентифицирующего майкрософтовский протокол (символ "M"), он решает, что к нему подключена PC Mouse. Кроме того, прикрутил немного модифицированный бут-загрузчик, чтобы каждый раз не лезть в стол за программатором. :rolleyes:

Ряд замечаний по поводу PC Mouse
Хмм, как оказалось, все мыши под COM, что у меня есть, его поддерживают! Даже те, у которых на пузе нет соответствующего рубильника. В таких мышах чтобы активировать второй протокол надо в аккурат перед подачей питания зажать любую из кнопок. В случае моего переходника это означает "перед подачей питания на переходник". В случае прямого соединения с компом - "перед загрузкой драйвера мыши". После сброса питания мышь переходит снова в M$ режим. Так что я там ранее говорил про разнообразные "скрытые возможности" в мышах?

Впечатления от дополнительного режима
Как и ожидалось, поскольку теперь в пакете передаётся не три, а уже пять байт, причём на всё той же скорости 1200 бит/с, двигаться мышь стала более грубо и дёргано. Но за счёт "двойной" передачи координат за одну посылку, максимальное ускорение, с которым можно дёрнуть мышь, стало явно больше. Что лучше, честно говоря, затрудняюсь ответить. В играх, возможно, подобная медлительность на пользу бы не пошла. Третья кнопка активирует "прокрутку мышью" в современных браузерах и многих программах. Однако полноценное колёсико она, само собой, заменить не может.
EJSanYo
Advanced Member


Всего сообщений: 318
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
28 дек. 2007
Почти месяц уже пытался перевести наконец алгоритм PS/2 функции на "аппаратную основу". Т.е. заменить программные задержки на работу по прерываниям таймера, что значительно разгрузило бы ядро контроллера. И...о б-же мой! :mad: И хоть тов. dtvims как бы уже предупреждал, всё равно, я даже предположить не мог, насколько же индивидуальны и придирчивы до мелочей PS/2 контроллеры на различных матерях. Если им при инициализации мыши хоть что-то не понравилось, они тупо затыкаются и сообщают, что мыши нет. Даже ни разу не пытаясь перезапустить. При том, что отладка интерфейса крайне затруднена из-за изолированности интерфейса от основной системы компьютра. Драйвер мыши просто получает от контроллера признак, есть мышь, или нет. В этом плане у меня особо выделилась интеловская DH55TC с "комбинированным" портом PS/2. В который она при работе периодически шлёт какую-то полную чушь, типа импульсов DATA=0, при этом не меняя состояние CLK. При определённых настройках времянки импульсов мыши эта мать вообще наглухо зависает на старте! :eek: Пока не оторвёшь переходник. Но при этом любая "живая" PS/2 мышь работает чётко и на любой материнке. ЧЯДНТ, в конце концов?
EJSanYo
Advanced Member


Всего сообщений: 318
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
28 дек. 2007
Небольшое обновление прошивки!
Так что пока доделал хотя бы "программную" реализацию алгоритма. А то совсем затихло у меня как-то всё. И хоть кое-что до сих пор остаётся неясным, v.0.9 теперь чётко определяется и работает на всех моих материнских платах. На той самой DH55TC в том числе. Справедливости ради отмечу, что те немногие проекты эмуляции PS/2 периферии, что удалось найти в Интернетах, были все также сделаны на программых задержках. И даже прошивка для контроллеров Cypress, на которых работают одни из лучших мышей с PS/2, похоже, также работает чисто с программным опросом (характерная процедура mouse_poll(), вызываемая в основном цикле прошивки).
Fe-Restorator
Гость

Ссылка

EJSanYo, может быть, аппаратные прерывания попадают не в такт с передачей данных в PS2... Чуть торопятся или опаздывают, попадая на 3/4 такта шины PS2... И отрегулировать сие трудно, ибо сами задержки имеют переменную длину, по времени...
или рассинхрон берётся оттого, что прерывание контроллером обрабатывается быстрее, чем завершится такт PS2 шины...

Экскузьми, глубоко не рыл сию тему.
Сейчас на форуме
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
EJSanYo, большое спасибо, что занимаетесь этим вопросом! Думаю, не я один слежу за темой. Пока сих пор глубоко не копал, поэтому комментировать нечего. Только пытаюсь понять Ваши идеи :)
EJSanYo
Advanced Member


Всего сообщений: 318
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
28 дек. 2007
Обновление прошивки! Периодически продолжаю возвращаться к теме своих переходников и вопросам функционирования PS/2 в частности. Всё-таки удалось отчасти перевести эмуляцию этого интерфейса на аппаратную поддержку. Теперь периодическая проверка того факта, что комп хочет что-то сказать мыше, выполняется периодически по прерываниям таймера, независимо от основного цикла программы. Потенциально это должно давать меньший риск "зависания" переходника и вообще более стабильную работу. Пока что все материнки, с которыми производил тестирование, приняли нововведение благосклонно.
Прошивка v.0.9.6 beta, выложил в шапку топика.
EJSanYo
Advanced Member


Всего сообщений: 318
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
28 дек. 2007
Перезалито на ЯДиск. Вдруг ещё пригодится.
<<Назад  Вперед>> Страницы: 1 2
Печать
Полигон-2 »   Технический флейм »   Мышиный Антиконвертер
RSS

0 посетителей просмотрели эту тему за последние 15 минут
В том числе: 0 гостей, 0 скрытых пользователей

Последние RSS
[Москва] LIQUID-Акция. Сливаются разъемы CF
МС7004 и 7004А на AT и XT
Пайка термотрубок
Проммать s478 PEAK 715VL2-HT ( Full-Size SBC)
Подскажите по 386 материке по джамперам.

Самые активные 5 тем RSS