Объявление форума |
Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС. |
Полигон-2 » Технический флейм » Мышиный Антиконвертер |
<<Назад Вперед>> | Страницы: 1 2 | Печать |
EJSanYo
Advanced Member
Всего сообщений: 318 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 28 дек. 2007 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 30 июля 2015 23:32 Сообщение отредактировано: 5 июня 2017 23:35
Как-то было дело, в прошлой теме затронут был вопрос, мол, раз уж можно превратить PS/2 в COM, то можно ли наоборот? И подумалось тогда, а в самом деле, не в теории, а на практике, возможно ли? И после некоторого исследования вопроса родилось вот такое чудо. Встречаем, "Антиконвертер"! Переходник поможет подключить вашу, видавшую ещё молодого Гейтса, квадратную шариковую мышь к современной или не очень вычислительной машине при помощи относительно современного USB или 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 мышей. На практике это, по большому счёту, ни на что не влияет. Кроме того, из-за отсутствия адекватного оборудования, "второстепенные" режимы работы (по запросу и эхо) пока не тестировались. А из-за, как выяснилось, исключительного разнообразия особенностей работы хостовой части PS/2 на разных материнских платах, пока едва ли можно гарантировать, что текущая реализация их все учитывает и будет работать в любой ситуации. Небольшие пояснения по схеме (по аппаратной версии 1.0): XP1 - разъём DB-9 под COM-порт, XS1 - mini-DIN 6 для PS/2 мыши, XS2 - USB разъём (я брал полноразмерный USB-B). XP2 - линейка пинов для подключения программатора. Для соединения XS1 с портом компа я доработал провод от сломаной мышки (нет, сломалась она не в ходе этих экспериментов ). Джампер XP4 в замкнутом состоянии активирует режим PS/2, в разомкнутом - USB. Проверяется он один раз при подаче питания. ВНИМАНИЕ!!! Перед тем, как включить комп в розетку (даже не просто перед "включить кнопкой". Ибо на разъёмах часто имеется дежурное питание даже при выключенном компе) правильно выставите джампер в соответствии с выбранным интерфейсом! В противном случае есть совсем небольшой, но всё же риск чего-нибудь сломать. (в USB уровни сигналов составляют порядка 3 вольт, а в PS/2 - порядка 5). Джампер XP3 может активировать бут-загрузчик. В принципе Atmel записывает свой загрузчик в AT90USB162 прямо с конвейера. Но всё же я бы рекомендовал использовать тот, который прилагается в отдельном архиве. Чтобы его откомпилировать, требуется поставить Atmel Studio, да ещё и LUFA стек поверх. Однако можно просто взять готовый 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 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 31 июля 2015 10:08 Сообщение отредактировано: 31 июля 2015 10:29
Очень полезный проект! Вот у меня, например, есть множество 3-кнопочных мышек с rs232-выходом, которые прекрасно работают под дос и всевозможными юникс-подобными ос, но которые категорически винда отказывается опознавать, т.к. они тупые, в том числе есть со внутренностями, реализованными без микроконтроллера, на дискретных кмоп-микросхемах, и сразу переходят в работу, не выдавая байта отклика при инициализации, по которому винда мышу неподвижную опознаёт, насколько я понял. Потому цеплянием их на имеющиеся com-порты или через usb конвертер на ft232 с виндой их не подружить, не куроча виндовый драйвер. Я тоже на 162й в 12м году для этого спаял переходку на макетке, но так и забросил, т.к. сам винду не запускаю, а из покупателей мышей никто не жаловался пока. Такое у меня безобразие http://qbus.narod.ru/pic-241.jpg - с расчётом еще и на полную замену внутренностей мышки, кроме rs232 от максимчиков, на дополнительные гребёнки выведены дискретные сигналы для кнопок и оптопар. |
EJSanYo
Advanced Member
Всего сообщений: 318 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 28 дек. 2007 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 31 июля 2015 11:04 Сообщение отредактировано: 31 июля 2015 11:08
Anonymous не исключено, что у вас мыши с протоколом "PC Mouse". Они как раз при активации ничего не выдают в порт. В таком случае, с той прошивкой, что сейчас, мой переход также работать не стал бы, поскольку программировался на протокол "MS Mouse". С прошивкой, доработанной в части декодирования протокола мыши, наверно заработал бы. Однако дело может обстоять и иначе - что ваши мыши вообще сделаны не под COM порт, а под специальную плату расширения. Как раз такую-то мышь и возможно было сделать на простейшей рассыпухе, не привлекая программируемую логику. Очевидно, с таким интерфейсом COM порт не работает. И моё поделие, очевидно, также работать не будет. Однако и в этом случае, если вы нагуглите истинное назначение контактов вашего разъёма, то скорректировав аппаратную и программную часть моего перехода, вполне смогли бы его приспособить для своих задач. |
Anonymous
Advanced Member
Откуда: Москва(Россия) Всего сообщений: 2537 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 22 нояб. 2011 |
Я же написал, что под дос и *никс они прекрасно работают, там com-порт реализаован на 1002хл1 и в более старых на 564ир6. Прекрасно работают и с графическими станциями NCD, которые гениусами комплектовались при продаже. Протокол, естественно, pcmouse. |
EJSanYo
Advanced Member
Всего сообщений: 318 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 28 дек. 2007 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 31 июля 2015 12:00 Сообщение отредактировано: 31 июля 2015 12:03
Anonymous почитал даташит на эту самую ХЛ...и правда, ну просто очень железный чип! Каждую команду и состояние вывели на выделенные ноги. Так что можете попробовать вариант №1. Будут вопросы - спрашивайте. Сразу обратите внимание на периодический сброс буфера пакета мыши по таймеру. А может и я в процессе тоже попробую, спортивного интереса ради. Пара мышей, якобы умеющих "PC Mouse", у меня есть. Хоть и не настолько винтажных, чтобы совсем на рассыпухе. P.S. Кстати, если не секрет, что это за модели у вас такие мышей? Неужели советские? |
Anonymous
Advanced Member
Откуда: Москва(Россия) Всего сообщений: 2537 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 22 нояб. 2011 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 31 июля 2015 12:07 Сообщение отредактировано: 31 июля 2015 12:08
Да, с подводных лодок списанные. Хотя, много куда ставились у вояк. |
EJSanYo
Advanced Member
Всего сообщений: 318 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 28 дек. 2007 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 31 июля 2015 12:35 Сообщение отредактировано: 31 июля 2015 12:53
В процессе реставрации одного своего COM мыша с забавным названием "AK-77" (именно его немного видно на фото) сделал забавное наблюдение: При вскрытии обнаружилось, что выполнен он на основе чипа EM83701. Так вот, оказалось, что если ноги 1 и 16 чипа замкнуть перемычкой, то мышь входит в режим т.н. "динамического разрешения". Меняет свою чувствительность в зависимости от скорости перемещения. Как результат - мышь двигается гораздо быстрее и отзывчивее, в чём-то даже приближаясь к своим PS/2 сородичам! Или как минимум, гораздо лучше, чем было. Забавно, что именно об этом кричали надписи на коробке (да, у меня сохранилась родная коробка от неё), да только до моего вмешательства эта фича не была активирована. Китайцы сами поставить перемычку не догадались. Видимо, невнимательно читали даташит. Вывод: таким образом, настоящим гуртовщикам мыши настоятельно рекомендуется знать элементную базу своих манипуляторов. Как знать, может и в вашей мыши таится ещё не раскрытый потенциал! Оффтопик: Оффтопик: Anonymous ё моё, люди, где вы умудряетесь такое доставать?! Я в шоке. |
EJSanYo
Advanced Member
Всего сообщений: 318 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 28 дек. 2007 |
Обновление прошивки! Добавил поддержку протокола PC Mouse. Теперь если после подачи питания переходник некоторое время не получает байта, идентифицирующего майкрософтовский протокол (символ "M"), он решает, что к нему подключена PC Mouse. Кроме того, прикрутил немного модифицированный бут-загрузчик, чтобы каждый раз не лезть в стол за программатором. Ряд замечаний по поводу PC Mouse Хмм, как оказалось, все мыши под COM, что у меня есть, его поддерживают! Даже те, у которых на пузе нет соответствующего рубильника. В таких мышах чтобы активировать второй протокол надо в аккурат перед подачей питания зажать любую из кнопок. В случае моего переходника это означает "перед подачей питания на переходник". В случае прямого соединения с компом - "перед загрузкой драйвера мыши". После сброса питания мышь переходит снова в M$ режим. Так что я там ранее говорил про разнообразные "скрытые возможности" в мышах? Впечатления от дополнительного режима Как и ожидалось, поскольку теперь в пакете передаётся не три, а уже пять байт, причём на всё той же скорости 1200 бит/с, двигаться мышь стала более грубо и дёргано. Но за счёт "двойной" передачи координат за одну посылку, максимальное ускорение, с которым можно дёрнуть мышь, стало явно больше. Что лучше, честно говоря, затрудняюсь ответить. В играх, возможно, подобная медлительность на пользу бы не пошла. Третья кнопка активирует "прокрутку мышью" в современных браузерах и многих программах. Однако полноценное колёсико она, само собой, заменить не может. |
EJSanYo
Advanced Member
Всего сообщений: 318 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 28 дек. 2007 |
Почти месяц уже пытался перевести наконец алгоритм PS/2 функции на "аппаратную основу". Т.е. заменить программные задержки на работу по прерываниям таймера, что значительно разгрузило бы ядро контроллера. И...о б-же мой! И хоть тов. dtvims как бы уже предупреждал, всё равно, я даже предположить не мог, насколько же индивидуальны и придирчивы до мелочей PS/2 контроллеры на различных матерях. Если им при инициализации мыши хоть что-то не понравилось, они тупо затыкаются и сообщают, что мыши нет. Даже ни разу не пытаясь перезапустить. При том, что отладка интерфейса крайне затруднена из-за изолированности интерфейса от основной системы компьютра. Драйвер мыши просто получает от контроллера признак, есть мышь, или нет. В этом плане у меня особо выделилась интеловская DH55TC с "комбинированным" портом PS/2. В который она при работе периодически шлёт какую-то полную чушь, типа импульсов DATA=0, при этом не меняя состояние CLK. При определённых настройках времянки импульсов мыши эта мать вообще наглухо зависает на старте! Пока не оторвёшь переходник. Но при этом любая "живая" PS/2 мышь работает чётко и на любой материнке. ЧЯДНТ, в конце концов? |
EJSanYo
Advanced Member
Всего сообщений: 318 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 28 дек. 2007 |
Небольшое обновление прошивки! Так что пока доделал хотя бы "программную" реализацию алгоритма. А то совсем затихло у меня как-то всё. И хоть кое-что до сих пор остаётся неясным, v.0.9 теперь чётко определяется и работает на всех моих материнских платах. На той самой DH55TC в том числе. Справедливости ради отмечу, что те немногие проекты эмуляции PS/2 периферии, что удалось найти в Интернетах, были все также сделаны на программых задержках. И даже прошивка для контроллеров Cypress, на которых работают одни из лучших мышей с PS/2, похоже, также работает чисто с программным опросом (характерная процедура mouse_poll(), вызываемая в основном цикле прошивки). |
<<Назад Вперед>> | Страницы: 1 2 | Печать |
Полигон-2 » Технический флейм » Мышиный Антиконвертер |
0 посетителей просмотрели эту тему за последние 15 минут |
В том числе: 0 гостей, 0 скрытых пользователей |
Последние | |
[Москва] LIQUID-Акция. Сливаются разъемы CF МС7004 и 7004А на AT и XT Пайка термотрубок Проммать s478 PEAK 715VL2-HT ( Full-Size SBC) Подскажите по 386 материке по джамперам. |
Самые активные 5 тем | |