PS2 мыши и компьютерных BASIC Stamp
Colin Fahey
1. Введение
Эта статья описывает, как PS/2 мыши может быть примером для BASIC Stamp компьютера.
Это исследование носит неформальный.

Интерьер старого стиля (перемещение мяча) компьютерной мыши: «Microsoft Intellimouse» (Я заменил оптических датчиков, с длинными проводами.)
Мышь имеет две оси: «X» и «Y». Когда мышь перемещается «по горизонтали,» «X» внутри колеса мыши по очереди. Когда мышь перемещается «по вертикали» (на поверхности), «Y» внутри колеса мыши по очереди. Для произвольного движения мыши, «X» и «Y» колесах двигаться по «горизонтальной» и «вертикальной» компоненты движения мыши.

Оптические interruptor внутри колеса мыши
Уведомление дырки в колесах внутри мыши. Когда колесо вращается, инфра-красный (IR) света, излучаемого IR светоизлучающая Diode (LED) прерывается неоднократно, на курс пропорциональна ставке вращения колеса. Таким образом, мышь знает, сколько «повышений» (называемый также «клещей)» мыши оси переехал в тот или иной период времени.
Определяя направление движения предполагает использование 2 легких датчиков, расположенных очень близко друг к другу, а параллельно оси перемещения колеса. (Оба эти датчики в одном 3-контактный разъем компонент показано ниже.)

Мышь IR датчик света (имеет два IR детекторов в одном пакете)
Контактный центр в пакет позитивных коллекционер напряжения;
Левое и правое булавки левый и правый датчик производства излучателей.
Давайте название сенсоров в два пакета «A» и «B». Предположим, колеса первоначально на угол вращения такова, что IR свет блокируется от достижения обеих датчиков.
Как и колесо вращается, IR свет от излучателя в конечном итоге будут способны проходить через отверстие в колесе и достижения одного из двух датчиков, например датчик «A». Если колесо продолжает вращающейся в одном направлении, в конечном итоге второй датчик, «B», сможет получил IR свете. Если колесо продолжает вращающейся в одном направлении, в конечном итоге IR света будет заблокирован добраться до датчика «A». Если колесо продолжает вращающейся в одном направлении, в конечном итоге IR света будет заблокирован добраться до датчика «B».
Таким образом, последовательность:
(A,B): ..., (0,0), (1,0), (1,1), (0,1), ...
Если колесо вращается в противоположном направлении, 4-последовательность показано выше, будет обращена вспять, начиная с нынешнего статуса.
Что эти два датчика сигналов мы можем определить уровень ротации, а направлении.

Монтажной плате из Microsoft Intellimouse
Для того чтобы понять больше о том, как мышь схема интерпретирует датчики света и общается с персональным компьютером (PC) (через PS/2 сигналы), я изучал монтажной плате.
Микрочип имеет следующее название напечатаны на него: SPCP05A.
Поиск в Интернете на слово «SPCP05A» свидетельствует о том, что чип производства компании «Sunplus Technology Co.». Информация о «SPCP05A» микрочип может быть приобретено от этой компании.
Ниже приведены технические характеристики «SPCP05A» микрочип:
Следующее изображение показывает сигналы колья «SPCP05A (PS/2 3D mouse)» микрочипа.

Сигналах колья «SPCP05A (PS/2 3D mouse)» микрочип
«SPCP05A» действительно крошечные компьютера! Она инструкцией установлен, и RAM и ROM, а также внутренние таймеры и т.д. В самом деле, описание «SPCP05A» микрочип в информации, предоставленной Sunplus Co. вряд ли относится к конкретным использованием микрочипа для «компьютерной мыши» цепей. Этот чип имеет универсальный микроконтроллер.
Я изучал цепи следов на монтажной плате из Microsoft Intellimouse сформировать следующие примерные схематично:

