АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Интерфейсы манипуляторов

Читайте также:
  1. Назначение и типы манипуляторов.
  2. Шинные интерфейсы материнской платы

Устройство ввода мышь (mouse ) и трекбол. При вращение колёсика вместе с ним вращаются 2 валика которые вращаясь создают аналоговый сигнал который побитно отправляется в процессор для определения место положения мыши.

У оптической мыши миниатюрная камера «фотографирует» поверхность более тысячи раз в секунду, передавая побитно аналоговый сигнал процессору, который и делает выводы об изменении координат. Обычная конструкция имеет свободно вращающийся массивный обрезиненный шарик, передающий вращение на два координатных диска с фотоэлектрическими датчиками - две открытые оптопары (светодиод - фотодиод), в оптический канал которых входит вращающийся диск с прорезями. По интерфейсу с компьютером различают три основных вида мышей: Bus Mouse, Serial Mouse н PS/2-Mouse. Появились мыши с интерфейсом USB.

Первые мыши подключались к компьютерам x86 через последовательный коммуникационный интерфейс RS-232 (последовательные мыши) с разъёмом DB25F и, позднее, DB9F, и с помощью своего адаптера (шинные мыши англ. bus mouse). В 1990-х годах большинство выпускавшихся мышей имели последовательное подключение.

В компьютере PS/2 фирма IBM предусмотрела для мыши специальный порт с разъемом mini-DIN, точно таким же, как и для клавиатуры. Позднее разъёмы клавиатуры и мыши типа PS/2 были включены в современный стандарт материнских плат x86 — ATX. Такие мыши лидировали в продаже в период 2001—2007 гг. и используются до сих пор, постепенно уступая свои позиции интерфейсу USB.

Ещё одним интерфейсом, через который можно подключить мышь, является универсальный беспроводной радиоинтерфейс Bluetooth; он поддерживается на многих платформах.

Основная часть современных мышей имеет интерфейс USB, иногда — с адаптером для PS/2. Фирма Apple для своих компьютеров в настоящее время поставляет мыши только с интерфейсом Bluetooth, хотя возможно использование и мышей USB.

Последовательная мышь питается от провода DTR («готовность компьютера») разъёма RS-232 и имеет преимущество в виде возможности передавать отсчеты в компьютер с более высокой частотой — частота опроса USB мыши ограничена частотой фреймов шины USB, что для низкоскоростных устройств равна 1 КГц.

Bus Mouse (шинная мышь) - вариант, применявшийся в первых мышах. Содержит только датчики и кнопки; обработка их сигналов производится на специализированной плате адаптера. Мультипортовые карты (СОМ-, LPT- и GAME-порты), на которых установлен и адаптер Bus Mouse, встречаются редко. Кабель 9-проводный, разъем специальный (см. рис.1 и табл.1) хотя на первый взгляд напоминает разъем PS/2-Mouse.

Таблица 1.Разъём Bus Mouse

Рис.10. Разъем Bus Mouse.

Serial Mouse - мышь с последовательным интерфейсом, подключаемая через 25 или 9-штырьковый разъем СОМ-порта (табл. 2). Имеет встроенный микроконтроллер, который обрабатывает сигналы от координатных датчиков и кнопок. Каждое событие кодируется двоичной посылкой по интерфейсу RS-232C,а питание производится от интерфейса. Мышь с последовательным интерфейсом - Serial Mouse - может подключаться к любому исправному порту. Для согласования разъемов порта и мыши возможно применение переходника DB-9S-DB-25P или DR25S-DB-9P отвечают за нажатие правой средней клавиш и левой клавиш мыши. Для мыши требуется прерывание, для порти COM1 - IRQ4, для COM2 - IRQ3. Жесткая привязка номера IRQ к номеру порта обусловлена свойствами драйверов. Каждое событие - перемещение мыши или нажатие-отпускание кнопки - кодируется двоичной посылкой по интерфейсу RS-232C. Применяется асинхронная передача; двуполярное питание обеспечивается от управляющих линий интерфейса (табл. 2).

