English  Español  Português  Français  Italiano  Deutsch  Nederlands  Svenska  Dansk  Suomi  Norsk  Русский  Polski  Română  Български  Hrvatski  Česky  中国  中國  日本語  한국어  Ελληνική  हिन्दी  العربية 
PS2 мыши и компьютерных BASIC Stamp
Colin Fahey

1. Введение

Эта статья описывает, как PS/2 мыши может быть примером для BASIC Stamp компьютера. 

Это исследование носит неформальный. 
ps2_mouse_interior.jpg
Интерьер старого стиля (перемещение мяча) компьютерной мыши: «Microsoft Intellimouse»  (Я заменил оптических датчиков, с длинными проводами.)
Мышь имеет две оси: «X» и «Y».  Когда мышь перемещается «по горизонтали,» «X» внутри колеса мыши по очереди.  Когда мышь перемещается «по вертикали» (на поверхности), «Y» внутри колеса мыши по очереди.  Для произвольного движения мыши, «X» и «Y» колесах двигаться по «горизонтальной» и «вертикальной» компоненты движения мыши. 
ps2_mouse_interruptor_wheels.jpg
Оптические interruptor внутри колеса мыши
Уведомление дырки в колесах внутри мыши.  Когда колесо вращается, инфра-красный (IR) света, излучаемого IR светоизлучающая Diode (LED) прерывается неоднократно, на курс пропорциональна ставке вращения колеса.  Таким образом, мышь знает, сколько «повышений» (называемый также «клещей)» мыши оси переехал в тот или иной период времени. 

Определяя направление движения предполагает использование 2 легких датчиков, расположенных очень близко друг к другу, а параллельно оси перемещения колеса.  (Оба эти датчики в одном 3-контактный разъем компонент показано ниже.) 
mouse_sensor01.jpg
Мышь IR датчик света (имеет два IR детекторов в одном пакете)
Контактный центр в пакет позитивных коллекционер напряжения; 
Левое и правое булавки левый и правый датчик производства излучателей. 

Давайте название сенсоров в два пакета «A» и «B».  Предположим, колеса первоначально на угол вращения такова, что IR свет блокируется от достижения обеих датчиков. 

Как и колесо вращается, IR свет от излучателя в конечном итоге будут способны проходить через отверстие в колесе и достижения одного из двух датчиков, например датчик «A».  Если колесо продолжает вращающейся в одном направлении, в конечном итоге второй датчик, «B», сможет получил IR свете.  Если колесо продолжает вращающейся в одном направлении, в конечном итоге IR света будет заблокирован добраться до датчика «A».  Если колесо продолжает вращающейся в одном направлении, в конечном итоге IR света будет заблокирован добраться до датчика «B». 

Таким образом, последовательность: 
(A,B):   ..., (0,0), (1,0), (1,1), (0,1), ...
Если колесо вращается в противоположном направлении, 4-последовательность показано выше, будет обращена вспять, начиная с нынешнего статуса.
Что эти два датчика сигналов мы можем определить уровень ротации, а направлении.
ps2_mouse_circuit_board.jpg
Монтажной плате из Microsoft Intellimouse
Для того чтобы понять больше о том, как мышь схема интерпретирует датчики света и общается с персональным компьютером (PC) (через PS/2 сигналы), я изучал монтажной плате. 

Микрочип имеет следующее название напечатаны на него: SPCP05A. 

Поиск в Интернете на слово «SPCP05A» свидетельствует о том, что чип производства компании «Sunplus Technology Co.».  Информация о «SPCP05A» микрочип может быть приобретено от этой компании. 

Ниже приведены технические характеристики «SPCP05A» микрочип: 
sunplus_ps2_3dmouse_datasheet.pdf
(Технические характеристики «SPCP05A» микрочип)
1125022 байт
MD5: 359a9210275e021cc19a5e2391499dc5
Следующее изображение показывает сигналы колья «SPCP05A (PS/2 3D mouse)» микрочипа.
spcp05a_chip_signals_bmp01.jpg
Сигналах колья «SPCP05A (PS/2 3D mouse)» микрочип
«SPCP05A» действительно крошечные компьютера!  Она инструкцией установлен, и RAM и ROM, а также внутренние таймеры и т.д.  В самом деле, описание «SPCP05A» микрочип в информации, предоставленной Sunplus Co.  вряд ли относится к конкретным использованием микрочипа для «компьютерной мыши» цепей.  Этот чип имеет универсальный микроконтроллер. 

Я изучал цепи следов на монтажной плате из Microsoft Intellimouse сформировать следующие примерные схематично:
ps2_mouse_my_schematic.jpg
Примерная схему Microsoft Intellimouse  (Я пропавших без вести несколько конденсаторов, но это схематическое почти совершенен.)
Bui Van Chu, в Австралии, прочтите мою статью и послал мне более полные Схема, которая появляется в следующую картинку.
ms_ps2_mouse_schematic.jpg
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). 
tuned_sensor01.jpg
Настроенное IR свет датчика (максимальная чувствительность к 38 kHz модуляции света)
Bandpass схема содержится в устройстве, наряду с IR фото-транзисторов. 

Итак, IR LED может быть, пульсирующие на частоте 38 kHz тем, что датчик будет получать свет и пусть электрического сигнала перейти на датчике мероприятий. 

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

Тем не менее, я удостоверился в том, что IR датчиками Microsoft Intellimouse не имеют такой модуляции фильтра.  Однако, схема вовсе требуют, чтобы IR свет изменяется определенным образом, в дополнение к низкой частоты перерывов света колесо с отверстиями. 

Следующий рисунок иллюстрирует разницу в датчике сигналов постоянного IR LED светом и мигающим IR LED свет для разных этапов поворотным колесом мыши.
ps2_mouse_quadrature_sketch.jpg
Датчик выходных сигналов для постоянного 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» бит данных и бит паритета в сочетании это нечетное число. 

Следующая диаграмма показывает передачи одного пакета данных: 
ps2_clock_data_dev2pc01_adj.jpg
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).
2002june03_basicstamp_to_ps2mouse_circuit.jpg
Схема замыкания чтобы 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 компьютера, подключенного к цепи, соответствующие схематический выше. 
2002june03_basicstamp_mousecircuit01_adj.jpg
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 протокола:
http://ourworld.compuserve.com/homepages/steve_lawther/keybinfo.htm
Посмотрите на следующую ссылку:
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 байт
MD5: c5667557f96db53fb878bd11bfbe4f74
Следующей ссылке дает дополнительную информацию о PS/2 мышь подключаются:
http://panda.cs.ndsu.nodak.edu/ ~ achapwes/PICmicro/PS2/ps2.htm
colinfahey.com
контактная информация
English  Español  Português  Français  Italiano  Deutsch  Nederlands  Svenska  Dansk  Suomi  Norsk  Русский  Polski  Română  Български  Hrvatski  Česky  中国  中國  日本語  한국어  Ελληνική  हिन्दी  العربية