Компьютерная мышь PS/2 в радиолюбительских конструкциях А.В.Пахомов

Статья опубликована в журнале "Радио" №4, 2009.В статье описывается интерфейс PS/2, система команд интерфейса для управления компьютерной мышью. Приводится фрагмент принципиальной схемы на микроконтроллере MCS-51, где показано подключение мыши PS/2. В качестве примера практического использования компьютерной мыши с интерфейсом PS/2 в радиолюбительской конструкции приводится описание доработки простой MIDI-клавиатуры с регулятором громкости (скорости нажатия клавиши) и регулятором положения колеса выполненными в виде "мышки". Также в статье приводятся коды и текст программы на ассемблере MCS-51 модернизированной MIDI-клавиатуры. В статье дается вся необходимая информация для разработки устройств с применением компьютерной мыши. Содержатся сведения для решения обратной задачи - подключения радиолюбительских устройств к компьютеру через интерфейс PS/2.

Введение

Часто в радиолюбительской практике возникает необходимость использования какого-либо регулятора. В аналоговой технике, как правило, применяют переменный резистор. В цифровой технике так же, обычно используют тот же резистор с каким-либо преобразователем во временной интервал. Более интересным является использование контактных пар, периодически замыкаемых при вращении, или перемещении ручки управления. Нередко в качестве такого устройства применяют открытые оптопары компьютерных мышей. В таком случае мышь разбирают и используют только требуемый механизм (светодиод, вращающийся диск с прорезями и фотоэлементы), к выходам фототранзисторов которого подключают D-триггер и имеют два сигнала: направление и тактовый. Когда у автора в процессе модернизации простой MIDI-клавиатуры возникла потребность в непрерывном регуляторе, взгляд сразу упал на мышь. Первая мысль: разобрать, приделать к колесу ручку управления, выходы фототранзисторов подключить к микроконтроллеру клавиатуры и - вперед. Но тут же появилась вторая: жалко ломать изящное, удобное устройство, верой и правдой служащее миллионам людей, не лучше ли использовать всю мышь целиком, подключив ее через стандартный разъем к контроллеру MIDI-клавиатуры. Более того: мы получаем сразу два, а, при наличии колеса прокрутки, три регулятора в одном удобном корпусе. Изучение вопроса подключения мыши с интерфейсом PS/2 (в первую очередь из интернет-источников) показало интересную вещь: полное отсутствие каких-то связных описаний "мышиного" PS/2. В русскоязычном Интернете нашел только две более-менее осмысленных статьи [1,2]. Но статьи написаны так, что больше скрывают и, даже, искажают информацию, причем все авторы с юмором отмечают некую "секретность" интерфейса. В англоязычной части наткнулся на отличное описание интерфейса PS/2 в [3] и отличную статью [4] по системе команд управления мышью PS/2. Ниже представлены результаты опытов автора по подключению мыши к микроконтроллеру (эксперименты проводились с МК AT89C51 и мышью Genius NetScroll).

Интерфейс PS/2. Сигналы. Разъем. Подключение.

Интерфейс PS/2 существует несколько десятилетий и до сих пор широко применяется в персональных компьютерах для подключения клавиатуры и мыши. Это синхронный последовательный двунаправленный интерфейс. Наиболее популярный разъем для интерфейса PS/2 - шести контактный mini-DIN. Кроме линий данных (DATA) и синхронизации (CLOCK) на контакты разъема (рис.1 - файл RIS1.BMP) выведены общий провод (GND) и питание (+5В).Выходы сигнальных линий имеют открытый коллектор, и в пассивном состоянии имеют уровень логической единицы. Для нормальной работы интерфейса сигнальные линии должны быть подтянуты к шине питания резисторами 10 ком. При описании протокола обмена данными удобно пользоваться терминами хост (host) для контроллера (персонального компьютера) и устройство (device) для мыши. Каждый байт, передаваемый по шине включает: стартовый бит (логический ноль), восемь бит данных (начиная с младшего), бит контроля четности и стоп бит (логическая единица). Бит контроля четности в сумме с количеством единиц в байте должны составлять нечетное число. Каждый бит данных (на линии DATA) тактируется импульсом на линии CLOCK. Считывание данных приемником производится после перевода CLOCK из единицы в ноль для приемника-хоста и после перевода CLOCK из нуля в единицу для приемника-устройства. Соответственно передатчик-устройство должен установить данные до перевода CLOCK из нуля в единицу, а передатчик-хост - до перевода CLOCK из единицы в ноль. При работе с мышью PS/2 генератором тактовых импульсов на линии CLOCK всегда выступает устройство (мышь), независимо от того, кто в данный момент передает (принимает) данные.