Таблица 2.Разъёмы Serial Mouse

Сигнал Контакт -

- DB-9 DB-25

Data 2 3

GND 5 7

+V (питание) 4,7 4,20

-V (питание) 3 9

Две разновидности Serial Mouse - MS-Mouse и РС-Mouse (Mouse Systems Mouse) - требуют соответствующих драйверов, многие мыши имеют переключатель MS/PC. Мышь с «чужим» драйвером либо не отзывается, либо «скачет» загадочным образом. Эти разновидности используют различные форматы посылок при одинаковой скорости 1200 бит/с, одном стоп-бите и отсутствии контроля четности Microsoft-Mouse использует 7 бит данных, а PC-Mouse; - 8 бит. Мышь посылает пакет при каждом изменении состояния - перемещении, нажатии или отпускании кнопки. Пакет, передаваемый MS-Mouse, состоит из трех байт (табл. 3). РС-Mouse передает 5 байт (табл. 4). Здесь LB (Left Buttom), MB (Middle Buttom) и RВ (Right Buttom) означают состояние левой, средней и правой кнопок, Х17:0] и Y[7:0] - биты относительного перемещения мыши с момента предыдущей посылки по координатам X и Y. Положительным значениям соответствует перемещение по координате X вправо, а по координате Y вниз для MS-Mouse и вверх для РС-Mouse. Отсюда становятся понятными беспорядочные перемещения курсора на экране при несоответствии драйвера типу мыши.

Таблица 3.Формат пакета MS-Mouse.Биты D6 D5 D4 D3 D2 D1 D0

1-й байт 1 LB RB Y7 Y6 Y7 Y6

2-й байт 0 X5 X4 X3 X2 X1 X0

3-й байт 0 Y5 Y4 Y3 Y2 Y1 Y0

Таблица 4.Формат пакета РС-Mouse (Mouse Systems Mouse).Биты D7 D6 D5 D4 D3 D2 D1 D0

1-й байт 1 0 0 0 0 LB MB RB

2-й байт X7 X6 X5 X4 X3 X2 X1 X0

3-й байт Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0

4-й байт Совпадает со 2-м байтом

5-й байт Совпадает со 3-м байтом

PS/2-Mouse - мышь, появившаяся с компьютерами PS/2. Ее интерфейс и 6-штырьковый DIN мини-разъем аналогичны клавиатурному (рис. 2). Адаптер и разъем PS/2-Mouse устанавливается на современных системных платах brand-namе. Контроллер такой мыши может входить и контроллер клавиатуры или занимать дополнительные адреса в пространстве ввода/вывода. Для PS/2-Mullse используется прерывание IRQI2. Управляющие контакты Здесь LB (Left Buttom), MB (Middle Buttom) и RВ (Right Buttom) означают состояние левой, средней и правой кнопок. Информационным соответствует перемещение по координате X вправо, а по координате Y вниз для MS-Mouse и вверх для РС-Mouse.

Рис.11. Разъем PS/2-Mouse

 

С интерфейсами Serial Mouse и PS/2-Mouse иногда возникают недоразумения. Хотя оба они последовательные, но имеют принципиальные различия в уровнях сигналов, способе синхронизации, частоте и формате посылок:

· Интерфейс PS/2 использует однополярный сигнал с уровнями ТТЛ, питание мыши - однополярное с напряжением +5 В относительно шины GND. Интерфейс RS-232C, применяемый в Serial Mouse, использует двухполярный сигнал (см. таблицу 2) с уровнями срабатывания +3B и -3 В, требует двухполярного питания.

