USB Thinkpad Клавиатура ноутбука

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

(кросс-пост от http://technicallycompetent.com/TMK-thinkpad-keyboard/ )

Я хорошо начал с atmega32u4 на плате Arduino.

Существует как продукт , 80USD, если вам повезет, сейчас 300.

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

Первым шагом был поиск разъема для клавиатуры. Он был идентифицирован как JAE AA01B-S040VA1 на electronics.stackexchange с некоторыми частями, перечисленными в качестве заменителей Погоня за заменой приводит к WM6787CT-ND который выглядел многообещающе, и после заказа нескольких, нашел, что это действительно соответствует.

Моя первая в мире пайка для поверхностного монтажа: Моя первая в мире пайка для поверхностного монтажа:   Красиво, не правда ли Красиво, не правда ли.

Я потерял файлы доски, но вы можете закажите здесь ,

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

Каждый из их примеров поставляется с несколькими «вариантами», такими как vusb или lufa.

V-USB Это программная реализация низкоскоростного USB-устройства для микроконтроллеров Atmel AVR®, позволяющая собирать USB-устройства практически с любым микроконтроллером AVR®, не требуя дополнительного чипа.

LUFA (Легкая USB Framework для AVR, ранее известная как MyUSB) - это мой первый набег в мире USB. Это полный USB-стек с открытым исходным кодом для Atmel AVR8 с поддержкой USB и серии микроконтроллеров AVR32 (некоторые из них), выпущенный под разрешающей лицензией MIT (подробные сведения о лицензии см. В документации или источнике проекта). Библиотека поддерживает всю линейку USB AVR и USB AVR плат Atmel, как и любые пользовательские пользовательские платы, через пользовательские драйверы аппаратных плат, предоставляемые пользователем.

ТМК рекомендует использовать LUFA, если это возможно.

Мне очень четко сказали несколько часов в попытке использовать USB-оборудование для V-USB, это был плохой выбор.

Изученные варианты микроконтроллера, ограниченные тем, что у меня было под рукой

  • голый atmega328p
    • Требуются внешние часы и внешнее USB-оборудование. Работают внешние часы, аппаратное обеспечение USB - это то, что было сложно.
  • Arduino Pro Micro
    • atmega32u4, поэтому встроенное USB-оборудование
    • не хватило булавок, но сначала запустился пример одноклавишного TMK
  • Arduino Micro
    • atmega32u4
    • имеет 24 контакта, с 25-м, если вы хотите припаять к TX Led

Это полезное изображение Это полезное изображение. Больше плат и распиновок процессора заархивировано на RobotItaly который также находится на archive.org.

Человек, который сделал это ( http://pighixxx.com ) имеет новый дизайн , Мне больше нравится этот дизайн, и мне не нравится их сайт, он пытается быть анимированным и имеет причудливый стиль, но его сложно использовать и он медленно загружается.

avrdude -v -c avr109 -p m32u4 -P / dev / ttyACM2 -U flash: w: file.hex

  • -c avr109 - это программист, похоже, тот, который используется для общего «чип имеет USB, он будет иметь дело»
  • -p m32u4 устанавливает программируемое устройство, atmega 32u4
  • -P / dev / ttyACM2 - это просто порт на моем компьютере
  • -У прошить все, что мигает файл на устройство. Вы также можете установить или прочитать предохранители здесь.

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

Теперь посмотрим на матрицу ключей.

В стиле примера TMX, который я использовал, я создал диаграмму клавиатуры ascii, это будет полезно в основном позже, когда будет более одного «слоя». В стиле примера TMX, который я использовал, я создал диаграмму клавиатуры ascii, это будет полезно в основном позже, когда будет более одного «слоя»

Слой является ключевой картой, и вы можете иметь несколько слоев. Итак, на этой клавиатуре num lock включит другой слой, посмотрите, как 890 UIOP JKL; M,. / Есть цифры и цифры на них, которые соответствуют цифровой клавиатуре? Слой является ключевой картой, и вы можете иметь несколько слоев Numlock включает их вместо «обычных» клавиш. Это использует несколько слоев.

Rampadc предоставил единственные данные, которые я смог найти в этой матрице, Rampadc предоставил единственные данные, которые я смог найти в этой матрице,   а также эта распиновка для клавиатуры   Они также любезно предоставляют матрицу в формате двумерного массива, довольно близко к тому, что TMK ожидает в   их репозиторий GitHub   , а также эта распиновка для клавиатуры Они также любезно предоставляют матрицу в формате двумерного массива, довольно близко к тому, что TMK ожидает в их репозиторий GitHub ,

Они помечают его как 16 × 8 строк / столбцов, и они приводят в действие каждую строку и читают столбец. Я использую его как 8 × 16 контактов, так как он лучше работает с примером кода чтения матрицы из Клавиатура Happy Bucking Spring , Считать 8 входов немного повезло, так как каждый порт имеет 8 контактов (вплоть до того, что не все контакты существуют, или, возможно, просто не выставлены). Означает, что мы можем просто посмотреть на PINB, который является состоянием всех 8 выводов, установленных для ввода, чтобы прочитать всю строку.

Интересный факт: AREF! = 3V3, он не будет питать цифровой расширитель ввода / вывода i2c, независимо от того, сколько вы пытаетесь отладить линии i2c с помощью осциллографа.

Без расширителя, есть 24 контакта, или 16 + 8, или просто достаточно для матрицы, и ничего больше, что означает отсутствие трекпойнта на этот раз.

Подключите его, напишите код для сканирования матрицы и молитесь темным богам AVR.

Это действительно сработало, боги ответили.

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

После исправления несоответствия есть еще несколько больших проблем:

  • Super и menu - левый alt и правый alt соответственно, даже если alt не определен где-либо в раскладке.
  • Даже устанавливая каждую неоперацию в матрице, клавиши alt ничего не делают.
  • Fn отправляет несколько нажатий клавиш, хотя на распиновке написано, что у fn должен быть свой собственный вывод, вывод 1 - так же, как и питание.

Код

make -f Makefile.lufa clean && make -f Makefile.lufa

avrdude -v -c avr109 -p m32u4 -P / dev / ttyACM2 -U flash: w: t61_lufa.hex

Следующие шаги:

  • Выберите чип AVR с большим количеством операций ввода-вывода, сделайте специальную плату для него.
  • Выясните, что случилось с матрицей, которая делает alt неправильным, а super / page всегда alt.
  • Тест трекпада, не должно быть сложно, есть пример кода.
  • исправьте клавишу fn и начните использовать слои раскладки ключей TMK.
  • слой num lock.