Интерфейс PS/2. Протокол обмена Устройство-Хост и Хост-Устройство.

Сигналы в линиях интерфейса PS/2 при передаче данных из устройства на хост изображены на рис.2 (файл RIS2.BMP) . Устройство может начать передавать байт хосту только когда шина свободна (DATA и CLOCK в состоянии единицы). Если шина занята (CLOCK в нуле), устройство гарантированно не начнет передачу (переведет CLOCK в ноль) в течение не менее 50 мкс после освобождения шины. Устройство выдает 11 импульсов CLOCK - по одному для каждого бита DATA (старт, 8 бит данных, контроль, стоп), хост фиксирует данные на каждый перепад CLOCK из единицы в ноль. Устройство изменяет данные на DATA пока CLOCK находится в состоянии единицы. Хост может затребовать прекращения передачи данных устройством путем удержания CLOCK в состоянии нуля не менее чем на 100 мкс, в этом случае устройство прекращает передачу. Хост также может удерживать CLOCK в состоянии нуля после прихода 11-ого импульса, чтобы предотвратить передачу следующего байта данных устройством. Временные параметры к рис.2(файл RIS2.BMP): длительность нуля (t1) и единицы (t2) тактового сигнала CLOCK может составлять от 30 до 50 мкс (используемая автором мышь выдавала длительности по 40 мкс). Гарантируется стабильность данных DATA в течение не менее 5 мкс до перевода CLOCK из единицы в ноль (t3) и не менее 5 мкс после перевода CLOCK из нуля в единицу (t4). Более подробно протокол обмена устройство - хост можно посмотреть в [3] или, не так подробно, в [1]. Сигналы в линиях интерфейса PS/2 при передаче данных из хоста в устройство изображены на рис.3(файл RIS3.BMP). Чтобы начать передачу данных в устройство (вспомним, что синхроимпульсы всегда формирует устройство), хост переводит линию CLOCK в ноль и удерживает ее в этом состоянии не менее чем 100 мкс. Затем хост переводит DATA в ноль и снимает удержание CLOCK, формируя, тем самым, состояние "host request-to-send" (вольный перевод по смыслу: "требую приема"). Обнаружив это состояние шины, устройство формирует 11 импульсов для приема данных из хоста. Хост производит смену состояния DATA, пока CLOCK находится в нуле. Устройство должно принять данные, пока CLOCK находится в состоянии единицы. Хост может прекратить передачу в любой момент до 11-ого импульса, переведя линию CLOCK в ноль и удерживая ее не менее чем 100 мкс. После 10-ого импульса, устройство проверяет уровень стоп-бита (логическая единица). Если все нормально, устройство переводит DATA в ноль ("line control bit") и формирует 11-ый импульс. После этого хост может перевести CLOCK в ноль для предотвращения передачи новых данных. Если устройство обнаружило ноль на DATA во время приема стоп-бита, то фиксируется факт ошибки и устройство продолжает формировать импульсы CLOCK до обнаружения DATA равного единице. Временные параметры к рис.3(файл RIS3.BMP): длительность нуля (t6) и единицы (t7) тактового сигнала CLOCK может составлять от 30 до 50 мкс (используемая автором мышь выдавала длительности по 40 мкс). Хост должен гарантировать истинность данных DATA не менее чем за 1 мкс до перевода CLOCK из нуля в единицу (t8) и может менять данные сразу (не менее 0 мкс) после перевода CLOCK из единицы в ноль (t9). Устройство должно выставить бит "line control" не менее чем за 5 мкс до перевода CLOCK из единицы в ноль (t10) и снять его не более чем через 5 мкс после перевода CLOCK из нуля в единицу (t11). Более подробно протокол обмена хост - устройство можно посмотреть в [3].