· Синхронный интерфейс PS/2-Mouse использует две раздельные сигнальные линии, одну - для передачи данных, другую - для сигналов синхронизации. Serial Mouse использует асинхронный способ передачи данных по одной линии. Ясно, что совместимости между этими интерфейсами нет. Тем не менее, выпускаются и продаются переходники (пассивные!), позволяющие выбирать способ подключения мыши. Они предназначены только для универсальных (combo) мышей, у которых встроенный контроллер по напряжению питания способен распознать, к какому интерфейсу его подключили, и. установить соответствующий тип своего выходного интерфейса. Универсальные мыши не особо распространены, поэтому часто приходится слышать о неудачных попытках применения таких переходников к обычным Serial Mouse или PS/2-Mouse. Дополнительную путаницу вносят мыши для компьютеров Macintosh, которые имеют разъем, с виду напоминающий PS/2. Однако разъемы эти разные, да и интерфейс совершенно иной. Манипулятор трекбол (trackball) («шар») представляет собой перевернутую мышь, шарик которой вращают пальцами. Иногда встраивается в клавиатуру.

Тачпад

Пользователь кончиками пальцев водит по тачпаду. На поверхности тачпада вертикально и горизонтально располагаются электроды. Изоляционный слой защищает сетку из электродов от прямого контакта с пальцами. Когда пользователь слегка надавливает на электроды, переключательная схема, которая находится под сеткой, измеряет электрическую мощность между электродами. Электрическая мощность меняется при прикосновении. Данные измерений передаются на компьютер в виде цифровой информации. Так движение курсора на экране компьютера отображает движение пальцев. Положение курсора изменяется в зависимости от того, куда перемещается палец.

Легкий стук по тачпаду большинство приборов распознает как щелчок мыши. Чтобы передать двойной щелчок мыши, нужно стукнуть по тачпаду два раза подряд. Кнопки рядом с сенсорной панелью имеют те же функции, что и кнопки компьютерной мыши. Таким образом, для подачи команд вместо щелчков по тачпаду можно пользоваться соответствующими кнопками.

Тачпады последнего поколения оснащаются дополнительными функциями. К примеру, функция Multitouch (мультитач), благодаря которой через тачпад можно передавать на компьютер сразу несколько команд.

Джостик

Кнопки джойстика - это обычные переключатели (кстати, вам крупно повезло, ведь это легко могли быть зарядные, ионообменные управляемые магнитным полем подушечки). Для того чтобы узнать состояние переключателя, нам надо прочитать значение из определенного порта.

 

I/O порт 0х201h-игровой порт

Ъ————В———В———В———В———В———В———В———В

і X і X і X і X і X і X і X і X і

А——В—Б—В—Б—В—Б—В—Б——ВБ—В—Б—В—Б—В—Б

і і і і і і і і

і і і і і і і А——— 0 бит: Джойстик А ось х

і і і і і і і

і і і і і і А——————— 1 бит: Джойстик А ось у

і і і і і і

і і і і і А————————————2 бит: Джойстик В ось х

і і і і А———————————————3 бит: Джойстик В ось у

і і і А————————————————————4 бит: Джойстик А кнопка 1

і і А————————————————————————5 бит: Джойстик А кнопка 2

і А————————————————————————————6 бит: Джойстик В кнопка 1

А————————————————————————————————7 бит: Джойстик В кнопка 2

 

Раскладка битовых значений для порта джойстика.

Есть джойстики с множеством кнопок, например, Trustmaster. Несмотря ни на что, его работа ничем не отличается от других джойстиков, а состояние лишних кнопок можно прочитать через другие порты ввода/вывода. Эти порты обычно указываются производителем в соответствующей документации. Обычно, порт 201h - это то окно, через которое можно общаться с джойстиком. Как показано на рис.3.2, этот порт связан и с джойстиком А, и сджойстиком В. Мы узнаем назначение битов 0-3 чуть позже - в разделе "Чтение позиции джойстика". Биты 4-7 предназначены для чтения кнопок джойстика. Когда одна из кнопок нажата, то соответствующий бит порта 201h изменяется. Есть только одна маленькая деталь: эначения битов всегда инвертированы. Это значит, что если вы, например, жмете кнопку 1 на джойстике А, то бит 0 изменит значение с 1 на 0. Но в общем, это не особенно принципиально.

Листинг 3.1. Чтение кнопок джойстика.

#define JOYPORT // порт джойстика = 201h

#define BUTTON_1_A 0х10 // джойстик А, кнопка 1

#define BUTTON_1_B 0х20 // джойстик А, кнопка 2

