Pull to refresh

Кнопка Судного Дня или аппаратная горячая клавиша

Reading time 5 min
Views 73K

Наверное, каждый из читателей сталкивался с тем, что ему не хватает горячих клавиш. Наиболее ходовые и простые комбинации оказываются занятыми, а оставшиеся требуют ловкости рук баяниста. Особенно это актуально для ноутбуков, где клавиш уменьшенное количество. В частности, для макбука, где ряд мультимедийных клавиш совмещен с функциональными.
Таким образом, для действия “Make Project”, мне захотелось иметь отдельную кнопку. Эта идея жила где-то в подсознании довольно долгое время, пока однажды мне на глаза не попалась пусковая кнопка станка на 660В 10А. Подробности, как удалось ее подключить к ноутбуку через блюутуз, читайте под катом.

Прежде всего, мне хотелось, чтобы девайс был беспроводным и не требовал установки драйверов.
Немного поискав, за основу я взял Bluesmirf HID модем от Sparkfun.



Еще был вариант Bluegiga, но т.к. на сайте Sparkfun можно было купить еще и другие необходимые компоненты, то остановился на первом. Этот модем определяется, как беспроводная клавиатура и может управляться через UART. В качестве управляющих “мозгов”, я решил использовать контроллер ATTiny2313.

Листинг того, что мне понадобилось:
• Bluesmirf HID модем
• ATTiny2313 + подложка 20 pins
• Макетная платка 11х16 отверстий
• ISP AVR программатор, подойдет любой, стоит дешево.
• FTDI TTL кабель. По сути – это обычный USB-to-serial кабель, но с выходным напряжением 5V. Этот кабель очень понадобится для настройки модема и отладки управляющего контроллера.
• Для удобства отладки и сборки, все компоненты соединяются через мини-разъемы, поэтому понадобятся еще две линейки break away male headers, right angle и break away female headers.
• Резисторы – 10 кОм 2 шт., 200 Ом 1 шт., конденсаторы – 0.1 мкФ 1 шт., 1 светодиод.
• Разъем для программатора ISP

Bluesmirf HID модем


Для того, чтобы использовать модем в схеме, нужно для начала его сконфигурировать. Для этого нужно подключится к нему через UART и в режиме команд установить необходимые настройки.
Прежде всего, нужно включить у девайса профиль HID, чтобы он стал определятся, как клавиатура. Дело в том, что у модема есть два профиля – SPP, который по сути своей – дублирование UART подключения через блютуз и HID, когда чип определяется как HID устройство – т.е. клавиатура или мышь. До версии 6.10 по-умолчанию был загружен профиль HID, после – SPP.

Итак, подключаем FTDI кабель к выводам чипа:
Modem Pins       Cable Pins
VCC ------------ VCC
GND ------------ GND
TX-0 ----------- RX
RX-1------------ TX
RTS-0 ----+
          |
CTS-1 ----+


Далее подключаемся вашей любимой терминал-программой к COM порту кабеля, я для этого использовал CoolTerm.
На Mac OS X чтобы получить список всех COM портов, выполните команду:
ls /dev/tty.*


У меня кабель определялся, как /dev/tty.usbseria-AH019ML6
Чип по умолчанию у меня заработал на скорости 115200, остальные настройки – no flow control, data bits – 8, parity – none, stop bits – 1, Enter Key Emulation – CR. Желательно добавить Local Echo, тогда терминал будет показывать набранные символы.
Чтобы перейти в режим команд, нужно набрать $$$ без символа перевода строки в конце. Если настройки выставлены правильно, то чип вернет CMD – это значит, что он перешел в режим команд. Теперь можно задать необходимые настройки.
Все команды ниже нужно заканчивать символом перевода строки:
• S~,6 – переключится в профиль HID
• SU,96 – поменять скорость на 9600
• SN,Doomsday Button – поменять имя устройства на Doomsday Button
• SM,6 – после этой команды модем станет переподключаться автоматически после потери соединения.
• R,1 – перезагрузить модем