Интерфейс PS/2. Команды управления мышью.

Перечень команд, посылаемых с хоста устройству, приведен в таблице 1 (лист из файла - Таблицы к PS2.xls). После подачи питания на устройство (или получения команды "Reset"), устройство проводит самодиагностику (BAT (Basic Assurance Test)) и устанавливает следующий режим своей работы: дискретизация - 100 отсчетов в секунду, разрешение - 4 отсчета на мм, масштабирование 1:1 и переходит в режим запрета передачи данных (ждет команд от хоста). В случае успешного окончания BAT устройство посылает код 0AAh ("BAT successful"), в случае ошибки - код 0FCh ("Error"). Вслед за кодом результата BAT, устройство посылает свой ID (для мыши 0), по ID распознается мышь, клавиатура или другое расширение (например, 3 - Intellimouse). Практика показывает, что необходимое время на получение ответа о результатах BAT составляет до 500 мс. Наиболее "популярные" команды управления мышью требуют некоторого пояснения, дадим комментарии к некоторым командам.

Enable Data Reporting (или просто Enable) (0F4h) - необходима для перевода мыши в потоковый (Stream mode) режим (основной режим работы мыши с компьютером) после подачи питания или "сброса" мыши. После подачи команды мышь выдает данные в указанном ниже формате при возникновении любого события (смещение мыши, нажатие или отпускание клавиши и т.д. - далее событие). Максимальная частота передачи пакетов данных определяется командой Set Sample Rate.

Set Sample Rate (0F3h) - удобная команда для настройки работы мыши. Например, если нам требуется быстрая реакция на событие, то имеет смысл увеличить частоту дискретизации, тем самым мышь быстрее прореагирует на свершившееся. Вместе с тем путь мыши за период дискретизации будет меньшим и гарантированно не произойдет переполнение координатных счетчиков. (Пример: 100 отсчетов в секунду, 4 отсчета на мм, 1:1: при перемещении мыши на 10 см счетчик сделает 10 * 10 * 4 = 400 отсчетов, т.е переполнение произойдет на 255 отсчете (около 7 см), если такое перемещение уложится в один период дискретизации (10 мс). Отсюда: в данном режиме максимальная скорость "махания" мышью 7см / 10мс = 7 м/с). Но, с другой стороны, при высокой частоте дискретизации возрастает нагрузка на контроллер хоста, т.к. ему чаще придется "отвлекаться" на обработку "мышиных" данных. Microsoft "придумала" использовать данную команду для переключения мыши в режим работы с колесом прокрутки и дополнительными кнопками (Microsoft Intellimouse extension).

Set Resolution (0E8h) - так же очень удобная команда для настройки работы мыши. В паре с предыдущей командой позволяет управлять скоростью работы с мышью и регулировать нагрузку на контроллер хоста. При меньшем значении разрешения требуется более длинный путь мыши для достижения требуемого значения счетчика.

Set Scaling 2:1 (0E7h) - вместе с двумя предыдущими командами позволяет оптимально отрегулировать поведение мыши как регулятора. В данном режиме мышь меняет свою реакцию на перемещение. При малом перемещении (до 3 отсчетов, т.е. 3 мм при разрешении 1 отсчет на мм), мышь передает хосту даже меньшее значение, чем в обычном режиме. Но при больших смещениях передаваемое значение счетчика наоборот удваивается по сравнению с реальным значением отсчетов. Т.е. перемещение идет как бы с ускорением. Реально мышь трансформирует отсчеты следующим образом: 0 - 0, 1 - 1, 2 - 1, 3 - 3, 4 - 6, 5 - 9, далее идет удвоение отсчетов [4]. Необходимо отметить, что если мышь находится в потоковом (Stream mode) режиме, то до подачи любой команды, хост должен запретить вывод данных (0F5h - Disable Data Reporting). Устройство подтверждает получение каждой команды хоста (в т.ч. и второго байта команды) байтом подтверждения 0FAh. В случае ошибки приема, устройство посылает байт 0FEh (повторить "Resend"), либо 0FCh (ошибка "Error"), подробнее в [3,4]. Формат принимаемого пакета данных от стандартной PS/2 мыши (3 байта) приведен в таблице 2(лист из файла - Таблицы к PS2.xls). Назначение байтов и битов пакета ясно из таблицы и хорошо описано в любом из приведенных литературных источников. При наличии у мыши колеса прокрутки, скорей всего, она поддерживает расширение Microsoft Intellimouse. В этом случае, после включения расширения, к 3 байтам пакета данных стандартной мыши добавляется четвертый байт, передаваемый устройством. В нем передается значение Z счетчика колеса прокрутки (Scroll) и состояние двух дополнительных (четвертой и пятой) кнопок мыши (если они есть). В качестве примера обмена командами хоста и устройства в таблице 3 (лист из файла - Таблицы к PS2.xls) приведен протокол начала работы (после подачи питания) описанной ниже MIDI-клавиатуры.