#define BUTTON_2_A 0х40 // джойстик В, кнопка 1

#define BUTTON_2_B 0х80 // джойстик В, кнопка 2

#define JOYSTICK_1_X 0x01 // джойстик А, ось Х

#define JOYSTICK_1_Y 0x02 // джойстик А, ось У

#define JOYSTICK_2_X 0x04 // джойстик В, ось Х

#define JOYSTICK_2_Y 0x08 // джойстик В, ось У

#define JOY_1_CAL 1 // эта команда калибрует джойстик А

#define JOY_2_CAL 2 // эта команда калибрует джойстик В

unsigned char Buttons(unsigned char button)

{

// эта функция читает статус кнопок джойстика

// сбрасываем содержимое порта 201h

outp(JOYPORT,0);

// инвертируем прочитанное из порта значение и комбинируем

// его с маской

return(~inp(JOYPORT) & button);

}

unsigned char Buttons_Bios(unsigned char button)

{

// чтение кнопок через обращение к BIOS

union _REGS inregs, outregs;

inregs.h.ah = 0x84; // функция джойстика 84h

inregs.x.dx = 0x00; // подфункция 0h - чтение кнопок

// вызов BIOS

_int86(0x15,&inregs,&outregs);

// инвертируем полученное значение и комбинируем его с маской

return(~outregs.h.al) & button);

}

Теперь посмотрим на детали Листинга 3.1.

- Функция Buttons() и Buttons_Bios() возвращают одинаковый результат.

Buttons() посылает 0 в порт джойстика (это делается для того, чтобы инициировать порт) и затем читает данные;

- Как только данные получены, мы маскируем младшие 4 бита и инвертируем 4 старших;

- Этот листинг включает также определение констант (#define), что делает интерфейс более удобным;

- Buttons_Bios() для чтения джойстика использует BIOS. Как только выполняется вызов, результат помещается в регистр AL. В принципе, для таких простых вещей, как кнопки, я использую прямой доступ к портам. Я уже говорил, что использование функций BIOS более медлительно. Правда, по отношению к джойстику это, может быть, и не самый плохой подход.

Если вы хотите читать с помощью BIOS - читайте

Чтение позиции джойстика

Чтение позиции джойстика - весьма утомительная, но вполне выполнимая задача. Все, что нам надо сделать, это послать джойстику простую команду. Это делается записью значения 0 в порт 201h. Затем мы ждем, когда установится нужный нам бит (0-3) порта джойстика. Вовремя ожидания мы должны включить счетчик. Когда нужный бит установлен, то число, которое мы насчитаем, и есть позиция джойстика. Листинг 3.2 показывает код, которыйвсе это делает.

Листинг 3.2. Чтение позиции джойстика.

unsigned int Joystick(unsigned char stick)

{

_asm

{

cli; запретить прерывания

mov ah,byte ptr stick; замаскировать АН,

; чтобы выбрать джойстик

xor al,al; обнулить AL

xor cx,cx; обнулить CX

mov dx,JOYPORT; используем DX для ввода и вывода

out dx,al

discharge:

in al,dx; читаем данные из порта

test al,ah; изменился ли бит запроса?

loopne discharge; если нет, повторяем чтение

sti; разрешить прерывания

xor ax, ax; обнулить AX

sub ax,cx; теперь AX содержит позицию джойстика

} // конец ассемблерного блока

// возвращаемое значение содержится в AX

} // конец функции

(Кстати, встроенный ассемблер мне все больше и больше нравится.)

Программа достаточно проста:

- При запуске программа обнуляет регистры АХ и СХ;

- Затем программа опрашивает порт джойстика;

- Далее подсчитывается количесто циклов в ожидании, пока установится

нужный бит;

- Подсчет выполняется в регистре СХ с помощью инструкции LOOPXX (в данном

случае используется команда LOOPNE);

- Инструкция TEST определяет установку бита;

- Когда нужный бит установлен, программа выходит из цикла. Результат

передается вызывающей программе, в регистре АХ.

 

 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.013 сек.)