Вот видео работы устройства !!!Вот видео работы устройства !!!
Как известно, одной из отличительных черт правильного падонка является способность много и быстро "срать в каментах". С другой стороны, как установили бретанские учоные, словарный запас падонков относительно не велик и сопоставим по размерам со словарным запасом Эллочки-людоедки из известного произведения Ильфа-Пертова. Фразы, используемые в речи падонка, достаточно просты и типизированы. Мысль выражается путем комбинирования в различных вариантах относительно небольшого количества слов или фраз. В виду всего вышесказанного, было решено создать дополнительную клавиатуру, которая помогала бы падонку быстро и без ошибок вводить текст в компьютер путем одномоментного ввода всей фразы целиком, а не по отдельным буквам в случае обычной клавиатуры. В результате была разработана и испытана дополнительная клавиатура, состоящая из 40 кнопок и подключаемая между компьютером и "настоящей" клавиатурой. 39 клавиш дополнительной клавиатуры используются непосредственно для вывода фраз, а одна клавиша для изменения режима выводимых букв (все маленькие; первая буква большая, остальные маленькие; все буквы большие).
Структурная схема разработанной дополнительной клавиатуры (в дальнейшем девайс) представлена на рисунке 1. Алгоритм работы достаточно прост и понятен из блок-схемы. "Настоящая" клавиатура соединена с компьютером через аналоговые ключи девайса. Питание идет от компьютера. Всё основное время ключи переключены в положение "настоящая" клавиатура-компьютер. Контроллер (МК) девайса постоянно опрашивает свою локальную клавиатуру, состоящую из 40 кнопок и организованную в 8 строк по 5 столбцов, и как только зафиксирован факт нажатия кнопки (с учетом дребезга контактов), происходит вывод фразы. Вначале МК, не разрывая цепи компьютер-клавиатура, подключает на чтение линии clk и data для проверки на них наличия "1" в течение чуть больше 1 периода clk, что является признаком свободной линии (нет передачи данных). Если линия свободна, размыкаются ключи клавиатура-компьютер, выводы МК переключаются на вывод и замыкаются ключи МК-компьютер. После этого происходит передача фразы, соответствующей нажатой кнопке. По окончании передачи восстанавливается исходное положение ключей клавиатура-компьютер. Если же линия клавиатура-компьютер занята и не освобождается в течение некоторого времени, передача фразы не происходит и после аудиовизуального сообщения об ошибке путем мигания красно-зеленым светодиодом и генерации звукового сигнала на пьезодинамик, МК возвращается к опросу своей клавиатуры. Питание "настоящей" клавиатуры во время отключения линий данных не прерывается, что позволяет сохранить переданные в неё данные от компьютера (состояние индикаторов, длительность автоповтора и др.).
Подробное описание протокола обмена данными клавиатуры с компьютером можно найти на сайте http://www.beyondlogic.org/keyboard/keybrd.htm. В нашем случае нужен только вариант передачи от клавиатуры к компьютеру. Для обмена данными служат две линии – Data и Clk. При передаче данных клавиатура выставляет очередной разряд данных на линию Data и подтверждает передачу задним фронтом ("1" в "0") на линии Clk. Передача одного байта состоит из 11-ти бит. Один стартовый бит (всегда "0"), 8 бит данных (D0-D7), бит чётности и один стоповый бит (всегда "1"). Бит чётности равен "1", если в байте данных чётное количество бит, иначе "0".
При нажатии на клавишу клавиатура передает скан-код этой клавиши, состоящий из одного или нескольких байт, а при отпускании – сначала префикс 0F0h, а потом скан-код отпущенной клавиши. С точки зрения клавиатуры, все клавиши, включая системные (типа Caps Lock, Pause, Control и др.), ничем не различаются. Каждая клавиша имеет только один скан-код, поэтому режимы типа Caps Lock, Num Lock, русских букв и другие обрабатываются программно уже в компьютере. Таблицу скан-кодов можно посмотреть на рис. 2, а пример передачи данных при нажатии клавиши "D" (или, если хотите, - "d", "В" или "в") на рис.3. Режим автоповтора заключается в том, что если клавиша не отпущена, через определенные интервалы времени клавиатура повторно посылает скан-код нажатой клавиши.
Частота следования импульсов на линии Clk по разным источникам находится в пределах 10-30 кГц. Однако реально, на мой взгляд, этот диапазон намного шире. При экспериментах с передачей данных все отлично работало даже при 6 кГц. В моей "настоящей" клавиатуре частота clk была около 11,5 кГц. Также абсолютно не критично время между 2 посылками скан-кодов и на практике его можно взять где-то в районе 10 Гц (передача 10 скан-кодов в секунду). Однако слишком сильно уменьшать время не следует, так как компьютер может не успеть обработать нажатия клавиш и будет издавать динамиком писк переполнения буфера (наверняка вы все его слышали, например, если на подвисшем компе долго жать клавиши).
С теорией покончено, перейдем к практике. Схему девайса можно увидеть на рисунке 4. Т.к. протокол обмена не критичен к точным временнЫм интервалам, можно обойтись без кварца, использовав внутренний генератор и освободив 2 ноги контроллера для других нужд. Перемычки JP1-JP3 нужны для внутрисхемного программирования. При программировании их надо снять, освободив тем самым разъем ICSP для подключения программатора. В гнездо XS1 типа "мама" подключается "настоящая" клавиатура, а XS2 - "папа", втыкается в компьютер (я взял кабель от ненужной клавиатуры).
В первом возвращаемом retlw значении (len) задается количество символов (букв) в фразе + 1. Далее идут скан-коды символов (букв), составляющих фразу. Определить какой скан-код надо вписать, можно так. Если буква русская, смотрим на клавишу "настоящей" клавиатуры, где она находится и запоминаем английскую букву, которая нарисована на этой же клавише. Далее определяем скан-код клавиши по рис.2 и вписываем его в подпрограмму. Длина одной фразы не может быть больше 250 символов. К тому же надо учитывать, что объем памяти, отведенный под все фразы, составляет чуть меньше 1К. Также следует проверить после компиляции (в сгенерённом листинге), что ни одна подпрограмма не попала на границу страниц программной памяти (адреса кратные 256) и не находится на разных страницах. В принципе, в исходнике я эту ситуацию разрулил директивами org, но иметь это в виду не помешает. Также нельзя использовать знаки, скан-коды которых состоят из более чем одного байта (например, "/" на дополнительной клавиатуре). Список фраз в моем исходнике и их соответствие кнопкам падонкафской клавиатуры приведен в таблице.Key Фраза
01 абасрацца
02 абассацца
03 аффтар
04 выпей йаду
05 пеши исчо
06 убей сибя ап стену
07 спасиба падрачил
08 ахуеуйть дайте две
09 аццкий сотона
10 беспесды
11 ф дисятке
12 жывотное
13 жжош сцуко
14 ф топку
15 ф газенваген
16 зачот
17 низачот
18 ниибёт
19 ниибаццо
20 кросафчег
21 ниасилил патамушта многабукафф
22 отжыг
23 пелотка
24 пацтулом
25 пацталом
26 упалпацтол
27 валялсо пацтулом
28 ржунимагу
29 парвало моск нах
30 слиф зощитан
31 тема сисег раскрыта
32 тема сисег нираскрыта
33 ужоснах
34 фигасе
35 плюс пицот
36 криатифф
37 учи олбанский
38 риальный падонаг
39 йа креведко
Как писалось выше, каждая клавиша имеет только один скан-код, поэтому изменение регистра букв происходит путем посылки скан-кода клавиши "Shift". Например, [Shift] первая буква фразы [F0h] [Shift] остальные буквы фразы. Или [Shift] все буквы фразы [F0h] [Shift]. При этом надо учитывать состояние Caps Lock на "настоящей" клавиатуре. Если он включен, эффект от Shift''''а будет как раз обратный. Гляньте табличку возможных вариантов написания фразы в зависимости от состояния Caps Lock.HL1 на клаве падонка Caps Lock выключен Caps Lock включен
не светится пример ПРИМЕР
красный Пример пРИМЕР
зелёный ПРИМЕР пример
Использование Shift для изменения регистра букв накладывает еще одну особенность на подбор фразы. Если используются не буквенные клавиши, а цифры или клавиши со знаками препинания или скобками, то при нажатом Shift''''е они изменят значение на другое. Например цифра 5 после посылки скан-кода [Shift] становится знаком "%". Поэтому такие символы лучше не использовать или смириться с тем, что при некоторых режимах они будут отображаться по другому.
Клавиатура падонка тестировалась на различных компьютерах, начиная с Pentium IV и AMD AthlonXP 2600+, до довольно древних PIII и нотика Compaq Armada 1500c, и ни на одном из них не было выявлено каких-либо проблем с работой девайса. Однако вполне может случиться, что на каком-нибудь компе она не заработает. Скорее всего дело будет во временнЫх интервалах между посылками скан-кодов. В исходнике есть несколько подпрограмм для генерации различных задержек. Изменяя их в разумных пределах, скорее всего можно будет добиться нормальной работы девайса. Итак, перечислю их в порядке важности (начинать подбор рекомендую с первой):
• delay_key_out - длительность между отсылкой скан-кодов
• delay_F0 - длительность между отсылкой префикса F0h и скан-кода
• delay_kbclk - задаёт длительность 1/2 периода clk
И напоследок, раскрою тайный смысл двух ячеек EEPROM. Первая имеет адрес 01 и там записана переменная, отвечающая за добавление пробела в начало и/или в конец фразы. Если бит 0 равен "1", то пробел добавляется в начале фразы. Если бит 1 равен "1", то пробел добавляется в конце фразы. Если какой-нибудь из этих битов равен "0", то пробел не добавляется в соответствующей позиции. Ячейка по адресу 03 отвечает за начальную инициализацию кнопки "Mode". Если там записан 0 - при включении устанавливается режим маленьких букв, 1 - режим "первая большая, остальные маленькие" и 3 - режим больших букв. Если записано любое другое число, оно приравнивается к 0. Изменить эти ячейки можно или в исходнике с последующей перекомпиляцией, или прямо в программе-прошивальщике в области данных EEPROM (например, см. рисунок 6 для WinPic800).
Рис. 6. Изменение ячеек EEPROM в программе WinPic800
При прошивке контроллера никаких фьюзов вручную выставлять не надо, все нужные данные находятся внутри HEX-файла. Достаточно просто открыть HEX и сразу запустить программирование. А тем, кто решит повторить сей девайс - удачной сборки и эксплуатации... Да, и не забывайте перед использованием клавиатуры падонка переключаться на русский язык.
Голосуем ребзя на форуме регистрация не нужна !