После перезагрузки модема, поменяйте также скорость в настройках терминала.
Теперь чип определится, как клавиатура. Если подключить его к компьютеру и в терминале набирать символы, то в компьютере будут генерироваться соответствующие нажатия клавиш. Помимо обычных печатных символов, модем может генерировать различные комбинации клавиш. Напрямую в терминале это сделать не получиться, для этих целей я написал скрипт на питоне, который подсоединяется к COM порту и запускает комбинацию клавиш с задержкой. Задержка нужна для того, чтобы успеть переключиться на другую программу и удостовериться, что комбинация клавиш верная. Для просмотра я использовал EventViewer программы KeyRemap4MacBook.
Скрипты смотрите в github репозитории проекта github.com/Nepherhotep/doomsday-button.

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

Управляющий модуль


Модуль на основе ATTiny2313 управляет модемом через тот же UART.
Схема относительно простая, ниже ее принципальная схема, нацарапанная на листке:



Как таковой разводки нет, т.к. схема окончательно формировалась во время сборки.

• VCC, GND, RX, TX (см. даташит по контроллеру) подключить к UART штекеру
• MOSI, MISO, GND, VCC, SCK, RST – к разъему программатора, RST пустить через 10 кОм на VCC.
• К ножке 12 (PB0) контроллера подключить отладочный светодиод, другой его вывод пустить на VCC через резистор 200 Ом.
• Один вывод кнопки подключить к ножке 6 (INT0) контроллера, вторую пустить на GND. Чтобы убрать “дребезг” нажатия кнопки, параллельно ней желательно подключить емкость. Я подключил 0.1 мкФ, т.к именно такой конденсатор у меня был в наличии, но можно и больше. Без емкости при нажатии будет генерироваться несколько последовательных нажатий. На ножку 6 нужно также подключить VCC через резистор 10 кОм.

После подключения ISP и светодиода, можно сразу проверить работоспособность схемы, прошив ее проектом proto/ledblink из репозитория.

Чтобы скомпилировать схему, нужно запустить команду make flash. Для прошивки нужны драйвер программатора и утилита avrdude. На маке просто поставьте пакет CrossPack. Возможно, вам также придется поменять некоторые настройке в Makefile, к примеру программатор usbtiny на вашу модель.

Работоспособность UART можно проверить, прошив контроллер прошивкой отсюда www.getchip.net/posts/078-proverka-modulya-uart-attiny2313-testovaya-proshivka
В github репозитории смотрите его в proto/uart_test. Запустите скрипт write-fuses.sh чтобы прошить fuse биты, а затем write_flash.sh – чтобы прошить прошивку. Подключаем плату к FTDI кабелю:
VCC -- VCC
GND -- GND
RX -- TX
TX -- RX


Если все работает как надо, переходим в проект uart_attiny2313. Прошивка работает по такому принципу – по поступлению на ножку INT0 низкого сигнала, создается прерывание, которое пробуждает контроллер из сна, и запускается функция fire_keypress. В этой функции отправляется комбинация символов SHIFT+F10 на UART и загорается/гаснет светодиод.

Если по нажатию на кнопку в терминале выводится нужная комбинация символов (в моем случае – это FE 02 02 42 FE 00, см. даташит модема), это значит, что можно подкючать плату к модему. Разводка та же, что и при подключении модема к кабелю.

Далее подсоединяем в соответственные разъемы питание и кнопку питания.





Теперь остается разместить все в корпусе.



Вуаля! Кнопка Судного Дня готова! Теперь по нажатию на нее, будет создаваться события – SHIFT-F10, что соответствует команде сборки проекта в Idea IDE.



Напоследок видео, как оно работает.

www.youtube.com/watch?v=JafRsrstjKw
Tags:
Hubs:
+86
Comments 46
Comments Comments 46

Articles