Пример использования мыши: регуляторы для MIDI-клавиатуры.

В качестве практического примера использования стандартной компьютерной мыши с интерфейсом PS/2, рассмотрим вариант реализации двух регуляторов для простой MIDI-клавиатуры, описанной в предыдущей статье. Принципиальная схема дополнительных цепей для подключения разъема PS/2 показана на рис.4(файл RIS4.BMP) (полная схема доработанной MIDI-клавиатуры тут). Для простоты, остальные цепи, подключенные к микроконтроллеру DD1, на схеме не показаны. Протокол взаимодействия с мышью PS/2 реализован программно. Линия CLOCK интерфейса подключена к входу INT0 микроконтроллера. Обработка прерывания по входу вызывается срезом входного сигнала. Быстродействия микроконтроллера AT89C51 при частоте кварцевого резонатора 12МГц оказалось достаточно для отработки прерываний по сигналу CLOCK с периодом следования импульсов 80 мкс. Запаса быстродействия хватает для считывания бита данных (DATA) при приеме информации из устройства (мыши) и формирования данных на линии DATA при передаче из хоста. Процедура обработки прерывания накапливает байт данных при приеме и помещает его в буфер, для дальнейшей обработки в основном цикле программы. При передаче данных эта процедура производит побитный вывод данных из буфера.

После включения питания программа микроконтроллера клавиатуры производит настройку мыши: максимальная частота передачи пакетов данных - 20 раз в секунду, разрешение - 2 отсчета на мм, потоковый режим (протокол обмена приведен в таблице 3). При настройке мыши, производится анализ времени поступления подтверждения и наличия сигнала CLOCK. При превышении допустимого значения (около 5 сек), контроллер ставит признак отсутствия мыши в системе и в дальнейшем не обслуживает интерфейс PS/2.

В программе реализован алгоритм регулировки скорости нажатия (громкости) музыкальных клавиш перемещением мыши по оси Y (вверх-вниз). Настройки выбраны так что изменение громкости от минимума до максимума вызывается перемещением мыши по вертикали на 10-15 см. Регулировка громкости осуществляется только при нажатой правой кнопке мыши. Для контроля текущего уровня громкости в клавиатуру добавлен анализ кнопки S72 (пересечение линий P0.6 и P3.6). При нажатии на нее, светодиодный индикатор отображает уровень громкости звучания ноты.

Перемещение мыши по горизонтальной оси (X) передается по MIDI-интерфейсу командами положения колеса (0Enh). Команды формируются только при нажатой левой кнопке мыши, при этом движение вправо вызывает увеличение высоты тона, влево - ее уменьшение. Нажатие средней кнопки мыши вызывает "сброс колеса" в нейтральное положение. Оба регулятора имеют ограничение формируемого кода по достижении крайних значений (отсутствует переполнение счетчиков). Коды модернизированной программы приведены в таблице 4(файл MDM221.HEX). (Текст программы - в таблице 5 - (файл - mdm221.asm)). Конструктивно, дополнительные элементы (два резистора), распаяны на плате микроконтроллера.

подключение мыши

Разъем интерфейса PS/2 для подключения мыши вместе с шлейфом взят из комплекта шлейфов для старых материнских плат форм-фактора АТ (рис.5) (фото P3160009.JPG или P3160010.JPG).

