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

Полигон-2

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

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

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

Полигон-2 »   Технический флейм »   PS/2 to COM converter
RSS

PS/2 to COM converter

Сочинил вот на днях очередную поделку.

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


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


Ссылка


Дата регистрации на форуме:
28 дек. 2007
Если не брать во внимание весьма специфический интерфейс "bus mouse" и потенциальную возможность воткнуть USB контроллер в PCI слот, с чем порой, впрочем, бывают проблемы, то старый добрый COM-порт является единственно доступным разъёмом чтобы воткнуть мышь в комп начиная с первых ПЦ и заканчивая некоторыми ранними машинами класса Pentium. И вот, допустим, есть у вас, как и у меня, ещё вполне себе крепенький "286-й", и хочется вам его погонять да поиграться с ним немного. Но где же устройства ввода для него нынче найти? Новую клаву PS/2, допустим, можно ещё без проблем воткнуть через простенький пассивный переходник. А вот с мышью уже гораздо сложнее, ибо под COM-порт они уже лет 15 как не производятся! Конечно, есть всякие там eBay, да и у меня, как у любого уважающего себя любителя старого железа, пара мышей найдётся ещё с "тех времён". Но вот только годы наложили отпечаток на "грызунов": не раз ремонтированные провода стали жёсткими, а без конца заедающий шарик после современных игровых лазерных "монстров" вызывает ощущение паралича кисти! :mad:
Так пришло постепенно осознание, что так жить нельзя неплохо бы соорудить какой-нибудь "костыль", дабы иметь возможность прикрутить к "старичку" что-то покачественнее. И, поскольку гугление чего-то готового и более-менее доступного результатов не дало, пришлось изобрести такой "костыль" самому! :cool:

Финальная версия:



Ещё вариант:


Поделие сие было создано на основе документа "AVR313: Interfacing the PC AT Keyboard", исходников примера работы с PS/2 на AVR контроллерах, открытой информации из http://www.computer-engineering.org, а также различных даташитов и текстов описания протоколов COM-овских мышей.

В настоящий момент переходник эмулирует стандартную Microsoft-совместимую мышь с дополнением известным как "расширение для средней кнопки от Logitech". Если драйвер это расширение не знает, он опознает мышь как "M$-совместимую". Также, начиная с аппаратной версии 2.0, добавлена эмуляция PnP мыши с колёсиком и возможность обновлять прошивку переходника без программатора ( прямо через COM-порт). Режим PnP с колёсиком поддерживается, по крайней мере, в Windows начиная с 98-й и в драйвере Cute Mouse для DOS.

Переходник тестировался под Windows 3.1, 98, XP, 7 x64, а также с различными DOS-овскими драйверами.

Для тех, кто умеет держать в руках паяльник и пожелает сам повторить переходничок, а может, и усовершенствовать его, сделать что-то своё, выкладываю схемку и проект прошивки под среду CodeVision. Использовалась весьма старая версия CodeVisionAVR V2.04.4a, однако ничто не мешает скомпилять проект под чем-то более новым.
Для обновления прошивки в память контроллера дополнительно зашит bootloader, совместимый (по большей части) с популярными программами для перепрошивки AvrProg от Atmel и Avrdude (программы включены в архив). Он активируется зажатием кнопки SB1 в момент подачи питания. Если возникнут вопросы по прошивке и работе с ним, поясню, что да как.

Качать тут:

Аппаратная версия 2.0 (на основе контроллера AtMega 8)
v.2.2.2

Небольшие пояснения по схеме (по аппаратной версии 2.0):
XS1 - разъём DB-9 под COM-порт, XS4 - mini-DIN 6 для PS/2 мыши, XP2 - линейка пинов для подключения программатора.
Питание 5В подаётся через контакты XS2 и XS3 на плате. Для его подачи я приспособил USB-разъём и китайский "зарядник", однако ничто не мешает, например, прикрутить стандартный MOLEX и засунуть плату в корпус компа.
Кнопка SB1 - "снизить чувствительность" мыши, SB2 - "увеличить чувствительность". Кнопка SB3 сохраняет настройку чувствительности в энергонезависимую память переходника, так что при следующем включении он сразу настроит мышь на сохранённое значение.
Джампер XP1 в замкнутом состоянии активирует режим PnP с поддержкой колёсика, в разомкнутом используется MS Mouse+Logitech. ВНИМАНИЕ, состояние джампера анализируется только в момент подачи питания. Таким образом, если вы захотите сменить режим работы, не забудте после смены состояния джампера снять питание и подать его снова.
Светодиод VD1 подмигивает при заливке прошивки через программатор, при нажатии кнопок, после успешного прохождения инициализации, а также в момент получения очередного события от мыши, что полезно для контроля исправности мыши и переходника. :rolleyes:
EJSanYo
Advanced Member


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


Ссылка


Дата регистрации на форуме:
28 дек. 2007
Rio444 пункт 3.1.6. В котором сказано, мол, что функция лишь кидает байт в регистр. Который можно потом прочитать командой 0xE9. И де-факто больше ничего не меняет.
"This command only exists to ensure compatibility." И этим всё сказано.
Rio444
Гость


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


