Клавиатура
Клавиатура PC представляет собой унифицированное устройство со стандартным разъемом и последовательным интерфейсом связи с системной платой. В качестве датчиков нажатия клавиш применяют механические контакты (открытые или герконовые), кнопки на основе токопроводящей резины, емкостные датчики. Клавиатура содержит внутренний контроллер, выполненный обычно на микросхеме из семейства MCS-48 фирмы Intel, осуществляющий сканирование матрицы клавиш, управление индикаторами, внутреннюю диагностику и связь с системной платой последовательным интерфейсом по линиям KB-Data и KB-Clock.
Основных типа клавиатур:
1. Клавиатура XT - 83 клавиши, в оригинале без индикаторов. Впоследствии к ним добавили индикаторы состояния NumLock и CapsLock, управляемые внутренним контроллером по нажатию соответствующих клавиш.
2. Клавиатура AT- 84 клавиши, которая отличалась от XT появлением дополнительной клавиши SYSREQ и индикаторов Num Lock, Caps Lock, Scroll Lock.
3. Расширенная клавиатура (Enhanced) - 101/102 клавиши, применяемая в большинстве моделей AT и PS/2, ставшая современным стандартом. Некоторые расширенные клавиатуры (например, "Microsoft Natural") имеют 104 или 105 клавиш, появились и 122-клавишные модели.
Клавиши расширенной клавиатуры разделены на 4 группы:
- основная клавиатура;
- функциональная клавиатура;
- цифровая клавиатура (Numeric Keypad), при выключенном индикаторе NumLock (или включенном NUMLOCK и нажатии SHIFT) используемая для управления курсором и экраном;
- выделенные клавиши управления курсором и экраном, дублирующие эти функции цифровой клавиатуры.
Емкостные клавиатуры. Нижняя часть такой клавиатуры является одной большой обкладкой конденсатора. Клавиша нажимает на пружину, которая в свою очередь нажимает на толкатель. Толкатель передает усилие на емкостную ячейку. Емкостная ячейка посылает сигнал, который интерпретируется микропроцессом 8048, установленным в клавиатуре. Он пересылает идентификатор клавиши, называемый скан-кодом в ПК. ПК определяет, какая клавиша была нажата.
Интерфейс клавиатуры. Интерфейс клавиатуры ПЭВМ, начиная с AT, построен на контроллере i8042 (или на логически эквивалентном контроллере, интегрированным в микросхемы чипсета, обычно, в южный мост или аналогичный по назначению хаб) и обеспечивает двустороннюю связь с клавиатурой. Причем передача информации к клавиатуре используется для управления индикаторами ее состояния и программирования параметров (автоповтор, набор скан-кодов).
Клавиатура подключается к системному блоку одним из двух видов разъема: обычным 5-контактным (розеткой на системном блоке и вилкой на клавиатуре) DIN, применяемым и в бытовой радиоаппаратуре, или малогабаритным (розеткой на системном блоке) mini-DIN, появившимся в компьютерах семейства PS/2 и получившим аналогичное название. На этот же разъем через плавкий предохранитель поступает и напряжение питания клавиатуры +5 В. Вид разъемов со стороны системного блока и назначение контактов приведены на рисунок 1.46.
а - ХТ, АТ;
б - PS/2.
Рисунок 1.46 – Разъем подключения клавиатуры
Питание от разъема клавиатуры (через специальные переходники) часто используется при подключении к параллельному порту внешних накопителей или адаптеров локальных сетей. Если при этом предохранитель не выдержит тока, потребляемого этими устройствами (особенно, при включении), то это вызовет, естественно, и отказ клавиатуры – ее индикаторы не будут мигать при включении.
Контроллер клавиатуры i8042. Программируемый контроллер клавиатуры i8042 применяется в ПЭВМ, начиная с AT. Его функции состоят в приеме кодов от клавиатуры и управлении ее состоянием. ПЭВМ использовали контролер клавиатуры i8042 (позднее i8242) для общения с клавиатурой. Контролер на материнской плате в действительности взаимодействовал с подобным контроллером внутри клавиатуры, формировавшим коды нажимаемых клавиш – скан-коды. Контроллер, встроенный в клавиатуру, обычно, реализуется микросхемой из семейства MCS-48(51) – Micro Controller Set или логически совместимой.
На рисунок 1.47 приведена структурная схема контроллера (одной из его модификаций VIA 82C42).
Рисунок 1.47– Структурная схема контроллера клавиатуры
Принципы работы клавиатуры.Клавиатура включает в себя матрицу быстродействующих кнопочных контактов и 8-ми разрядную однокристальную микроЭВМ 8048 со встроенным ПЗУ емкостью 2К.
Каждый раз при нажатии клавиши замыкается контакт, находящийся на пересечении строки Х и колонки У матрицы. Сигнал, который при этом вырабатывается, читается процессором 8048 и преобразуется в специальный код, называемый кодом сканирования, который посылается для интерпретации центральному процессору. Каждые 3-5 мс ИС 8048 сканирует матрицу клавиатуры, проверяя колонки по одной, проверяя, какая из линий имеет низкий уровень. Сначала сканируется первая колонка, и состояние контактов каждого ряда в этой колонке читается и сохраняется в памяти. Если замкнуть контакт, то эта точка /пересечение колонки и строки/ будет иметь потенциал 0 вольт. Сканирование продолжается, пока не будут прочитаны все четыре колонки. Каждый код сканирования запоминается в буфере ИС 8048. таким образом, этот буфер отражает состояние всей клавиатуры.
На этом сканирование не прекращается. Далее матрица проверяется на наличие "фантомного состояния контактов " /несколько контактов в прямоугольной области матрицы нажаты одновременно и закодированы неверно/. Если два замкнутых контакта находятся в одной колонке, и одна из двух строк, содержащих замкнутый контакт, имеет еще один замкнутый контакт, возникает "фантомное состояние контакта". Такое состояние распознается ИС 8048 и обычно игнорируется.
Принимаются только "законные" нажатия клавиш /включая двойные и тройные комбинации, когда одна или две клавиши замкнуты, а третья нажимается. Поскольку процесс сканирования выполняется за 3-5 мс, а интервал между нажатиями клавиш составляет 20-50 мс, то матрица сканируется по крайней мере однажды за это время, и неправильный ввод отбрасывается.
Во время сканирования, когда воспринимается замыкание контакта, процессор 8048 ждет несколько миллисекунд, чтобы дать возможность замыканию зафиксироваться. Одна из трудностей при работе с механическими переключателями /клавишами/ состоит в том, что они не замыкаются сразу. Электрически они "подпрыгивают" /переходные процессы/ несколько раз прежде, чем будет достигнут плотный контакт.
Этот "дребезг" дает шумовые выбросы, которые могут быть интерпретированы как значимые сигналы, вызывая такие эффекты, как появление четырех или пяти повторений символа от одного нажатия клавиши.
Чтобы учесть это, процессор 8048 дает небольшую (несколько миллисекунд) задержку, прежде, чем закодировать нажатие клавиши и послать прерывание.
Каждое нажатие клавиши вырабатывает свой код. Специальные функции и символы верхнего регистра можно получить нажатием клавиш Shift, Ctrl, Alt и одного или более символов. BIOS центрального процессора проверяет наличие сигнала специальной клавиши (Shift/Ctrl/Alt) при нажатии других клавиш. Этот сигнал и код сканирования символьной клавиши в результате порождают специальную функцию или символ верхнего регистра.
Процессор 8048 вырабатывает код сканирования при нажатии клавиши и при ее освобождении.
Если держать клавишу нажатой более половины секунды, то 8048 вырабатывает соответствующий код сканирования 10 раз за каждую секунду.
8048 сообщает схеме ввода с клавиатуры в компьютере о своей готовности послать код сканирования клавиши тем, что выдает логическую единицу на своей линии KBD DATA в течение 0,2 мс. Потом он выталкивает 8-ми битную последовательность кода сканирования, начиная с младшего бита, каждый бит через 0,1 мс.
Схема клавиатуры показана на рисунке 1.48.
Рисунок 1.48 – Структурная схема интерфейса клавиатуры
U2 - программируемый контроллер прерываний.
8259 (U2) - программируемый контроллер прерываний. Каждый раз, когда периферийному устройству необходимо связаться с центральным процессором (ЦП), оно требует прервать работу ЦП, посылая сигнал на контроллер прерывания 8259 (U2). Этот контроллер посылает сигнал прерывания INT на вход ЦП, заставляя ЦП прервать работу и обратиться по специальному адресу к подпрограмме обработки прерывания. ЦП также выдает специальный код на контроллер шины 8288 (U6), вызывая появление сигнала подтверждения прерывания (INTA). Программируемый контроллер прерываний U2 имеет восемь входов (IRQ0,IRQ1,...,IRQ7) линий запросов прерываний. Эти входы обрабатывается контроллером U2 в специальном приоритетном порядке. Вход с номером 0 имеет высший приоритет. Если два запроса прерываний приходит на U2 одновременно, то запрос на прерывание с номером входа ближним к нулю, получит приоритет и будет обработан первым. Когда запрос на прерывание воспринимается U2, устройство вырабатывает сигнал прерывания INT, который посылается на ЦП. Если прерывание принимается (прием можно запретить с помощью программной команды), ЦП посылает код на контроллер шины 8288 (U6), в результате чего сигнал подтверждения прерывания (INTA) возвращается на U2. После считывания INTA U2 выводит восьми - битовый вектор прерываний на шину данных. Это приводит к тому, что U2 посылает сигнал, отключающий системный буфер шины данных, и это приводит к тому, что U2 может управлять шиной данных.
Состав контроллера клавиатуры на базе процессора 8048:
- U3 - центральный процессор;
- U6 - контроллер шины;
- U24 - восьмиразрядный последовательно-параллельный регистр;
- U26 - D-триггер (делитель промежуточной частоты);
- U36 - программируемый периферийный интерфейс (ППИ):
- 8255 ППИ (U36) - периферийное устройство с адресуемым интерфейсом шины данных, управляемый квитированными линиями (специальными коммуникационными сигналами);
- U82 - сдвоенный D-триггер.
Сигнал от 8048 задерживается, а затем тактируется на ИС 74LS175 U26 (4 D-триггера), чтобы выработать синхронизированный входной сигнал на 74LS322 (U24), представляющий собой 8-разрядный последовательно-параллельный регистр.
Когда последний бит 8-разрядного кода сканирования последовательно сдвинется в U24, тот выработает сигнал на своей ON линии. Этот сигнал попадает на вход данных сдвоенного D-триггера 74LS74 (U82). Когда следующий входной тактовый сигнал с U26 попадает на U82, триггер выдаст сигнал запроса на прерывание IRQ1.
Запрос на прерывание IRQ1 посылает программируемому контроллеру прерываний 8259 (U2), который генерирует сигнал прерывания INT. Сигнал INT воспринимается центральным процессором. ЦП останавливается, выясняя, в чем дело, и дает подтверждение запроса на прерывание, посылая код на свои линии S0-S2 к контроллеру шины 8288. Контроллер шины 8288 отвечает генерацией сигнала подтверждения прерывания INTA, который возвращается на 8259 /U2/. Контроллер прерываний 8259 затем выставляет вектор прерывания (INT9) на шину данных, и процессор (ЦП) вызывает программу обработки прерывания INT9 из BIOS. INT9 приводит к считыванию кода сканирования в порт A ППИ 8255 (U36). Код сканирования преобразуется программой BIOS'а в ASCII-код для выбора символа. Код сканирования и код символа (ASCII) хранятся в 16-символьном буфере. INT9 также сбрасывает запрос на прерывание, так что становится возможным появление другого системного прерывания.
ASCII символ и код сканирования для одного нажатия клавиши считываются из буфера другим прерыванием (INT16)& сигнал INT16 вызывается программой или операционной системой. Когда программа, выполняемая на компьютере, или операционная система ждет ввода, который требует работы с клавиатурой, то вырабатывается сигнал INT16. Он заставляет BIOS выполнить программу ввода/вывода с клавиатуры. Программа ввода/вывода читает буфер клавиатуры, пока не найдет код символа. Тогда она помещает каждый код (ASCII и сканирования) в регистр ЦП. Затем подпрограмма считывает статус данных для определения, не нажаты ли специальные клавиши (Shift,Ctrl,Alt). Наконец, она посылает ASCII код символа вызывающей его программе. Эта программа использует символ как символьную строку или числовой ввод, смотря по назначению, и посылает символ на активное устройство вывода (экран или принтер), где можно видеть, какой символ нажат.