Выводы.

Представленная в статье информация поможет радиолюбителям в решении двух противоположных задач. Первая, очевидная: неплохое (и, что не маловажно, очень дешевое) устройство - компьютерная мышь PS/2 (это удобнее чем СОМ) найдет свое применение в различных конструкциях в качестве регуляторов (например, регулировка громкости, тембра, частоты и т.п.). Конечно, при реализации такого регулятора будет необходим какой-либо индикатор состояния регулируемого параметра, эта простая задача может быть реализована любым доступным способом. Вторая задача, не вполне очевидная, обратная первой: мы имеем еще один интерфейс для ввода данных в компьютер. Радиолюбитель может реализовать эмулятор мыши, и, с помощью его, осуществлять ввод данных в компьютер. В [2] приведено достаточно сведений для реализации программного интерфейса, правда, в среде MS-DOS. Для примера: открываем графический редактор, запускаем наше устройство, например анализатор сигналов с выходом PS/2, и видим, как на экране рисуется анализируемый сигнал… Как отмечается в [4] для реализации второй задачи наше устройство - эмулятор мыши должно, как минимум, соблюдать следующие правила: " Никогда не посылать данные, если CLOCK в нуле. " Через 500 мс после подачи питания сформировать 0AAh и 0. " Ждать, когда хост передаст команду 0F4h (Enable) и только после этого посылать свои данные. " Эмулировать трехбайтные команды данных. " Правильно откликаться на команду 0FFh (Reset). " Выдавать правильный ID (0) на запрос хоста. " Корректно откликаться на запрос о статусе устройства (команда 0E9h (Status Request) подробно описана в [3,4]). " Выдавать подтверждение (0FAh) на все поступающие команды. В статье лишь вскользь было упомянуто о современных "мышках", имеющих одно или два колеса прокрутки и пять кнопок. Поддержка этих органов управления реализована в расширении Microsoft Intellimouse, описание которого, достаточное для практического применения, приведено в [4].

Список литературы:

1. Самарин А. Интерфейсы с клавиатурой. - http://www.platan.ru/shem/pdf/st44-50.pdf

2. Гудилин А.Е. Микропроцессорные устройства систем управления: Учебное пособие. - Челябинск: Изд. ЮУрГУ, 2005.-98 с. - www.lib.susu.ac.ru/ftd?base=SUSU&key=000305422&dtype=F&etype=.pdf

3. Synaptics TouchPad Interfacing Guide. - www.pronau.org.ua/edu/base/ACTS_KPI/EPASY/KP/my/ACF126.pdf

4. Adam Chapweske. The PS/2 Mouse Interface. - osdev.ru/docs/hardware/mouse/ps2interface.htm

Рисунки (имена файлов)

Рис.1. Контакты и сигналы разъема PS/2 (вид на "хвост мыши"). (RIS1.BMP)

Рис.2. Передача данных из устройства на хост. (RIS2.BMP)

Рис.3. Передача данных из хоста в устройство. (RIS3.BMP)

Рис.4. Подключение мыши PS/2 к микроконтроллеру MIDI-клавиатуры. (RIS4.BMP)

Рис.5. Вид на конструкцию MIDI-клавиатуры. (фото) (P3160009.JPG или P3160010.JPG)

Дополнительно в файле KB_MIPS.BMP приводится полная схема MIDI-клавиатуры.

Таблицы (имена файлов)

Таблица 1. Команды интерфейса мыши PS/2. (Таблицы к PS2.xls)

Таблица 2. Формат пакета данных передаваемых стандартной мышью PS/2. (Таблицы к PS2.xls)

Таблица 3. Протокол обмена командами: MIDI-клавиатура - мышь PS/2. (Таблицы к PS2.xls)

Таблица 4. Коды программы MIDI-клавиатуры. (MDM221.HEX)

Таблица 5. Текст программы на ассемблере MCS-51 MIDI-клавиатуры. (mdm221.asm)

 

Статья отослана в редакцию жкрнала "Радио" в феврале 2008 года,

Статья опубликована в журнале в апреле 2009 года,

Статья размещена на этом сайте 8 августа 2009года

 

 
Сайт создан в системе uCoz