Примерная схему Microsoft Intellimouse (Я пропавших без вести несколько конденсаторов, но это схематическое почти совершенен.)
Bui Van Chu, в Австралии, прочтите мою статью и послал мне более полные Схема, которая появляется в следующую картинку.

PS/2 мыши схематично, отправленные на меня Bui Van Chu из Австралии
Схема очень проста.
Кнопки мыши (слева, в центре, справа) перейти непосредственно к затратам на микрочип.
Три пары легких датчиков ((«X», «Y», «Z»), (для горизонтального перемещения, вертикального движения, и средним колесико мыши)) посылают сигналы непосредственно на другие материалы по чип.
PS/2 сигналы DATA и CLK (часы), также соответствуют I/O сигналов на чипе.
Я поняла схематически, как только я закончил используя его (с помощью следов на монтажной плате).
Одна вещь, я не понимаю, первоначально был путь IR LEDs были подключены к микрочип (16 контактный разъем: «PB1»), вместо их негативные терминалы (катод), лишь будучи подключенным непосредственно на местах. Это важно!
2. Моя первая попытка контролировать движение мыши
Следующие замечания касаются движение вдоль одной оси (как, например, «X», или горизонтально, ось).
Первым делом я попытался движется объект между IR LED и сенсор пара - для моделирования воздействия вращающееся колесо внутри мыши. Это работает. Я мог бы привести курсор мыши двигаться вокруг экрана путем простого перемещения через препятствие IR световой луч многократно, в одном направлении.
Далее, я удалены 3-контактный датчик часть из мыши монтажной плате, и придает проводов к печатной платы вместо датчика. Я вручную подключен провод к позитивным напряжения для имитации датчик активности. Я подключен два сигнала на питание в соответствии со следующей схемой (например, что представляет «0» «отключена,» и представляет «по» «1»):
(0,0), (1,0), (1,1), (0,1), ...
Это работает. Я мог бы переместить курсор мыши на экране этого утомительного подключения и отключения проводов в схеме показано выше. Реверсивные модели из текущего состояния в последовательности будет двигаться курсор в противоположном направлении.
Потому что вещи шли так хорошо, я решил подключить провода к реле (контролируется RS-232). Это позволит существенно позвольте мне делать именно то, что я сделал с рыхлой проводов: подключение датчика сигналов к мощности терминала в соответствующей последовательности. Единственное различие было бы то, что человека (меня) не придется делать утомительным, подключению и отключением.
... Но она не работает!
После много корректировки резисторы и конденсаторы и т.д., я сделал странное открытие: Если бы я был касаясь некоторых терминалов в цепи, она работала прекрасно! Решение этой тайной, содержится в следующем разделе.
3. Инфра-красный свет (IR) должны быть модуляцией
Спустя некоторое разочарование экспериментов я имел новые мысли: В свете IR может быть импульсной на высоких частотах, и чип может рассчитывать на получение этой частоты. Константа света (или имитировать мой постоянный выход датчика) может быть отказано. Я был несколько озадачены тем, что освещенности от галогенной лампы слово является приемлемым, но я знал, что даже лампы накаливания имеют обнаружению модуляции.
Я попытался импульсной IR LED на высоких частотах и блокирования датчиков согласно схеме ожидается. Она работала!
Это было его! IR LEDs в мышь монтажной плате должны быть в мигающем режиме с высокой скоростью, а микрочип должны ожидать этого в мигающем режиме в дополнение к относительно низкой ставке света перерыва на вращающееся колесо (с отверстиями).
К импульсной IR LEDs, и рассчитывая в этой импульсной разблокировали датчик выходного сигнала, чип может отклонить любую окружающего IR сигналы от проблем с мышью операции. Например, бродячих свет от друга (константа) IR источников не будет interefere с мышью.
Я подключен к усилителю аудио выход датчика, и тогда я не говоря датчик принять в освещенности, поданных мое слово галогенные лампы. Я слышал различные тона (60 Hz). Когда я серым цветом лампа, тон вырос слабо, и, наконец, прекратились, когда свет был удалиться. Таким образом, этот датчик легко забирает 60 Hz модуляции в колбы лампы накаливания моей галогенные лампы слово!
Оглядываясь сейчас на схему PS/2 мыши монтажной плате, значение IR LEDs будучи подключенным к штифта на микрочип (а не для постоянного тока) очевидна. Микрочип контролирует мигание IR LEDs через I/O штифта, а микрочип можно соотнести свое намерение флэш ID LEDs с датчиков, полученные материалы и, таким образом, отвергаем любые бродячих сигналов (из-за не являющихся IR мигания света). (Однако, корреляция не является необходимым. Обнаружения Просто минимальное количество мигающих учет может быть порог для приема входных датчиков.)
4. IR датчиков с bandpass фильтры
Вы можете найти специальные датчики IR, упакованные в транзистор-как форма с тремя клиенты, которые «настроены» на конкретные модуляцией IR свете частот (например, 38 kHz).

