Skip to content

Instantly share code, notes, and snippets.

Created September 4, 2017 23:50
Show Gist options
  • Save anonymous/b679cf0b905385f4f244b79137feb7ab to your computer and use it in GitHub Desktop.
Save anonymous/b679cf0b905385f4f244b79137feb7ab to your computer and use it in GitHub Desktop.
Схема работы клавиатуры

Схема работы клавиатуры


Схема работы клавиатуры



Принцип работы клавиатуры компьютера
Имитируем работу клавиатуры
Принцип работы клавиатуры















Заняться устройством подобного рода меня побудил тот факт, что большая часть простых для повторения геймортовских устройств не позволяла реализовать достаточное количество кнопок управления. Игровой порт PC изначально вообще расчитан максимум на четыре кнопки. Всевозможные расширения также не обладают желаемой гибкостью. Я даже считаю такие расширения в чем-то избыточными. Да и преобразование аналоговых данных в цифровые усложняет конструкцию джойстика. А клава — вот она, во всей своей х клавишной красе! Кроме того, масла в огонь подливали подписчики RU. Итак, я засел за разработку. До этого у меня был опыт работы с различными микропроцессорами и микроконтроллерами. В общем — пальцы от уха до уха. И я наивно полагал, что вот, сейчас я возьму доки, сделаю RTFM и через неделю буду на белом коне. Вся загвоздка оказалась в том, что документации о протоколе передачи данных между клавиатурой и контроллером я не смог найти ни в Интернете, ни в соответствующих конференциях Фидо. Пришлось брать осцилограф и несколько недель заниматься разбором времянок и попытками их повторить. Поэтому большая часть изложенной ниже информации является результатом моих умозаключений и не подтверждена документально. Контроллер передает различные команды например — изменение состояния светодиодов или скорости автоповтора. Клавиатура передает скан-коды нажатых клавиш скан-код — условное обозначение клавиши, не стоит путать с ASCII-кодами. При нажатии на клавишу клавиатура передает контроллеру скан-код этой клавиши. При отпускании — сначала префикс 0F0h, а потом скан-код отпущенной клавиши. Комбинации клавиш с Shift, Alt и Ctrl передаются как последовательность двух скан-кодов. С точки зрения контроллера эти клавиши ничем не отличаются от всех остальных. Точно так же на аппаратном уровне не различаются режими Num Lock и Caps Lock — они различаются на программном уровне программой, которая обслуживает прерывания от клавиатуры. Коротко хочу остановиться на реализации режима автоповтора. Как правило функции автоповтора возлагаются на саму клавиатуру — через определенное время, если клавиша не отпущена, то клавиатура посылает еще один точно такой же скан-код. В играх эта проблема решена элементарно — клавиша считается нажатой, пока не прийдет соответствующий скан-код с префиксом 0F0h. Поэтому я не стал реализовывать функции автоповтора в принципе. Кроме приведенных выше скан-кодов, клавиатура может возвращать некоторые служебные команды. Но эти команды, равно как и команды, выдаваемые контроллером, не представляют в данном случае практической ценности. Поэтому на них останавливаться не буду. Обмен данными между клавиатурой и контроллером осуществляется асинхронно по последовательному протоколу. Для обмена данными служат две линии — KBData и KBSync. Все остальное время, когда нет данных для передачи, обе линии имеют высокий уровень сигнала. Частота следования импульсов линии KBSync составляет около КГц. Данные передаются в таком порядке: После приема каждого байта данных контроллер выставляет низкий уровень на линии KBSync, сигнализируя тем самым, что занят обработкой принятых данных и не готов принимать следующие. Это можно считать подтверждением приема. Клавиатура подтверждает каждый байт принимаемой команды выдачей кода 0FAh. При возникновении ошибки при передаче, контроллер может потребовать повторить передачу последнего байта, выдачей команды 0FEh. Клавиатура же ведет себя по-другому — просто игнорирует ошибки. Я не вижу в этом ничего фатального — если ваша система дает частые сбои, то ей не место на рабочем столе. Скорее всего, мои объяснения были слишком запутаны, поэтому постараюсь проиллюстрировать их несколькими временными диаграммами. Общий вид передачи данных от клавиатуры S1 — стартовый бит; S2 — стоповый бит; D0-D7 — данные; P — бит четности; W — обработка принятых данных. В этом примере при инициации передачи клавиатурой контроллер сигнализирует о своей неготовности принимать данные и клавиатура ожидает освобождения линии KBSync. Основу устройства составляет однокристальный микроконтроллер AT89C Микроконтроллер AT89C фирмы Atmel принадлежит к семейству MCS отечественный аналог — МК Основное отличие AT89C от i — пониженное энергопотреблениее, сокращенное до ти количество линий ввода-вывода, отсутствие возможности использовать внешнюю память. Более подробную информацию по AT89C и i можно найти на www. Вместо AT89C можно использовать AT89C51, i КРВЕ51 или i КРВЕ31 с внешним ПЗУ. Но два последних варианта из-за своего повышеного энергопотребления могут привести к перегоранию предохранителя контроллера клавиатуры. На микроконтроллерах фирмы Atmel после основного обозначения указывается максимальная частота тактового генератора в мегагерцах. Я советую ставить микроконтроллер расчитанный на частоту 24МГц и кварц с частотой повыше — МГц. R1-R4 — 47K; R5 — 10K; C1, C2 — 18пФ; C3 — 1мкФ; D1 — AT89C; BQ1 — кварц МГц. Это — задел для будущих расширений, — линии P1. Линии KBData со стороны клавиатуры и контроллера подаются на входы P3. Таким образом попытка инициировать передачу данных со стороны клавиатуры или контроллера вызывает соответствующее прерывание. Подпрограммы обслуживания этих прерываний просто транслируют сигналы, соответствующие передаче одного байта, через микроконтроллер. В то время, когда микроконтроллер не занят передачей данных, происходит опрос линий P1. В данной версии приоритет отдается данным, передаваемым самим устройством. Поэтому данные от клавиатуры иногда могут теряться. Сигнал -KBReset — необязательный сигнал. Некоторые контроллеры могут использовать его для сброса клавиатуры. Я привожу исходный текст микропрограммы для микроконтроллера AT89C в надежде на то, что пытливый читатель сможет меня поправить или адаптировать программу для работы с другим типом микроконтроллера. Сборка и устранение неполадок Собрать устройство по приведенной выше схеме можно на макетнице, плате вытравленной в домашних условиях или изготовленной промышленным способом. Под микроконтроллер следует поставить панельку. Лучше всего оставить место на плате под выводных DIP-корпуса — они будут добавлены в последующих версиях. Далее, после внесения желаемых изменений, ассемблируется исходный текст микропрограммы — программой a Для прошивки программатором полученный hex-файл переводится в двоичный образ программой hex2bin. Собрав полностью устройство, подключаем его к клавиатуре и компьютеру. Правильно собранное из заведомо исправных компонентов устройство должно заработать сразу. Если нет — проверьте правильность монтажа, наличие питания на микроконтроллере. Осцилографом проверьте, запустился ли тактовый генератор и приходит ли импульс высокого уровня на вход RST при включении питания. При нажатии клавиш на клавиатуре импульсы на линиях P3. Я постарался протестировать устройство с максимальным числом доступных мне материнских плат и клавиатур — неполадок выявлено не было. В моем случае использован кварц Я постарался изложить все данные, необходимые для понимания принципа функционирования моего устройства. Это описание не претендует на стопроцентную техническую точность. Если я в чем-то заблуждаюсь — пожалуйста изложите мне свою версию событий. Кроме того, жду информации от умельцев, которые смогли повторить или адаптировать это устройство под другие типы микроконтроллеров. Да Нет, но собираюсь купить Нет, и не буду покупать Не знаю, что такое SSD. Главная Джойстики Статьи Обзоры моделей Самоделки Инструкции Геймпады Статьи Обзоры моделей Самоделки Инструкции Рули Статьи Обзоры моделей Самоделки Инструкции Каталог Файловый архив Обзоры игр Пресса Гостевая книга Форум Ссылки О сайте Карта сайта Поиск по сайту Опрос. Есть ли у вас накопитель SSD? Имитируем работу клавиатуры Вступление Заняться устройством подобного рода меня побудил тот факт, что большая часть простых для повторения геймортовских устройств не позволяла реализовать достаточное количество кнопок управления. Скан-коды Клавиша Скан-код Клавиша Скан-код Клавиша Скан-код Клавиша Скан-код 1. HP ProLiant DL G7.


Маточное кровотечение помощь
Управление судебного департамента челябинской области
Инструкция настенных часов
Сколько варятся тефтели в супе
Сделать кухню своими руками фото
Стих первый снег брюсов
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment