Мини usb клавиатура на микроконтроллере

10-кнопочная USB HID клавиатура на микроконтроллере PIC. Часть 1 – Схема и конструкция

В статье мы рассмотрим простую конструкцию на микроконтроллере, реализующую 10-кнопочную USB HID (Human Interface Device) клавиатуру, которая является Plug-and-Play устройством и не требует установки драйверов.

Изначально устройство предназначалось для быстрого доступа к часто используемым сочетаниям клавиш в операционной системе Windows, например Alt+F4 (закрыть программу), Windows+D (свернуть все окна), Ctrl+Alt+Del и др.

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

Основой конструкции является микроконтроллер Microchip PIC18F14K50, помимо него используется несколько резисторов, конденсаторов и коннекторы. Устройство не требует отдельного источника питания, т.к. подключается к порту USB компьютера (USB Host) и получает питание от него.

Аппаратная часть базируется на примере от компании Microchip “USB Device HID Keyboard”, который предоставляется в отладочном наборе DM164127 – Low Pin Count USB Development Kit. Сочетания клавиш задаются в программе микроконтроллера, назначение сочетания клавиш мы рассмотрим во второй части статьи.

Коды сочетаний клавиш предназначены для операционной системы Windows, однако возможно их переназначение для использования в других ОС.

Основные характеристики устройства:

  • 10 входных каналов (кнопки);
  • все кнопки имеют подтягивающие резисторы к «+» питания;
  • активное состояние кнопок – низкий логический уровень;
  • подключение к порту USB;
  • питание от USB;
  • Plug-and-Play устройство, не требуется установка драйверов.

Основные характеристики микроконтроллера PIC18F14K50:

  • Flash-микроконтроллер со встроенным USB 2.0 интерфейсом;
  • рабочая частота до 48 МГц;
  • 16 КБайт Flash-память программ, 768 Байт SRAM, 256 Байт EEPROM;
  • один 8-битный таймер, три 16-битных таймера, 1 канал ШИМ;
  • коммуникационные интерфейсы: USB, SPI, I2C, UART;
  • встроенный 9-канальный 10-битный АЦП;
  • два аналоговых компаратора;
  • до 15 линий ввода/вывода общего назначения;
  • корпус: 20-выводный DIP, SOIC, SSOP.

Для сборки устройства нам понадобятся:

  • микроконтроллер PIC18F14K50;
  • кварцевый резонатор 12 МГц;
  • один конденсатор 0.1 мкФ;
  • один конденсатор 220 нФ;
  • 2 сборки из 5 резисторов номиналом 10 кОм;
  • один резистор номиналом 1.5 кОм;
  • панелька (сокет) для установки 20-выводного микроконтроллера;
  • коннектор USB Type B;
  • кабель USB Type B – Type A;
  • 10 кнопок;
  • 4-выводные и 6 выводные коннекторы (либо аналогичные).

Принципиальная схема устройства

Кликните для увеличения

Вид печатной платы

Печатная плата односторонняя, пользователи могут самостоятельно разработать печатную плату с применением smd компонентов с целью миниатюризации устройства.

Расположение элементов на печатной плате

Кнопки установлены на отдельной плате и подключаются к плате с микроконтроллером при помощи коннекторов (обозначены на плате HEADER1-4 и HEADER5-10).

Назначение отдельных компонентов и основные замечания по установке на печатную плату

Наборы 10 кОм резисторов – данные элементы содержат в себе 5 резисторов номиналом 10 кОм каждый, включенных параллельно с одним общим выводом. Этот вывод обозначается точкой на корпусе элемента.

Кварцевый резонатор должен быть расположен максимально близко к микроконтроллеру. Возможно, потребуется подключение двух конденсаторов емкостью 22 пФ к кварцевому резонатору. Конденсатор С2 (220 нФ) подключается между выводом микроконтроллера VUSB и V+.

Резистор R1 (1.5 кОм) подтягивает линию Data+ к напряжению питания, что сигнализирует для Host устройства, на какой скорости работает USB Device (клавиатура).

Джамеперы, указанные на печатной плате (J1 и J2, P1-P2-P3, G1 и G2, Rx и Tx), используются в связи с односторонней разводкой печатной платы, а также для возможности расширения функций:

  • J1 соединен с J2;
  • P1 подключен к P2, который подключен к P3;
  • точки G1 и G2 остаются свободными (подключены к «–» питания);
  • точки Rx и Tx подключены к линиям Rx и Tx микроконтроллера (на схеме не показано) для расширения функций.

Кнопки подключаются при помощи коннекторов к плате с микроконтроллером согласно схемы.

В следующей части статьи мы рассмотрим основные моменты в ПО микроконтроллера, как назначать сочетания клавиш и использование клавиатуры.

Источник: https://www.rlocman.ru/shem/schematics.html?di=108428

Записки инженера

Со временем возникает вопрос, как вводить данные в микроконтроллер? Классическое решение, которое приходит большинство нам — использовать кнопки… протравить на плате дорожки и контактные площадки для кнопок, далее их припаять, решить как отслеживать нажатие кнопки — по прерыванию или через опрос состояния кнопок по циклу. Если кнопок много, они будут занимать значительное количество pin-ов микроконтроллера.  Путь тернистый.

Я предлагаю использовать, то что у нас под рукой — простую PS/2 компьютерную клавиатуру. Из плюсов:

  • вещь не дорогая;
  • продается в любом компьютерном магазине
  • нам доступно 101 клавиша
  • займет клавиатура всего 2-pin микроконтроллера для синхросигнала и данных.

 

В качестве микроконтроллера я буду использовать ATmega328P или Arduino UNO.

Немного теории

Если вы вскроете оплетку кабеля для клавиатуры, то вы обнаружите 4-е провода:

  • провод питания (5 В)
  • провод земли
  • провод синхросигнала (CLK)
  • провод данных (DATA)

Каждая клавиша на клавиатуре имеет свой 8-и битный код, называемый скан-кодом и записывается в шестнадцатеричном виде (HEX), смотри ниже.

Когда вы нажимаете на клавишу, по SLK передаются прямоугольные импульсы а по DATA 11-и битный код:

Биты данных считываются компьютером при переходе CLK с высокого уровня на низкий.

Первый бит всегда равен — это стартовый бит, далее идет 8-емь бит скан-кода, после чего бит контроля четности и в конце стоповый бит, который всегда равен 1.

Как подключить PS/2 клавиатуру к микроконтроллеру?

На самом деле порт PS/2 компьютерный клавиатуры это разновидность разъема Mini-DIN, её 6-и пиновый вариант.
В клавиатуре установлен min-din 6 pin штекер (папа), мы все его видели на конце кабеля клавиатуры.

Гнездо min-din 6 pin (мама) находится на материнской плате, для подключения к микроконтроллеру нам придется его выпаивать из старой клавиатуры, что не удобно.

Я советую приобрести нормальное гнездо min-din 6 pin для кабеля, например на ebay.ru он стоит ~ 1$. Выглядит он следующим образом:

(слева в собранном виде, справа в разобранном)

В качестве примера я буду подключать клавиатуру к Arduino UNO (контроллер ATmega328P), от нас требуется подключить проводки по следующей распиновки.

Помощь паяльника не понадобится, провода обжимаются пассатижами в металлические зажимы, в результате у меня получился следующий переходник.

В вашем случае концы проводков вы можете припаять к плате микроконтроллера, я буду использовать pin-ы Arduino UNO.

  • GND подключаем к GND Arduino UNO
  • Vcc подключим к 5V Arduino UNO
  • DATA подключим 2-pin Arduino UNO
  • CLK подключим к 3-pin Arduino UNO

Далее останется только подключить клавиатуру к гнезду.

Исходный код прошивки

В интернете для работы с PS/2 клавиатурой в больше половины случаев используют библиотеку ps2keyboard, где через цикл проверяют состояние «переменной — буфера» обмена с клавиатурой.

Я не сторонник проверять что-то через цикл, прошивка будет занята только работой с клавиатурой.

А если нам нужно производить расчеты или работать с каким-нибудь медленным оборудованием? Тут будет что-то страдать или наши расчеты или скорость реакции на клавиатуру.

Я предлагаю использовать прерывание…

PIN контроллера принимающий CLK (синхроимпульсы) от клавиатуры нужно настроить как внешнее прерывание при переходе из высокого состояние в низкий и в обработчике считывать бит данных с DATA. Алгоритм обработчика прерывания должен побитно накапливать посылаемый скан-код с клавиатуры.

Код для Arduino, подключаем DATA к 2-ому пину, CLK подключим к 3-ему пину.

123456789101112131415161718192021222324252627282930313233343536373839 const int DataPin = 2; // канал DATA клавиатурыconst int IRQpin =  3; // канал CLK клавиатурыint count=1;          // счетчик текущего бита 11-битного кода от клавиатурыint m=0;              // счетчик текущего бита скан-кодаuint8_t scan_code=0;  // скан-код нажатой клавишиvoid ps2interrupt(void) {        /* обработчик прерывания от CLK клавиатуры */  /* считываем скан-код с клавиатуры по битно в переменную scan_code */  if ((count>1) and (count

Источник: http://s-engineer.ru/mikrokontroller-podklyuchaem-ps2-klaviaturu/

Самодельная эргономичная клавиатура CatBoard ][

Всё началось ещё в 2005 году, когда я захотел работать за действительно эргономичной клавиатурой, но не готов был заказывать из заграницы дорогую клавиатуру.

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

Мне в то время очень понравилась клавиатура Kinesis Advantage, практически идеал, но подумал, что стоит начать изготовление с плоской клавиатуры, навроде Maltron Flat.

Клавиатура Maltron Flat

Печатать вслепую я тогда уже умел, научился благодаря клавиатурному тренажёру Stamina. До этого пробовал научиться в Solo, но он настолько меня достал, что я так и не доучился, прошёл все упражнения, но печатать вслепую так и не стал.

А вот в Stamina учиться было легко, и когда скорость печати достигла уровня в 200 символов в минуту, я смог начать работать не глядя на клавиатуру. Учился печатать сразу и русский и английский текст, по очереди проходил упражнения, благодаря этому сразу смог полноценно начать работать слепым методом.

Переставлял кнопки на своей клавиатуре, тем самым тролля коллег, было интересно даже придумывать разные надписи на клавиатуре, ведь колпачки у кнопок разные на разных рядах, поэтому приходилось переставлять их только на свой же ряд, и желательно было не трогать fj, на которых были засечки (а они важны при слепой печати, чтобы можно было ставить руки в стартовую позицию печати не глядя).

Клавиатурный тренажёр Стамина

Прежде чем что-нибудь делать, нашёл одну московскую фирму, в которой купил кнопки Cherry MX Black с запасом, и программируемую клавиатуру для торговых терминалов KBM-105 для экспериментов (индекс 105 это количество кнопок, матрица 15×7).

Нарисовав схему расположения кнопок, стал думать как мне в домашних условиях сделать корпус. Из подручных материалов собирал разные конструкции, которые сейчас и показать то стыдно, в общем ничего не получалось, было и криво, и хлипко.

Работа по изготовлению корпуса застопорилась, зато на программируемой KBM-105 стал экспериментировать с раскладками.

Программируемая клавиатура KBM-105

В то время производилась очень уж необычная клавиатура NSK 535, всё в ней было революционно, и алфавитная раскладка, и шифты на больших пальцах.

Глядя на такое чудо, решил даже пробовал печатать именно с такими шифтами, но показалось очень уж революционным, и вернул шифты обратно на мизинцы, благо, что прошивать клавиатуру KBM-105 очень быстро, можно по несколько раз на дню менять расположение кнопок.

Клавиатура NSK 535 R

Проработал я на этой программируемой клавиатуре дома несколько лет, при этом на работе была вполне себе стандартная клавиатура, никаких проблем с работой на двух, совершенно разных клавиатурах, не было, только на моей работать было гораздо приятнее.

Для быстрого освоения новых раскладок на программируеймой клавиатуре даже написал онлайн клавиатурный тренажёр Klavarog (http://klava.

org/), чтобы можно было работать с любого компьютера, подключённого к интернету, не устанавливая никаких программ, сейчас все стали так делать, а в то время онлайн тренажёры если и были, то только на Flash, и они не работали в линуксе с русскими буквами.

Сначала это был очень простой тренажёр, не было даже подсказки о нажимаемых клавишах, только лишь картинка клавиатуры. Хотя до сих пор он остаётся самым простым тренажёром, при этом очень эффективным, ведь он делался для себя.

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

Клавиатурный тренажёр Klavarog

В какой-то момент времени решил что буду разрабатывать новую клавиатуру, и проект будет открытым. Создал Wiki сайт http://kbd.klava.

org/, где стал собирать информацию о разных клавиатурах, и стал искать любую информацию по разработке клавиатуры, ведь для моей клавиатуры уже нужно было делать и свой контроллер, стандартный уже не подходил.

Оказалось, что я вообще ничего не знал об изготовлении клавиатур.

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

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

Сначала я перенёс клавиши управления курсором на основной алфавитный блок, если зажать AltGr (правый Alt), то некоторые буквы становились стрелками, поначалу это были VIM-овские кнопки hjkl, потом сделал более привычное и удобное ijkl, получилось так, что при зажатом AltGr стрелки как будто сами прыгают под пальцы.

Потом разместил клавишу Ctrl слева от пробела, сместив Alt влево на одну клавишу, это оказалось очень удачным решением.

Под это дело даже научился работать в Emacs, оказывается на древних клавиатурах Ctrl располагался на месте современного Caps Lock, понятно, почему мне раньше не понравился этот редактор, это из-за неудобного расположения Ctrl. Нужно учесть, это всё касается только слепого набора, при печати двумя пальцами расположение клавиш не имеет большого значения, дело лишь в привычке.

Доработанная раскладка клавиатуры ноутбука

В одно время получилось так, что не было работы, и я решил сменить ненавистную раскладку QWERTY (как же у меня от неё болели мизинцы при обучении слепой печати) на более эргономичную Dvorak, и с помощью своего тренажёра стал изучать его.

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

Занимался уже где-то неделю, дело шло туго, скорость росла очень медленно, при этом почему-то разучился работать в QWERTY, у других такой проблемы не было, но я испугался, вдруг надо будет что-то срочное делать, а я разучился печатать, а в Dvorak ещё не научился.

И вот в этот момент безвременья мне попадается на глаза мой старый компьютер БК-0010/01, в котором была фонетическая раскладка JCUKEN, в ней латинские буквы расположены там же, где и схожие по звучанию русские в стандартной раскладке ЙЦУКЕН.

Ностальгия по временам БК настолько захлестнула, что я решил сделать себе эту раскладку, и попробовать изучить её. Сделать один в один не получилось, некоторые часто встречаемые буквы были очень не удачно расположены, и я в итоге довольно сильно поменял её, и у меня есть веские причины на перестановку каждой клавиши.

Но в общем она всё равно осталась фонетической, и по большей части совпадающей со старой. Сделав раскладку и прошив её в свою операционную систему (я в это время уже начал работать в Ubuntu Linux), я начал изучать её в тренажёре. И тут произошло чудо, процесс пошёл настолько быстро, что я довёл скорость печати до 200 символов в минуту (опять эти 200) за пять дней, и начал работать уже в новой раскладке.

Клавиатура советского компьютера БК 0010-01

Доработанная раскладка JCUKEN

Теперь меня устраивало всё, кроме расположения клавиш, и не устраивал длинный пробел, хотя на ноутбуке он и короче, чем на обычных клавиатурах, за счёт дополнительных клавиш на нижнем ряду. Пришла пора делать клавиатуру, только она должна стать компактной, чтобы её можно было ставить поверх ноутбучной клавиатуры, и как можно меньшей по высоте.

Так как клавиатура должна располагаться поверх ноутбучной, а на моём Thinkpad прямо в середине клавиатуры есть тачпоинт, который выше уровня всех кнопок, то решил сделать на нижней части корпуса клавиатуры отверстие, сначала оно было круглым, потом просто так добавил кошачьи уши.

С этого момента моя клавиатура стала называться CatBoard =^.^=

Корпус решил сделать из алюминия, и стал искать производство, где бы мне могли вырезать лазером отверстия под кнопки, и контур корпуса. Никто не хочет связываться с мелкими заказами, большинство честно пишут о сумме минимального заказа, некоторые об этом говорят лишь после заказа.

Для резки алюминия нужен довольно мощный лазер, найти такой не просто, поэтому решил делать корпус из листового пластика или оргстекла. И тут, благодаря Хабру, нашёл упоминание о первом открвышемся в России фаблабе.

Связался с заведующим лаборатории FabLab77, встретились, я рассказал о своём проекте, и получил доступ к оборудованию, с помощью которого можно делать что угодно, открылись безграничные возможности.

Тут ещё повезло тем, что в это время приезжали американцы из MIT, и провели недельный семинар, на котором научили работать со всем их оборудованием, использовался только открытый софт.

Последний день семинара MIT в FabLab77

В поисках эргономичного расположения кнопок я изготовил множество макетов из фанеры, на которых нашёл самое лучшее расположение, и оно оказалось почти таким же, как и в клавиатурах Truly Ergonomic и ErgoDox (о её существовании я тогда ещё не знал). Ну это и не удивительно, руки у людей ведь почти одинаковые.

После того, как корпус был готов, а расположение кнопок меня полностью устраивало, я стал изучать, как же мне сделать контроллер. Одновременно стал собирать домашнюю мини лаболаторию для пайки.

Купил паяльник с регулировкой мощности, собрал ящик, в котором разместил Dremel 300 с приставкой, превращающей его в небольшой сверлильный станок — Dremel Workstation 220. В этом ящике сделал откидывающуюся крышку, на которой можно работать.

Теперь ящик всегда стоит под столом, на занимая место в квартире, а когда нужно что-то сделать, достаю и ставлю его на стол.

Сначала контроллер решил собрать сам, заодно собрав и программатор, в фаблабе на фрезеровочном станке Modela изготовил печатные платы, спаял их, но ничего так и не заработало, так как работающий программатор был только в фаблабе, покупать новый не хотелось, а возиться с платами мог только дома. Узнал что существуют микроконтроллеры с аппаратной реализацией USB протокола, дальнейший поиск навёл меня на уже готовые контроллеры, такие как Teensy, и аналогичные наши разработки от Microsin, у которого и приобрёл AVR-USB162.

Провода решил припавивать не напряму к контроллеру, а через разъем, который установил внутри корпуса. Съездив ещё раз в фаблаб, вырезал лазером корпус, который решил сделать не с закругленными краями, обведя прямыми линиями блоки с кнопками получил текущий дизайн клавиатуры.

Контроллер разместил прямо сверху корпуса, держится он на винте с гайкой, и подложенными шайбами, а разъём не даёт плате крутиться. Чтобы провод не упирался в экран ноутбука, расположил контроллер ближе к середине клавиатуры.

А вот как бывает, когда об этой проблеме не подумали:

Ричард Столлман и его ноутбук OLPC с клавиатурой HHKB

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

В кнопках Cherry MX есть пустое место, в которое можно установить либо диод, либо светодиод.

Чтобы не припаивать диоды снаружи, в каждую кнопку установил по маленькому диоду КД522Б, правда напутал полярность, у них оказывается расположение метки не унифицировано, нужно обязательно глядеть в справочнике, где анод, а где катод, поэтому при подключении кнопок к контроллеру учёл свою ошибку.

Когда всё было собрано, осталось лишь прошить контроллер, поначалу я использовал библиотеку LUFA, но так и не смог с ней разобраться, ведь я никогда не программировал на си, и фактически не знаю этот язык. В поисках другого решения нашёл простой код сканирования клавиатуры, где была применена библиотека от Teensy.

Код оказался со множеством ошибок, но исправить их было уже не трудно, самое главное работало. Сделал прошивку за пару дней, и клавиатура заработала, никогда бы не подумал, что смогу создать её так быстро. Потом конечно были недели доводки её до ума, исправление ошибок, добавление невиданных ранее функций.

И делал я это всё уже на новой клавиатуре.

Так как клавиатура получилась разделённой, руки стоят дальше друг от друга, а подставка под руки на ноутбуке на это не рассчитана, поэтому руки стали упираться в углы ноутбука.

Решил проблему с помощью двух ковриков для мыши с гелевыми подушечками, обрезал лишнюю часть коврика, и получил удобные подставки для рук к клавиатуре.

Благодаря прямой линии корпуса, подушечки были установлены просто идеально.

Клавиатура CatBoard поверх ноутбука ASUS EEE PC 701

Какое же было удовольствие, наконец-то начать работать на том, что собрано своими руками, и не имеет тех недостатков, от которых я просто устал, ведь работаю на клавиатуре каждый день, и каждый день меня это гнетёт.

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

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

При этом главное моё требование — использованию поверх ноутбучной клавиатуры, моя новая клавиатура выполняла, она разместится даже на самом маленьком нетбуке — ASUS EEE PC 701, у которого экран диагональю всего 7 дюймов, как это видно на фотографии чуть выше. Я на этом нетбуке хоть и не работаю, но вполне возможно, что начну теперь использовать, где-нибудь в дороге, ведь теперь не нужно пользоваться его маленькой клавиатуркой, когда приходится пальцы сжимать вместе, чтобы разместить их на маленьких клавишах.

Первоначально стояли плоские колпачки с прозрачной крышкой, купленные ещё вместе с программируемой клавиатурой, позже поставил чёрные колпачки от WASD Keyboards, когда сделал заказ на новые кнопки, на сей раз уже Cherry MX Blue (с кликом) и Cherry MX Red (как и чёрные без клика, но более мягкие).

Вторую клавиатуру решил собирать из-за туговатых Cherry MX Black, у них усилие нажатие более 60 грамм, у синих и красных от 45 грамм. Нажимать их ещё было нормально, а вот удерживать в нажатом состоянии, что в связи с наличием Fn слоя требуется часто, уже не получается, палец устаёт.

К изготовлению CatBoard ][ присоединился коллега suenot, с которым познакомились на встрече Клавогонщиков, и один экземпляр попросили сделать для фаблаба.

Поэтому вместо пайки проводами решил сделать печатные платы, на каждую клавиатуру по две штуки, на краю платы устанавливается разъём, в который вставляется контроллер, соединяя обе платы, правда из-за нехватка портов пришлось соединять платы пятью проводами.

Евгений собирает свою белую CatBoard ][

Фрезеровать такие большие платы очень долго, решил их протравить.

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

Платы были из геттинакса, и моей ошибкой было резать их ножницами по металлу, они довольно хрупкие, в одном месте отломился кусок вместе с дорожкой. Сверлил уже дома дремелем, не хотелось возиться с фрезеровкой.

Травление платы

Просверленная плата

Использование 1,5 мм оргстекла вместе с 3 мм цветным пластиком позволило сделать корпус клавиатуры чуть тоньше, чем в первой клавиатуре, сделанной только из 3 мм листов, из-за чего пришлось фрезеровать выступы под защёлки кнопок. Контроллер взял другой модели, более компактный (AVR-USB162MU). Установил два светодиода, синий и красный, которые показывают текущую раскладку клавиатуры.

Вид снизу

Скрепляются слои клавиатуры резьбовыми заклёпками М3 с насечкой и винтами с потайной головкой. Вместо резьбовых заклёпок можно взять более доступные вытяжные, выбить из них гвоздь, и нарезать внутри резьбу М3.

Источник: http://www.pvsm.ru/diy/37982

Клавиатура | Электроника для всех

Думаю, каждый сталкивался с нехваткой выводов у выбранного контроллера. Принципиальных путей решения данной проблемы ровно два: менять контроллер на более многоногий или менять схему, чтобы упихнуться в существующие ноги.
Например, классика жанра — кнопки.

Когда их две-три, то проще всего повесить каждую на свою ногу, особенно если на этих ногах есть внешнее прерывание. Тогда и работать с ними одно удовольствие. А если кнопок больше десятка? Если идти по первому пути, то с кличем «больше ножек!» выбираем какой-нить TQFP64 и оккупирем два порта.

У такого решения есть очевидный плюс — каждая кнопка анализируется независимо от других, поэтому возможны любые аккорды. Минусы тоже очевидны: много ног ушло почти в никуда.

Второй путь — преобразовать схему так, чтобы подсократить количество занимаемых ног. Тут простора для творчества побольше.

Начиная от PC-style (отдельный контроллер, который занимается опросом клавиатуры и преобразует нажатие клавиш в удобоваримый последовательный код, хоть в 1-wire) и сдвиговых регистров (как на джойстиках Dendy) заканчивая клавиатурами на резистивных делителях, подключаемых к АЦП. Весь вопрос — в стоимости.

Варианты с матрицей клавиш уже рассматривались, сдвиговый регистр подключали, а вот клавиатура на делителях осталась как-то незаслуженно забыта. Восполним пробел.

Первое, что сразу приходит в голову — поставить цепочку резисторов и кнопками коротить их на землю. Примерно так:

Посмотрим, как оно работает.
(далее…)

Read More »

ИнтерфейсКлавиатураСхемотехникаТрюки

Данная статья является продолжением предыдущей о подключении клавиатуры к МК с помощью трех сигнальных проводов. В этой часте я расскажу вам о том, как увеличить число кнопок на клавиатуре до 16, опишу алгоритм обработки нажатий этих кнопок и то, как ассоциировать с каждой кнопкой свою функцию. Итак, приступим.

Аппаратная часть
Как вы уже догадались, чтобы подключить дополнительные кнопки к блоку клавиатуры, нужно добавить дополнительный сдвиговый регистр, который будет захватывать нажатия других восьми кнопок. Ниже приведена блок схема этой конструкции:

Рассмотрим режим работы, когда при каждом клике ногой CLK происходит сдвиг битов влево по направлению к старшему (S0 поднята, S1 опущена). Взглянем на сдвиговый регистр U1. При каждом дрыге ногой CLK, бит, который находится на выводе Qn, перемещается на вывод Qn+1, тоесть сдвигается в сторону старшего бита (влево).

Но так как биту, который находится на ноге Q7 уже некуда сдвигаться, то он по идее должен бы был пропасть. Чтобы этого не произошло, мы посылаем его на следующий сдвиговй регистр U2, подключив Q7 регистра U1 к ноге SR SER регистра U2. Объясню, что же это за нога.

В рассматриваемом нами режиме работы сдвигового регистра (S0 поднята, S1 опущена) биты смещаются в cторону старшего, а на место младшего становится бит, который в данный момент находится на ноге SR SER.

Так как два наших сдвиговых регистра тактируются от одного источка (микроконтроллера), то бит на ноге Q7 сдвигового регистра U1, при сдвиге не теряется, а перескакивает на сдвиговый регистр U2, где продолжает свой путь в микроконтроллер. (далее…)

Read More »

HD44780PinBoardИнтерфейсКлавиатураРегистр

В известном русском руководстве по экранчикам на базе HD44780 всю последнюю страницу занимает назойливая реклама чудо-микросхемы CE110, которая призвана решить все проблемы начинающих, или чрезмерно занятых экрановодов.

Реклама есть, да вот саму микросхему найти не удалось. А ведь до чего хорошая идея — иметь внешнее устройство, которое показывает само по себе — налицо экономия ножек основного процессора, упрощение разводки платы, экономия места во флешке, в памяти, экономия вычислительной мощности. Да и проще и лаконичнее выглядит такое решение. Уговорили, будем делать.

Из тини 2313. Кроме самого экранчика и тиньки нужны будут диоды, по количеству строк в матричной клавиатуре, чтобы поддерживать множественные нажатия, транзистор, чтобы управлять подсветкой экрана, несколько резисторов и конденсаторов.

Кварц, конечно же кварц! Если общение с основным процессором будет идти через последовательный порт с высокими скоростями, нужен кварц, потому что изменения частоты встроенного генератора на 5-10% в зависимости от температуры, я видел своими глазами.

(далее…)

Read More »

HD44780ИнтерфейсКлавиатураИтак, клавиатуру я сделал и написал процедуру сканирующую клавиатурную матрицу 4х4 кнопки. Пора бы рассказать как организовать опрос такой клавы. Напомню, что клава представляет из себя строки, висящие на портах и столбцы, которые сканируются другим портом. Код написан для контроллера ATMega8535, но благодаря тому, что все там указано в виде макросов его можно быстро портировать под любой другой контроллер класса Mega, а также под большую часть современных Tiny. Хотя в случае с Tiny может быть некоторый затык ввиду неполного набора команд у них. Придется чуток дорабатывать напильником.

(далее…)

Read More »

AssemblerAVRАлгоритмКлавиатураПрограммированиеКлавиатураКорпус

Печатная плата

Возникла у меня необходимость забабахать себе девайсину, чтобы можно было с его помощью раздавать байты по i2c и UART, а также принимать байты по этим же протоколам и выдавать на экранчик. Как по одному, так и пачками. Этакий дебаггер.

Ну а чо, сказано сделано. Воткнул ATMega8535 — первая которая под руку подвернулась из многоногих.

Вывел все что только можно наружу, присобачил небольшую клавиатурную матрицу 4х4 и LCD экранчик. Экранчик мелкий WH0802A 8х2 символа, но уж какой был.

Других у нас в продаже не встречал, а под заказ везти лень. Да и, думаю, там и не надо больше.

А раз уж пошла такая пьянка, то до кучи вывел наружу пару каналов ШИМ, да пару входов АЦП. Ну и SPI заодно — гулять так гулять.

Там же можно и Dallas 1-wire проткол организовать, приделать частотомер, индикатор сигнала, вольтмер и вообще можно много чего наворотить, было бы желание.

Опять же, линий на вход/выход получается дофига, так что из нее можно сделать головной блок умного дома или контроллер чего нибудь.

Корпус взял халявный, PAC-TEC‘овский который намутил года два назад. Вот и пригодится коробочка 🙂 Надо сказать, PAC-TEC делает просто изумительные коробки. Не чета тому говну, что продается в наших радиомагазинах. Не скрипят, не люфтят, крепко сбиты, ладно скроены и выглядят круто. Где бы их еще продавали у нас.

Пока только плату развел, еще некоторых деталей не хватает. На днях вытравлю плату, соберу и буду программировать.

Вот тогда будет вам и примеры живого кода и подробное описание SPI, i2c, UART, клавиатура и LCD .

Кстати, обратите внимание как легко матрицировать обычные тактовые кнопки. А все благодаря тому, что у них четыре попарно соединенных вывода.

Пока же, раз все еще в виде чертежа, набрасывайте в комменты свои идеи по поводу фич будущего девайса.

Read More »

i2cRS232UARTКлавиатураМикроконтроллерОтладкаПечатная платаУмный домДопустим нам надо подавать команды нашему девайсу. Проще всего это делать посредством обычных кнопок, повешенных на порт. Но одно дело когда кнопок две три, и другое когда их штук двадцать. Не убивать же ради этого двадцать выводов контроллера. Решение проблемы есть — матрицирование. То есть кнопки группируются в ряды и столбцы, а полученная матрица последовательно опрашивается микроконтроллером, что позволяет резко снизить количество нужных выводов ценой усложнения алгоритма опроса.

Клавиатурная матрица.
Я ее нарисовал тебе на первой картинке. Как видишь, там есть строки и столбцы. Кружочками обозначены кнопки. Включены они так, что при нажатии кнопка замыкает строку на столбец.

Считывающий порт включается в режиме Pull-up входа, то есть вход с подтягивающими резисторами. Если контроллер это не поддерживает, то эти резисторы надо повесить снаружи.

Сканирующий порт работает в режиме выхода, он подключен к столбцам. Столбцы должны быть подтянуты резисторами к питанию. Впрочем, если используется полноценный Push-Pull то подтяжка не нужна — выход сам поднимет ногу на нужный уровень.

(далее…)

Read More »

АлгоритмКлавиатураНачинающимПрограммированиеСхемотехника

Источник: http://easyelectronics.ru/tag/klaviatura

Простейшая самодельная матричная клавиатура на микроконтроллере PIC16F628A

В этой статье описано, как самостоятельно изготовить простейшую матричную клавиатуру, размером 3х3, на микроконтроллере, с возможностью подключения её к компьютеру через com-порт. В качестве примера используется микроконтроллер PIC16F628A.

Схема:

Элементы:

С1=0,1 мкФ
R1=1 кОм
V1..V9 — абсолютно любые диоды (лучше Шоттки), ток с одной кнопки, через внутренний подтягивающий резистор, всего лишь около 0,2 мА.
К1..К9 — нормально-разомкнутые кнопки без фиксации.

Описание работы схемы:

Выводы микроконтроллера RA1, RA7, RA6 запрограммированы как выходы.

Выводы RB6, RB5, RB7 запрограммированы как входы, подтягивающие резисторы включены.

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

При необходимости узнать состояние кнопок какого-либо столбца, — соответствующий выход (к которому подключен столбец) устанавливается в ноль (то есть подключается к земле), после чего проверяется состояние входов. Если вход равен нулю, то кнопка в соответствующей этому входу строке проверяемого столбца нажата, если вход равен 1, то кнопка не нажата.

Например, мы хотим проверить состояние кнопок во втором столбце, и пусть у нас нажата кнопка К8.

1) Устанавливаем RA7=0 (при этом RA1=RA6=1).

2) Проверяем, что будет со входами? Кнопка К2 разомкнута, связи с землей нет, поэтому вход RB6 так и останется равен 1 (притянут к питанию через внутренний резистор). Аналогичная ситуация со входом RB5.

А вот на входе RB7 образуется делитель напряжения, в одном плече (том, что к питанию) у которого внутренний подтягивающий резистор (с сопротивлением порядка 25 кОм), а в другом плече — открытый на землю диод. Если считать диод идеальным, то напряжение на входе будет равно нулю, то есть вход установится в ноль.

Таким образом, последовательно просканировав состояния кнопок во всех трех столбцах, мы узнаем состояния кнопок всей нашей небольшой клавиатурки.

Теперь следующий вопрос: зачем нужны диоды?

Давайте представим, что в нашей схеме нет диодов и рассмотрим тот же самый случай. Если кроме кнопок в сканируемом столбце больше ни одна кнопка не нажата, то все отлично работает.

Но пусть у нас помимо кнопки К8 нажата еще кнопка К9.

Итак, линия RB7 у нас подтянута к земле через кнопку К8 и линию RA7, но тогда через кнопку К9 выход RA6 (который установлен в единицу) также окажется подтянут к земле, — получим КЗ и спалим выходы.

А если бы там стоял диод, как в нашей схеме, то в данной ситуации он оказался бы обратно смещенным, то есть запертым и КЗ бы не случилось.

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

Ну вот, в общем-то, почти и всё.

Фото готового девайса:

Выведенные отдельно линии Tx и Rx позволяют подключить эту конструкцию через USART к com-порту компьютера, используя преобразователь уровней RS232-TTL. В принципе, примерно так устроена обычная клавиатура для com-порта.Дальше все зависит от вашей фантазии: хотите — сканируйте клавиатуру постоянно и отсылайте состояние на компьютер, хотите — сканируйте по команде с компьютера, хотите — сканируйте постоянно, а посылайте только когда есть нажатые клавиши, хотите — вообще ничего никуда не посылайте, а используйте это все для управления контроллером и т.д.Скачать печатную плату (DipTrace 2.0)Данная печатная плата разведена под использование диодов BAT18 в корпусе SOT23 (маркировка A2, на материнках таких полно).Вот здесь можно посмотреть пример программы и скачать готовую прошивку для этой клавиатуры.

Источник: http://radiohlam.ru/?p=884

USB клавиатура из обычной PS2 (ps/2 to usb converter)

Порт PS/2, до широкого распространения USB, устанавливался в большинстве системных боков компьютеров для взаимодействия этого блока с клавиатурой.

После широкого распространения USB, порт PS/2 стал очень редко использоваться и в современных ноутбуках и компьютерах таких портов почти не осталось поэтому, в большинстве случаев, использовать клавиатуру со старым разъёмом PS/2 можно только применяя специальный переходник PS/2 – USB.

Протокол PS/2 сильно отличается от протокола USB поэтому нельзя так просто взять и перепаять с разъёма PS/2 на USB и надеяться что это сработает.

PS/2 – это простой синхронный последовательный интерфейс не имеющий больших вступительных и заключительных данных, можно даже сказать (не сильно ошибившись) что передача по PS/2 – это просто поток битов (примерно как по SPI). Частота импульсов синхронизации невелика с составляет несколько десятков килогерц.

Уровень логической единицы в PS/2 равен 5В, логического нуля 0В. В общем интерфейс PS/2 достаточно прост для того чтобы его можно было самостоятельно реализовать программно на микроконтроллере.

 Интерфейс USB гораздо сложнее и его программная реализация – это задача очень нетривиальная и требующая большого объёма работы но к счастью для нас одна Австрийская фирма (Objective Development) выпустила библиотеку v-usb с лицензией GNU GPL т.е.

бесплатной для коммерческого и некоммерческого использования, а это значит что библиотекой v-usb можно пользоваться бесплатно. Также существует вариант данной библиотеки для Arduino а это значит что написать код для взаимодействия с компьютером по USB можно буквально в несколько строк что сильно упрощает жизнь.

Для клавиатуры PS/2 также существует библиотека и при том не одна и использовать их можно на Arduino. Одной из таких библиотек является библиотека PS2KeyAdvanced которую написал Paul Carpenter. По идее всё должно быть просто но использовать две библиотеке в одном скетче для Arduino не получается т.к. они обе используют внешние прерывания. Переделать библиотеку PS2KeyAdvanced для работы без прерываний можно но при этом коды нажатых клавиш будут определяться не всегда поэтому самым простым выходом в данном случае является использование 2х плат Arduno каждая из которых будет “заниматься своим делом” т.е. одна Arduino будет принимать данные с клавиатуры, перерабатывать их (т.к. PS/2 гораздо проще и меньше грузит микроконтроллер) и отсылать на другую которая будет отсылать коды нажатых клавиш по USB на компьютер. Теперь давайте рассмотрим схему:

Рисунок 1 – Переходник PS/2 – USB

С подключением PS/2 клавиатуры нет никаких проблем, она подключается напрямую к Arduino по стандартной схеме. Подключить USB разъём к Arduino можно двумя способами:

1) через стабилитроны,

2) с понижением питания.

Я выбрал вариант 2 т.к. при подключении через стабилитроны могут возникать и возникают часто (судя по переписках в форумах) проблемы. Стабилитроны д.б.

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

статью включение светодиода через usb)! Если Arduino 3х вольтовое то никаких дополнительных мер по снижению напряжения его питания применять не надо, в противном же случае придётся “влезть” в плату паяльником и внеси необходимые изменения. В моём случае изменений вносить не пришлось т.к.

я использовал самодельную Arduino на микроконтроллере ATmega8 и питание мог делать любое которое возможно с таким микроконтроллером. Для того чтобы связать две Arduino с разными логическими уровнями по последовательному интерфейсу UART пришлось использовать резисторы с большим сопротивлением т.к.

это не не позволит портам микроконтроллеров перегореть.Теперь давайте рассмотрим скетч для Ардуино работающего с клавиатурой: #include “PS2KeyAdvanced.h” #define DATAPIN 7 #define IRQPIN  3 uint16_t c; PS2KeyAdvanced keyboard; byte keys[1000];//convert ps2 to usb hid keyboard void setup() {

  for(byte i = 0;i

Скетч получился довольно длинный т.к. для преобразования кодов клавиш с клавиатуры в коды для отправки по USB используется массив “keys”.

Это обычный массив который используется необычным способом а точнее как ассоциативный массив и из за этого он избыточен и занимает много места в и без того забитой памяти микроконтроллера но зато дальше можно написать только одну строку не длинного текста для преобразования кодов что очень удобно.

В условии в основном цикле проверяется “не отпущена ли кнопка”.

В данный массив записаны не все коды клавиш, в скетче много “магических чисел” и вообще он далеко не идеален и клавиатура в конце концов не сможет делать всё что могла бы обычная usb клавиатура но данный скетч в открытом доступе и его может исправить и дополнить любой желающий который также может выложить свой скетч в открытый доступ поэтому давайте перейдём с следующему скетчу: #include “UsbKeyboard.h” void setup() {   Serial.begin(9600);

  TIMSK &= !(1

Первый скетч (ps2) можно скачать по ссылке https://yadi.sk/d/7RgFtn9ErWkXm
Второй (usb hid) по ссылке https://yadi.sk/d/b5mNkEIarWkXn

КАРТА БЛОГА (содержание)

Arduino UNO можно заказать по ссылке http://ali.pub/1v22bh, Atmega8-pu которую (можно превратить в Arduino) по ссылке http://ali.pub/qgw75, Raspberry Pi 3 (на котором испытывалась клавиатура в видео) по ссылке http://ali.pub/91xb2.

Источник: http://electe.blogspot.com/2016/05/usb-ps2-ps2-to-usb-converter.html

Атомная клавиатура виндуксоида (HID USB)

0Спам69 Alexander   (21.06.2012 20:55)

Вот здесь: http://vusb.wikidot.com/project:wishabi довольно внятный пример работы с составным устройством. Правда ин инглиш и на Си….

0Спам66 max50   (11.06.2012 22:28)

Quote (bascom)

200?'200px':''+(this.scrollHeight+5)+'px');>Осталось слить 2 дескриптора и их обработку. Кто смелый?!

Mrshilov здесь:http://mcselec.com/index2.php?option=com_forum&Itemid=59&page=viewtopic&t=7537&postdays=0&postorder=asc&highlight=usb+port&start=225&sid=ff776f7b7704a4f37f4daeaeb4307385

Quote (Mrshilov)

It is really possible to make 2 interfaces with this library! I simpy add second Interface, HID, Endpoints and Report descriptors and make a choice to choose one of two Report descriptor in Sub Usb_processsetup:

Code

………………….    Case &B10000001:    Select Case _usb_rx_buffer(3)    '  CASE _usb_REQ_GET_STATUS:    '  CASE _usb_REQ_GET_IFACE:    Case _usb_req_get_descriptor    '_usb_rx_buffer(4) is the descriptor index and (5) is the type    Select Case _usb_rx_buffer(5)    Case _usb_desc_report:    Case _usb_desc_report:    If _usb_rx_buffer(6) = 0 Then Restore _usb_hid_reportdescriptor  'first interface  !!!!!!!!!    If _usb_rx_buffer(6) = 1 Then Restore _usb_hid_reportdescriptor1  'second interface  !!!!!!!!!    End Select    Senddescriptor = 1    '  CASE _usb_DESC_PHYSICAL    '  CASE _USB_DESC_HID    End Select    End Select  

  ……………………..

And it works!!!

0Спам68 bascom   (12.06.2012 11:58)Без описания и кода перезагрузки дескрипторов простому пользователю мало что понятно будет.

-1Спам65 совет   (26.05.2012 15:50)

а вам не кажется что проще использовать другую комбинацию клавиш? при этом использовать всего два пальца вместо трех… ctrl+shift+esc. первые две большим пальцем а эск указательным или средним)))

0Спам67 max50   (12.06.2012 07:23)Дело не в “распальцовке”, а в том, чтобы на одном МК сделать и обычную клаву, и мультимедиа и в ней сделать любые сочетания клавиш.

0Спам62 max50   (22.05.2011 19:19)При таком раскладе 31 символ занимает 58% памати ATMEGA168. Как бы не проблема, но все же.

0Спам63 bascom   (22.05.2011 21:31)Логично оформить повторяющийся участок кода в виде процедуры с параметром – кодом нажатой клавиши.

Code

Declare Sub Usb_write_key(keycode As Byte) If Key(1) = 0 Then  ' LEFT CTRL    Call Usb_write_key(1) End If Sub Usb_write_key(keycode As Byte) Portd.7 = 1 If _usb_tx_status._usb_txc = 1 Then    _usb_tx_buffer2(2) = keycode  ' Нажатие клавиш    _usb_tx_buffer2(4) = 0    Call Usb_send(_usb_tx_status2 , 8)  'Сообщение в компьютер    Waitms Paus   End If   If _usb_tx_status._usb_txc = 1 Then    _usb_tx_buffer2(2) = 0  ' Отжатие клавиш    _usb_tx_buffer2(4) = 0    Call Usb_send(_usb_tx_status2 , 8)  'Сообщение в компьютер    Waitms Paus   End If    Portd.7 = 0   End If   End sub

0Спам64 max50   (22.05.2011 22:10)

Quote (Alex)

200?'200px':''+(this.scrollHeight+5)+'px');>Логично оформить повторяющийся участок кода в виде процедуры с параметром – кодом нажатой клавиши.

Логично!Спасибо!

0Спам61 max50   (22.05.2011 18:46)Всем привет! Делаю передачу конкретного символа так:

Code

If Key(1) = 0 Then  ' LEFT CTRL   Portd.7 = 1   If _usb_tx_status._usb_txc = 1 Then   _usb_tx_buffer2(2) = 1  ' Нажатие клавиш   _usb_tx_buffer2(4) = 0   Call Usb_send(_usb_tx_status2 , 8)  ' Сообщение в компьютер   Waitms Paus   End If   If _usb_tx_status._usb_txc = 1 Then   _usb_tx_buffer2(2) = 0  ' Отжатие клавиш   _usb_tx_buffer2(4) = 0   Call Usb_send(_usb_tx_status2 , 8)  ' Сообщение в компьютер   Waitms Paus   End If   Portd.7 = 0

  End If

Собственно вопрос: можно ли как-то по другому, а то такой способ занимает много памяти?

Заранее спасибо!

0Спам59 AlekS   (06.05.2011 23:30)по 2 вопросу можешь кусок кода набросать? ни как сооброжалка ,,,,, как паразитный зарядник и таймер соединить. Х-(

вроде порт на выход, потом на вход, пускаем таймер, замер ,,,,, и все,,,, на деле туплю.

0Спам60 bascom   (06.05.2011 23:33)

В ближайшее время не могу.

0Спам57 AlekS   (06.05.2011 19:43)Bascom Есть 2 вопросаЖ 1, это- WWW.gethip.net (056-USB-программатор – легко! (USBTiny)) В баскоме пойдет? 2, там-же статья о кейпаде, реалезуема в баскоме?

можно в личку.

0Спам58 bascom   (06.05.2011 20:11)

Я таким программатором прошивал, но только дудкой. В Баском напрямую не цепляется. Лучше на 8 меге USBASP сделать, сложность изготовления и набор деталей практически один и тот же, зато поддерживается и Баскомом, и многими другими оболочками.
По 2 вопросу тоже не вижу особых проблем, но нужно пробовать в коде.

0Спам56 max50   (13.03.2011 21:51)

Quote (max50)

200?'200px':''+(this.scrollHeight+5)+'px');>Ну и хаб во внутрь затолкать.

По случаю был приобретен хаб на четыре порта. Так, на всякий случай.

0Спам55 max50   (13.03.2011 19:45)

Quote (bascom)

200?'200px':''+(this.scrollHeight+5)+'px');>Всё передаётся через дескриптор мыши…

Клавиатура Defender Multimedia Maverick (KM-5460/9510) виндой определяется как HID-клавиатура и HID-мышь. http://ifolder.ru/22380311 Попробовал новый дескриптор, пишет что устройство не возможно запустить. У меня сложилось впечатление, что надо подправлять конечные точки, классы и т.д. Сам пока что мало чего понял.

0Спам45 max50   (05.03.2011 21:14)

Code

Кнопка – код Pictures – 10030305100000 Rotate – 10030328100000 Zoom+ – 10030320100000 Zoom- – 1003031F100000 100% – 10030321100000 FN – 1003032C100000 Word – 1003032C104110 Excel – 1003032C104210 Календарь – 1003032C104310 Калькулятор – 1003032C9201 Мои документы – 1003032C104510 Новая папка – 1003032C104610 Печать – 1003032C104710 Сохранить – 1003032C104810 Presets  a – 1003032C104910 Presets  b – 1003032C104A10 Presets  c – 1003032C104B10 Presets  d – 1003032C104C10 Vol- – 100303EA000000 Mute – 100303E2000000   Vol+ – 100303E9000000 Search – 10030321020000 E-mail – 1003038A010000 VoIP – 10030301100000 Выпадающее меню – 1003032C100000   0000650000000000 Scroll Lock – 1003032C100000   0000470000000000 Проигрователь – 10030383100000 Случайный порядок(Shuffle) – 10030329100000 Skip backward – 100303B6000000 Skip forward – 100303B5000000 Play/Pause – 100303CD000000

Sleep – 10030401000000

Источник: http://bascom.at.ua/publ/atomnaja_klaviatura_vinduksoida_hid_usb/1-1-0-54

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}