Настроенное IR свет датчика (максимальная чувствительность к 38 kHz модуляции света)
Bandpass схема содержится в устройстве, наряду с IR фото-транзисторов.
Итак, IR LED может быть, пульсирующие на частоте 38 kHz тем, что датчик будет получать свет и пусть электрического сигнала перейти на датчике мероприятий.
Чтобы передать информацию, свет от IR LED может быть прерван на сравнительно низкий уровень (например, от 1 до 100 раз в секунду). Этот НЧ-импульсной это в сочетании с постоянным высокочастотной импульсной, т.е. НЧ-импульсной можно рассматривать в качестве модулирующего высокочастотной импульсной. Высокочастотной импульсной это как «перевозчик волны,» на которых информация сигнала (относительно малой частотной модуляции) производится.
Тем не менее, я удостоверился в том, что IR датчиками Microsoft Intellimouse не имеют такой модуляции фильтра. Однако, схема вовсе требуют, чтобы IR свет изменяется определенным образом, в дополнение к низкой частоты перерывов света колесо с отверстиями.
Следующий рисунок иллюстрирует разницу в датчике сигналов постоянного IR LED светом и мигающим IR LED свет для разных этапов поворотным колесом мыши.

Датчик выходных сигналов для постоянного IR свете дела и мигания света IR дела.
5. Имитация ввода с помощью мыши BASIC Stamp компьютер
«BASIC Stamp 2» компьютер обладает достаточным перепрограммирования для осуществления PS/2 протокола. Таким образом, «BASIC Stamp 2» компьютер может быть подключен напрямую к PS/2 порту персонального компьютера (PC) и может эмулировать PS/2 мыши или клавиатуры.
5.1 PS/2 протокола
В годы 1998 через 2003, большинство персональных компьютеров были PS/2 порты для мыши и клавиатуры.
PS/2 порт 4 сигналов: (1) CLOCK; (2) DATA; (3) +5V; (4) GROUND.
PS/2 порт для устройств позволяет передавать данные на хост, а хост может отправлять данные устройства. Все стороны по PS/2 порта (обычно это просто устройство и хост) должны разделять сигналы и должны обнаружить, если другая сторона в настоящее время с помощью сигналов.
Как может быть разделяет сигналы? Сигнала (например, CLOCK или DATA), как правило, «плавающие» высока, что означает, что сигнал связан с позитивным напряжение через резистор с высокой устойчивостью (например, 4 kilo-Ohms). Таким образом, сигнал интерпретируется как логический «высокий» всеми участниками прослушивания. Любая сторона может тянуть линию низком уровне (через TTL логике), когда сторона намерена направить данные. Когда участник заканчивает отправки пакетов, она позволяет перейти от сигналов на неопределенный срок, с тем чтобы они поплавок высокой снова.
Для передачи данных от устройства (например, мыши или клавиатуры) для персонального компьютера (PC), вы должны передавать данные в 11-битных пакетов, состоящий из следующих разрядов: (1) начала немного («0»); (2) 8 бит данных (LSB в первую очередь); (3) бит паритета «(нечетный» паритет); (4) стоповый бит «(1).» Заметим, что «нечетный паритет,» когда общее число битов в «1» бит данных и бит паритета в сочетании это нечетное число.
Следующая диаграмма показывает передачи одного пакета данных:

PS/2 протокол: устройство для принимающей (PC) пакет
DATA строка должна быть настроена на надлежащее значение до чего CLOCK линия на низком уровне. DATA ценности должны оставаться до тех пор, пока набор CLOCK линия вернулась к высоким. Когда CLOCK линия утверждена остается высоким, DATA значение может быть изменено на следующий битное значение.
Типичные часы скорость относительно медленно, примерно 10 kHz к 17 kHz. То есть 100 мкс до 70 мкс для каждого часового периода.
Сценарий пребывания (PC) отправки данных в устройство аналогичное устройство для передачи данных на хост, но во всех случаях устройство контроля CLOCK сигнал во время передачи данных сама. Кроме того, бит данных, отправляемые с хоста (после настройки устройства CLOCK низкий) должно быть закрытия, когда устройство позволяет CLOCK сигнал сделать переход к высоким.
Для поиска в сети Интернет позволит выявить много описаний PS/2 сигналов, а также сведения о протоколе.
5.2 PS/2 мыши пакетов данных
Когда компьютер загружается, операционной системы и в конечном итоге начинает общается с мышкой, чтобы определить тип мыши. По умолчанию мыши мая вести себя как общие PS/2 мыши. Однако, если операционная система определяет, что мышь действительно «3D PS/2» мыши (например, мыши с колесом), то могу сказать, мыши, чтобы изменить к 3D PS/2 мыши протокола.
Когда вы перемещаете мышь, или пресс-релиз или кнопки мыши, мышь схема отправляет данные на хост (PC), указав, что состояние изменения произошли с момента предыдущего состояния указания.
Общий PS/2 мышь посылает следующих трех пакетов на хост:
------------------------
D7 D6 D5 D4 D3 D2 D1 D0 (The D0 bit (LSB) is sent first)
------------------------
(1) YV XV YS XS 1 0 R L (overflow, sign, buttons)
(2) X7 X6 X5 X4 X3 X2 X1 X0 (X movement; -128 to +127)
(3) Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 (Y movement; -128 to +127)
L = Left Button State (1 = pressed down)
R = Right Button State (1 = pressed down)
XS = Direction of X movement (1 = LEFT)
YS = Direction of Y movement (1 = UP)
XV = Overflow of X movement value (1 = X overflow occured)
YV = Overflow of Y movement value (1 = Y overflow occured)
X7,...,X0 : X movement; 8-bit 2's-complement signed byte (-128 to +127)
Y7,...,Y0 : Y movement; 8-bit 2's-complement signed byte (-128 to +127)
Here are examples of data sent to the host (PC):
------------------------------------------------
(The least-significant bit of each data byte is sent first.)
Move Left 1 unit : 0x18, 0xFF, 0x00
Move Right 1 unit : 0x08, 0x01, 0x00
Move Down 1 unit : 0x28, 0x00, 0xFF
Move Up 1 unit : 0x08, 0x00, 0x01
Press Left Button : 0x09, 0x00, 0x00
Release Left Button : 0x08, 0x00, 0x00
Press Right Button : 0x0C, 0x00, 0x00
Release Right Button : 0x08, 0x00, 0x00
Она является очень распространенным иметь «3D PS/2» мыши (например, с колесом мыши, которая также выступает в качестве средней кнопки). Такие мыши четыре отправляет данные пакеты на хост (PC).
------------------------
D7 D6 D5 D4 D3 D2 D1 D0 (The D0 bit (LSB) is sent first)
------------------------
(1) YV XV YS XS 1 M R L (overflow, sign, buttons)
(2) X7 X6 X5 X4 X3 X2 X1 X0 (X movement; -128 to +127)
(3) Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 (Y movement; -128 to +127)
(4) Z7 Z6 Z5 Z4 Z3 Z2 Z1 Z0 (Z movement; -128 to +127)
This is very similar to the generic PS/2 mouse,
with a few additions:
M = Middle Button State (1 = pressed down)
Z7,...,Z0 : Mouse wheel movement; 8-bit 2's-complement signed byte
(The Z value is forced to a range of -8 to +7)
5.3 Моя первая схема для моделирования PS/2 мыши
Следующий схематический был мой первый рабочий метод получить свой компьютер «BASIC Stamp 2» отправить PS/2 мышь данных для принимающей (PC).

Схема замыкания чтобы BASIC Stamp компьютера послать PS/2 пакеты на хост (PC).
Заметим, что эта схема электрически изолирует BASIC Stamp мой компьютер от принимающей (PC) компьютера. Имейте также в виду, что эта схема является лишь для удовлетворения потребностей электрических PS/2 передачи данных (с устройством для хост). Таким образом, я могу послать PS/2 клавиатура сообщения с использованием этой же схеме, если я подключиться к PS/2 клавиатуры порт на хост (PC)!
После получения сигналов обычно неинвазивным (то есть слушать не вмешивается в электрические сигналы), единственное, что требуется разрешить «BASIC Stamp» компьютера получать PS/2 CLOCK и DATA сигналов является прямое соединение от этих сигналов в другие BASIC Stamp I/O Булавки (быть настроен на материалы). Я бы попробовать какой-буферизации, - но я определенно не могу использовать опто-изолятор напрямую, поскольку это поставит нагрузка на «плавучих» сигналов (и, таким образом «тонущего» них!). Я мог бы использовать +5V к власти буфер, а затем затем использовать буфер вывода на диске опто-изоляторах, что в конечном итоге послать сигналы BASIC Stamp I/O Пен (в настройках в качестве сырья).
Следующее изображение показывает мой BASIC Stamp 2 компьютера, подключенного к цепи, соответствующие схематический выше.