Ссылка


Дата регистрации на форуме:
14 сен. 2014
То есть то что здесь описано, по сути фейк :biggrin:
Найти бы списочек, какие мыши "по-старинке" поддерживают изменение частоты опроса, какие нет.
EJSanYo
Advanced Member


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


Ссылка


Дата регистрации на форуме:
28 дек. 2007
Rio444 да может и не фейк, просто не на каждую мышь будет оказывать какое-либо влияние. Всё-таки гарантированное управление частотой опроса и чувствительностью - это больше удел "геймерских" мышей, подключающихся отнюдь не через PS/2.
А список такой едва ли найдёте вы. Поскольку уверен, никто и не озадачивался этим вопросом. Тем более, в процессе выпуска модели мыши производитель запросто может и поменять используемую элементную базу, без изменения названия модели. Кто ему запретит? Характеристики-то не меняются. Так что остаётся только брать конкретный экземпляр, развинчивать его и гуглить даташит на чип. Ну или просто воткнуть в комп или переходник и проверить на деле.
-MiS-
Advanced Member


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


Ссылка


Дата регистрации на форуме:
9 мар. 2016
EJSanYo написал:
[q]
Аппаратная версия 2.0 (на основе контроллера AtMega 8)
v.2.2.1
[/q]
Ссылки умерли :frown:
Осталось у кого?
EJSanYo
Advanced Member


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


Ссылка


Дата регистрации на форуме:
28 дек. 2007
-MiS-, Dropbox с 15 числа за каким-то взял, да и убил доступ к файлам через прямые ссылки. :mad: Ну и черт бы с ним, перезалил все, что было в шапке, на Яндекс, может так надежнее будет. Проверяйте.
-MiS-
Advanced Member


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


Ссылка


Дата регистрации на форуме:
9 мар. 2016
Заработало. Спасибо!
Rio444
Гость


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


Ссылка


Дата регистрации на форуме:
14 сен. 2014
Подниму старую тему.
Как отмечал выше и в теме [t=26981]"Переделка АТ интерфейса клавиатуры в PS/2 на старых платах"[/t], проблема конвертера PS/2 в COM в неидеальном преобразовании перемещений.
Во-первых имеется задержка, во вторых неточности преобразования.

Постараюсь ещё раз пояснить.
Стандартная частота передачи данных от PS/2 мыши - 100 пакетов в секунду. Т.е. через каждые 1000/100 = 10 миллисекунд.
Сам пакет передаётся быстрее (около 3 миллисекунды), за счет того, что частота передачи битов около 10 кГц.

Скорость работы COM порта для стандартных мышей - 1200 бод. Пакет данных от мыши со стандартным протоколом "MS Mouse" включает 27 бит (в том числе старт и стоп биты). Т.е. длительность пакета = 1000/(1200/27) = 22,5 миллисекунд.
Если пакеты передаются непрерывно - это минимальный период их передачи.
Получается, что за время передачи пакета данных в COM порт, от PS/2 мыши может придти 22,5/10 = 2,25 пакета данных.
Уже это дробное число показывает, что идеального преобразования быть не может.
Представьте, что Вы равномерно двигаете мышь горизонтально, так что в PS/2 порт непрерывно передаётся перемещение по X равное 10.
В COM порт будет передаваться серия пакетов: 3 пакета с перемещением 20 (=10+10) и каждый четвертый пакет - с перемещением 30 (10+10+10). Будут иметь место небольшие рывки.
Плюс добавляется задержка равная почти двухкратному времени передачи пакета в COM. Если пакет в COM только начал передаваться, а от PS/2 мыши поступили новые данные, то хост (компьютер) получит эти данные только после того, как закончится передаваться текущий пакет и эти данные будут переданы следующим пакетом. Т.е. через 2х22,5 = 45 миллисекунд.
Что эквивалентно частоте передачи 1000/45 = 22,22 Герц. Что уже явственно ощущается.


Это проблему можно решить, если поднять скорость работы COM порта с 1200 до 9600 бод.
В этом случае время передачи пакета данных в COM-порт составляет всего 1000/(9600/27) = 2,8125 миллисекунд.
Во-первых, такую задержку ни один человек ощутить не в состоянии (эквивалентная частота = 1000/2,8125 = 355 Гц),
во-вторых это время меньше периода приема данных от PS/2 мыши (=10 миллисекунд). И никаких преобразований не нужно. Пакеты передаются один-в-один, за исключением инверсии координаты Y и возможного масштабирования.

Изменить скорость с 1200 до 9600 бод в прошивке конвертера не представляет никакой сложности.
Дело за драйвером.
Большинство драйверов не только инициализируют COM порт на скорости 1200 бод, но и в процессе работы зачем-то постоянно вновь и вновь восстанавливают эту скорость, даже если вы её измените каким-то образом.

В итоге под DOS нашлись следующие варианты:

1. Перекомпилировать драйвер с открытым исходным кодом CuteMouse на скорость 9600 бод.
Даже не вникая особо в код, достаточно в двух местах заменить делитель скорости "96" на "12" и перекомпилировать.
Сделал только для версии "v2.0 alpha 4". Она написана на TASM, есть подробная инструкция по компиляции и сборке. Получилось почти сразу. Самая последняя версия "v2.1 beta 4" уже на JASM, с ней надо разбираться.
Впечатления от работы мыши самые положительные! Никаких дефектов преобразования не замечено! Реакция отличная!

2. Использовать драйверы мыши, которые не восстанавливают скорость COM порта в процессе работы.
В моей коллекции таких нашлось только два. Некий "VESA serial mouse driver (version 1.02) 1995" и "Mouse driver version 3.62" от "SPC MANUFACTURING", 1995.
Стартуют они как и положено на скорости 1200 бод, но разрешают потом изменить эту скорость. Я пользовался утилитой setcom.com из некоего пакета, найденного в сети.
Чтобы драйвер запустился и опознал мышь, необходимо, чтобы конвертер сначала передал ему идентификатор мыши (символы "М" и "3") на скорости 1200 бод, потом переключился на 9600 бод. На компьютере мы в это время запускаем setcom, который также поднимает скорость до 9600 бод.
При таком решении CuteMouse, перекомпилированный на 9600 бод не работает. Т.к. с самого начала (с идентификации мыши) ему нужна скорость 9600 бод.

3. Существует протокол COM мышей, который упоминается повсеместно, вместе со стандартным "Microsoft Mouse" (MS Mouse), называется он "Mouse System Mouse" или "PC Mouse". В отличие от MS Mouse, пакет пятибайтовый, по 8 бит в байте. Полностью пакет состоит из 50 бит. Длительность передачи на скорости 9600 бод = 1000/(9600/50) = 5,2 миллисекунды. Что больше, чем 2,8 мкс у протокола MS Mouse, но всё равно очень хорошо. И с запасом укладывается в период приема данных из PS/2 (10 мкс).

Так вот, у этого протокола есть особенность - мышь ни каким образом не даёт знать, что она присутствует.
Если Вы запустите любой (почти) драйвер мыши и он не найдёт ни на одном COM порте мышь, то загрузится именно в режиме Mouse System Mouse на COM1. С помощью ключей к драйверу можно указать другой порт.
В одном из источников написано, что мышь Mouse System может посылать для идентификации в COM-порт символ "H". Но большинство мышей не посылают вообще ничего.
Это даёт нам возможность просто настроить конвертер на скорость 9600 бод.
Запустить один из вышеуказанных драйверов. Не найдя мыши они загружаются в режиме Mouse System.
Мы меняем с помощью Setcom скорость на 9600 бод.
Всё работает!

Можно считать, что под DOS вопрос решён.

Переходим в Windows.
Вот тут нужна "помощь зала".
Для начала я экспериментировал с Win95.

Во-первых, пока не удалось найти способа изменить настройки COM-порта.
Если изменить их в "оборудовании" в свойствах COM-порта, то они меняются и сохраняются, но никак не влияют на фактическую работу COM-порта. Сторонние утилиты показывают, что скорость как была 1200 бод, так и осталась.

Во-вторых, внезапно оказалось, что второй по популярности протокол Mouse System не имеет встроенного драйвера в Win95!!!
Пришлось искать, и с большим трудом найти сторонний.
На скорости 1200 бод работает он, надо сказать, хуже чем родной MS для протокола MS Mouse. Движения заметно неравномерные.

Видятся следующие варианты:
- каким-то образом изменить один из существующих драйверов, чтобы он работал на скорости 9600 бод, вместо 1200. О драйвере с открытым исходным кодом для Win мне неизвестно. Возможно можно как-то пропатчить двоичный код драйвера,
- найти способ изменять скорость COM после загрузки драйвера и драйвер, который не будет сбрасывать её обратно на 1200,
- научить конвертер "притворяться" мышью, которая имеет драйверы с поддержкой скорости 9600 бод. Мне известны только старые мыши от Logitech, в частности их серия "C" и "Cordless". Но пока не удалось разобраться, как драйвер определяет, что подключена именно его "родная" мышь Logitech.

Пока всё.
Буду благодарен за бесполезные советы. :)

Приложения.
Документация на Logitech C7
Здесь можно скачать утилиту Setcom.com.
0leg
Advanced Member


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


Ссылка


Дата регистрации на форуме:
6 окт. 2007
Rio444 написал:
[q]
100 пакетов в секунду. Т.е. через каждые 1000/100 = 10 микросекунд.
[/q]
10 миллисекунд...
Rio444
Гость


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


Ссылка


Дата регистрации на форуме:
14 сен. 2014
0leg написал:
[q]
10 миллисекунд...
[/q]
Спасибо, исправил.
<<Назад  Вперед>> Страницы: 1 2
Печать
Полигон-2 »   Технический флейм »   PS/2 to COM converter
RSS

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

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

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