Внимание! Это временный неофициальный архив старой версии форума Полигон Призраков, созданный сочувствующим форуму участником. Этот сайт просуществует лишь до тех пор, пока администрация Полигона не сдержит своё обещание и не откроет официальный архив по адресу 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(), вызываемая в основном цикле прошивки).
<<Назад  Вперед>> Страницы: 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