BASIC Stamp 2 компьютера, подключенного к PS/2 мыши через порт оптико-изолятор цепи.
BASIC Stamp 2 следующие программы, написанный на языке программирования PBASIC, была моя первая успешная попытка контроля PS/2 мыши через BASIC Stamp 2 компьютера.
Программа позволяет просто переместить курсор мыши по диагонали небольшой линии.
'====================================================================
'{$STAMP BS2} 'STAMP directive (specifies a BS2)
DIR0 = %1 'Set pin 0 to OUTPUT
DIR1 = %1 'Set pin 1 to OUTPUT
OUT0 = %0 'Set DATA line high (pin low)
OUT1 = %0 'Set CLOCK line high (pin low)
tempData VAR BYTE
tempParity VAR BYTE
'--------------------------------------------------------------------
MainLoop:
tempCounter VAR WORD
FOR tempCounter = 0 TO 10
tempData = $28
GOSUB TransmitPacket
tempData = $01
GOSUB TransmitPacket
tempData = $ff
GOSUB TransmitPacket
tempData = $00
GOSUB TransmitPacket
PAUSE 100
NEXT
FOR tempCounter = 0 TO 10
tempData = $18
GOSUB TransmitPacket
tempData = $ff
GOSUB TransmitPacket
tempData = $01
GOSUB TransmitPacket
tempData = $00
GOSUB TransmitPacket
PAUSE 100
NEXT
GOTO MainLoop
STOP
'--------------------------------------------------------------------
TransmitPacket:
GOSUB ComputeParity 'First, compute parity
tempData = ~tempData 'Invert data bits
tempParity = ~tempParity 'Invert parity bit
'==== Start Bit ====
OUT0 = %1 'Set data line low (output high)
PULSOUT 1, 25 ' Pulse line 1 for (25*2) = 50 usec
'==== Data Bits ====
OUT0 = tempData.BIT0
PULSOUT 1, 25
OUT0 = tempData.BIT1
PULSOUT 1, 25
OUT0 = tempData.BIT2
PULSOUT 1, 25
OUT0 = tempData.BIT3
PULSOUT 1, 25
OUT0 = tempData.BIT4
PULSOUT 1, 25
OUT0 = tempData.BIT5
PULSOUT 1, 25
OUT0 = tempData.BIT6
PULSOUT 1, 25
OUT0 = tempData.BIT7
PULSOUT 1, 25
'==== Parity Bit ====
OUT0 = tempParity.BIT0
PULSOUT 1, 25
'==== Stop Bit (high) ====
OUT0 = %0 ' pin low is DATA high
PULSOUT 1, 25
PAUSE 1 ' Necessary? Provides 1 msec gap between packets...
RETURN
'--------------------------------------------------------------------
ComputeParity:
tempParity = $01
tempParity = tempParity + tempData.BIT0
tempParity = tempParity + tempData.BIT1
tempParity = tempParity + tempData.BIT2
tempParity = tempParity + tempData.BIT3
tempParity = tempParity + tempData.BIT4
tempParity = tempParity + tempData.BIT5
tempParity = tempParity + tempData.BIT6
tempParity = tempParity + tempData.BIT7
tempParity = tempParity & $01
RETURN
'====================================================================
Эта программа работает отлично. Я пусть он баллотироваться на часы, и она безупречно сделал переместить курсор мыши между двумя строго определенных местах на экране. Вот что я искал: точный контроль над мышкой, чтобы я мог взаимодействовать с программным обеспечением.
После поиска в Интернете я обнаружил, что кто-то другой, используемых BASIC Stamp компьютер интерфейс PS/2 (имитируя клавиатуру). Этот человек, используемых PBASIC инструкция SHIFTOUT для обработки CLOCK и DATA сигналы, что по-настоящему велик. Это сделает мой «TransmitPacket» подпрограмму гораздо короче, возможно, 5 строк кода в общей сложности!
Я также видел, что другие люди использовали TTL буферов, с использованием материалов, связанных непосредственно с PS/2 сигналов (CLOCK и DATA), а также мероприятий, связанных непосредственно к контакту микроконтроллера чипом. В той же схеме, выходной строки из микроконтроллеров пошел прямо к контактам на базе транзисторов, которые имеют свои коллекторы, подсоединенный непосредственно к PS/2 сигналов. Все это прямое соединение различных схем кажется плохой идеей ко мне, чтобы одна схема мальков других. Я не знаю, что я бы делать, если я жареных PS/2 порт, на мой PC. Купить новой материнской платы, я думаю! Поводом для обновления. Я не думаю, PS/2 порту материнской платы краха, скорее всего, но я мгновенно выключения моего компьютера, когда я случайно короткий circuited +5V и GROUND сигналы собираемся PS/2 мыши. Может быть, это функция! Я мог бы добавить новые кнопки мыши, что только короткого замыкания мыши мощности для мгновенного закрытия PC. ;-)
Вот ссылка на информацию, касающуюся использования SHIFTOUT для PS/2 протокола:
Посмотрите на следующую ссылку:
KEYBTST.ZIP gives a very basic program for the parallax
-----------
BASIC stamp II, to send key-codes to the PC's keyboard port.
It also gives a write-up of the XT and AT keyboard interfaces
(although IMO some details could be wrong / different to the
keyboards I've looked at).
Локально-сохраненной копии файла:
keybtst.zip
10655 bytes
MD5: c5667557f96db53fb878bd11bfbe4f74
Следующей ссылке дает дополнительную информацию о PS/2 мышь подключаются: