Просмотр полной версии : ZX UniKeyboard или как подключить к Спеку клавиатуру произвольной конфигурации
valerium
23.01.2021, 03:50
Наверное у каждого спектрумиста есть в запасах какая-нибудь компактная и удобная клавиатура от ноута или еще чего мобильного, которую бы он хотел видеть на своем спеке, но обычно такие идеи отпадают, если клавиатура пленочная и не может работать в формате PS/2...
А начиналось все здесь (https://zx-pk.ru/threads/32497-kak-peredelat-prakticheski-lyubuyu-klaviaturu-v-ps-2.html). Бравый форумчанин CLR опубликовал решение для переделки любой клавиатуры в формат PS/2, и это отличное решение, но были сложности: большинству Спеков нужно не PS/2, а простую матрицу 5х8 - это раз; надо было как-то выяснять конфигурацию клавиатурной матрицы - это два. Да и сама реализация PS/2 в простых контроллерах, которые работают с PCшной клавой, далека от стандарта - и в этом случае это приводило к "несовместимым диалектам формата PS/2" )
Когда случились новогодние каникулы, я начал призадумываться над тем, как это реализовать иначе.
Учтя все идеи и обсуждения вышеупомянутой ветки, где я немало намусорил (сорри), было получено вот такое решение:
https://github.com/valerium-labs/zx-unikeyboard
За основу взята разработка andykarpov для клавиатурного контроллера на AVR+CPLD, только AVR получает данные не с PS/2, а с нашей ноутбучной матрицы, а в CPLD реализован регистр состояния клавиш и спецкнопок Спека, который Спек может опрашивать как свою штатную клавиатуру (и если кратко - то да, без /WAIT).
Ног надо было побольше, поэтому экспериментировал на ATMega32 для чтения матрицы, а CPLD-часть хоть и удалось упростить, но ПЛИС осталась та же (7128 или 3128). Сейчас поддерживаются клавиатуры до 26 пин.
Как предлагал Eltaron, реализована идея обучаемости схемы. То есть изначально в атмегу заливается обучающая прошивка (она же известна как "тестовая"), которая через компорт при помощи "специальной программы" (скриптик на autoit3) транслирует номера линий нажатых клавиш. Когда опрошена вся клавиатура и получены для каждого клавишного имени ее матричные координаты, строится описание массива клавиш, которое затем компилируется вместе с исходником "рабочей" прошивки. С ней контроллер уже используется на Спеке.
Как это использовать - более подробно изложено в доках проекта, например в этом (https://github.com/valerium-labs/zx-unikeyboard/blob/main/readme_ru.txt)
Сейчас реализовано на макетке на atmega32-16au и epm7128slc84, но плату развел и заказал под epm3128atc100, жду доставку, поэтому боевой вариант еще не обкатан.
Отлаживал на клавиатуре Asus X200, сейчас добыл еще клавиатуру от Asus X551 на 24 пина, 102-клавишная. На адаптацию такой клавиатуры с нуля уходит минут 10-15, причем бОльшую часть времени занимает составление клавиатурного шаблона с именами клавиш (разумеется, я делал это только единожды). Шаблон можно теперь и не писать в нуля, а взять за основу имеющийся - чтоб попасть в имена клавиш и почти не править исходник рабочей прошивки.
Ну и вот как это сейчас выглядит:
Программа "обучения"
74483
74484
Макет на Спеке.
74482
74485
valerium
07.02.2021, 09:08
Приехали платы, не без косяков, конечно, но опробовал уже даже в двух экземплярах вариант на 3128 - запустилось без проблем.
Что касается ошибок на плате - было два ляпа:
1. перерисовывал схему с 7128, потому на коннектор JTAG на питание программатора подал 5в вместо 3,3в.
2. при разводке платы схватил первые попавшиеся двухрядные хедеры на 2,54мм, оказалось, что это ответная часть (зеркальное расположение пинов) - и я это при заказе не увидел. Пришлось коннекторы JTAG и ISP запаивать на обратную сторону, но для моего случае это не проблема, т.к. вообще после отладки я не собираюсь их оставлять на плате, чтоб она была максимально плоской.
Ну и питание разведено абы как, но вроде для потребления двух корпусов это не сильно критично.
Схему здесь (https://github.com/valerium-labs/zx-unikeyboard/tree/main/Schematic) исправил, плату переделаю по уму, выложу герберы, если будет интерес к ним.
Из удобств - софт для обучения платы вполне пригоден, коннектор от клавиатуры вообще не важно, в каком порядке запаивать, хоть вверх ногами, хоть зеркально, хоть хаотично - переобучение за 5-10 мин решает проблему в любом виде.
Клавиатура для HP2311 на кронштейне из листового пластика (ее планирую засунуть в корпус ноута).
У нее очень короткий шлейф снизу, на него запаяна плата с разъемом под FPC и и разъемом PLD24, на который надевается сама плата Unikeyboard.
Во всех случаях шлейф клавиатуры подключается через внешний переходник для универсальности, т.к. коннектор для FPC лепить прямо на плату можно только подгоняя сборку под какой-то готовый корпус, у меня не было такой цели.
74644
74643
74642
Ну и вторая клава от Asus X200:
74645
74646
На плате по краям кучу выведенных свободных пинов от 3128, это просто из соображений "не пропадать же добру". Вытянуто наружу 43 пина, в самой ПЛИСине свободная 51 макроячейка, можно использовать как макетку для всяких мелких доработок, если будет необходимость )
ЗЫ. Китайские 3128 работают через одну, но они дешевые, можно взять горсть и пробовать. Одна плата собрана на 3128 от Павла - все ок, вторая - на китайской, перед которой еще одна китайская пошла в мусорку.
Предполгаю, что почти любую мембранную клаву можно переделать под спековские 5*8, просто наклеив на неё новые дорожки самоклеящейся фольгой с алиэкспресса) я так восстановил мембрану от дельта-с-подобной клавиатуры: https://zx-pk.ru/threads/32722-remont-vossozdanie-membran-plenochnykh-klaviatur.html
Никакого контроллера при этом не потребуется, напрямую подключаемся к порту клавиатуры любого спека.
Но на ноутбучных клавах я ещё не пробовал. Опыт пока только из одной восстановленной клавы состоит.
valerium
08.02.2021, 15:00
Возможно, но ноутбучные клавиатуры собираются обычно на тонкой металлической подложке, из которой выгнуты и крепежные ушки для механизмов клавиш. Разобрать их, да еще и расклеить пленки с подложкой имхо зверски трудоемко, да могут и клавиши пострадать.
Ну и в пленках (новых) надо будет кучу точных вырезов делать, т.к. эти ушки торчат через них насквозь. Это работа машинная, а руками... ну мне вот слабО )
Впрочем, наверное это моя лень )
Можно провести эксперимент с мертвой клавиатурой, у меня как раз есть такая, отфотаю ее внутренности.
Не спорю! хорошо, когда у каждого есть выбор)
Развел плату с разьемами для прямого и перевернутого шлейфа клавы , добавил USB-UART для удобства
74682
74683
74684
valerium
11.02.2021, 14:08
Компактненько, класс.
Y1 - это кварц для атмеги ? Я у себя под него площадку поленился сделать, хотя действительно полезно - хотя бы на случай ошибок с фьюзами.
Y1 - это кварц для атмеги ?
да , на всякий случай
токоограничивающие сборки по умолчанию перемкнуты , если нужно поставить , нужно перерезать перемычки
tank-uk, заказывать платки и комплектующие будете?
заказывать платки и комплектующие будете?
да , буду , но позднее , у китов НГ и еще что-то добавлю для размера
valerium,
Привет
а обьясни плз, прога обучения генерит прошивку для меги32 ?
если так , можно ли сделать тоже самое , но выход не на CPLD , а на PS/2 ?
valerium
13.02.2021, 18:06
Она генерит не прошивку, она генерит только один файл customkey.h , где описаны инициализированные массивы клавиш и их rc-координат. А прошивку потом вместе с этим файлом нужно компилировать.
Чтоб на выходе получить данные в формате ps/2, нужен совершенно другой вариант внутриклавиатурного контроллера, он рассматривался в первоначальной теме у CLR вот здесь (https://zx-pk.ru/threads/32497-kak-peredelat-prakticheski-lyubuyu-klaviaturu-v-ps-2.html), но он несовместим с моим по описанию данных и даже возможно по нумерации контактов. Но в целом матрицу моей прогой построить можно, по которой потом сделать ps2-клаву.
Но есть одно но: у меня ту ps2- клаву, которую я делал по аналогии с его проектом, видел PC нормально, а вот спековский контроллер caro у меня с ней работать не захотел (получает одну клавишу - потом все глухо висит). На спекки2007 у автора при этом все было нормально. Мне не сильно хотелось вникать в полноту реализации протокола ps2 на обеих сторонах, вывод, который я из этого получил - могут быть нежданчики. И промежуточный формат событийного типа здесь не лучший при доставке клавишных данных обычному спеку.
Приехали , будем пробовать
https://uploads.tapatalk-cdn.com/20210313/9303cf0791a41393f0c9d583ef476504.jpg
Приехали , будем пробовать
на герберах перепутаны 5 и 6 пин AVR_JTAG и резистор AVR_RESET вместо питания сидит на земле
фото фикса , правда уже под зеленкой
74967
valerium,
Привет
Создал карту клавы
закинул скетч в Arduino IDE 1.8.13
попытался экспортнуть в бинарь
получил ошибку
"exit status 1
'PIN_PD2' was not declared in this scope"
что я сделал не так ? может какую либу подключить дополнительно нужно ?
valerium
18.03.2021, 09:51
Создал карту клавы
закинул скетч в Arduino IDE 1.8.13
повытался экспортнуть в бинарь
получил ошибку
"exit status 1
'PIN_PD2' was not declared in this scope"
что я сделал не так ? может какую либу подключить дополнительно нужно ?
Я компилил под атмегу32, предварительно установив mightycore, видимо это из него такое именование ног (ссылка для менеджера плат есть здесь (https://github.com/valerium-labs/zx-unikeyboard/blob/main/readme_ru.txt) (этап 1).
И среди плат mightycore уже выбирать его вариант описания atmega32 (и соотв. частоту).
Наверное можно переименовать ноги числовыми их номерами, но это нечитабельно.
А у тебя атмега32 в ардуино без каких-либо библиотек присутствует ?
Собственно, самое главное ты уже сделал, как я понимаю - клава вся считалась и есть описание координат.
среди плат mightycore
ага , спасибо , началась компиляция , но снова остановилась на этом :
"exit status 1
'KEY_RCTRL' was not declared in this scope"
valerium
18.03.2021, 10:21
'KEY_RCTRL' was not declared in this scope"
Это он не нашел при компиляции дефайн для правого
ctrl - либо что-то не так с шаблоном, по которому считалась клава, либо просто в шаблоне ты его иначе назвал (алиас не совпал с тем, что далее в кейсах используется при обработке нажатия клавиш).
Можешь сюда скинуть полученный файл customkey.h ?
И желательно фото клавиатуры, чтоб было понимание, как они должны называться.
все , понял , его просто нет на клаве
"Скетч использует 6468 байт (20%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 546 байт (26%) динамической памяти, оставляя 1502 байт для локальных переменных. Максимум: 2048 байт.
�������� 䠩���: 1."
это успех
valerium
18.03.2021, 10:55
это успех
отлично, а в cpld клавиши передаются, спек их получает ?
отлично, а в cpld клавиши передаются, спек их получает ?
до этого еще не дошел , но это уже разберемся , andykarpov на связи
andykarpov
02.05.2021, 02:17
andykarpov на связи
Отличный проект!
Я там, кстати, форк отпочковал - https://github.com/andykarpov/zx-unikeyboard-ps2
Если вкратце - то это проект без CPLD, который из любой матрицы делает ps/2 клаву (с помощью либы ps2dev) :)
- Естественно, на базе кодовой базы valerium. Ибо опросник и анализатор опроса клавы - мега-удобная вещь! :)
- Пересадил основной код на рельсы platformio.
- Немного упростил опрос клавы, убрал одну лишнюю итерацию, в общем.
- Развел узенькую платку, чтоб влезала в китайские bluetooth-клавы.
valerium
02.05.2021, 09:38
Ибо опросник и анализатор опроса клавы - мега-удобная вещь! :)
Очень рад, что проект пригодился.
Если интересен анализатор-опросник - могу предоставить его исходники на autoit3, там не сильно красивый код для выкладывания с проектом, но для анализа и встраивания алгоритма куда-нибудь может быть полезным.
valerium
31.10.2021, 01:00
Попалась тут удачная на вид клавиатурка
https://i.ibb.co/hKtzZ2t/IMG-20211031-022524.jpg (https://ibb.co/hKtzZ2t)
Цель была встроить ее в подобие лаптопа вместе вот с этим монитором, который сейчас представляет собой плату на RTD2660 (https://zx-pk.ru/threads/32683-vyvod-izobrazheniya-retrokompyutera-na-tft-matritsu-(-quot-narodnyj-kontroller-quot-).html?p=1130970&viewfull=1#post1130970), засунутую в корпус от уже невоскрешаемого планшета Smarto 3GDi10 вместе с самсунговской IPS-матрицей, а также с родной смартовской акустикой и усилителем на 8403.
https://i.ibb.co/3SSpXDh/IMG-20211031-022502.jpg (https://ibb.co/3SSpXDh)
Клава от Тошибы NB200/NB255, "мой любимый цвет, мой любимый размер", шлейф на 34 пина, из которых использовано 26, все вроде бы подходит, но... застопорилось дело на том, что у этой матрицы шаг пинов шлейфа 0,75мм, а не 1,0 и не 0,5 !
На фото это не очень видно, но 28-пиновый FPC-разъем здесь шире 34-пинового шлейфа.
https://i.ibb.co/kxPD9Rt/IMG-20211031-022704.jpg (https://ibb.co/kxPD9Rt)
И вопрос: знает ли кто-нибудь, где найти/заказать/снять/как-то еще добыть FPC-коннектор на 26 и более контактов с шагом 0,75 ?
digibear
31.10.2021, 23:22
https://www.vss.store/magazin/product/plata-rasshireniya-conn-mix32
Вот такой перехожник использую в работе. Шаг у этой клавы -0.8. Потому видимо и не гуглится.
https://aliexpress.ru/item/4000353708318.html
Шлейф из этого лота использую для прошивки мультиконтроллеров через разъем клавы.
Вот например коннектор: https://aliexpress.ru/item/1005001826988319.html
valerium
01.11.2021, 20:55
https://www.vss.store/magazin/product/plata-rasshireniya-conn-mix32
Вот такой переходник использую в работе. Шаг у этой клавы -0.8. Потому видимо и не гуглится.
Действительно 0,8. Взял штангель и померил ровно 10 периодов - получается 8,0 мм
Разъемы редкие, плата-переходник с разъемом вдвое дороже самой клавы выходят (которая за 120р куплена ))
Сейчас подумаю, как корпус построить. И если другой клавы лучше найти не получится (а это вряд ли, потому что они в основном все без рамки продаются, а рамка или в топкейсе встроена, или просто клава с рамкой стоит как самолет), то буду заказывать и ждать переходник. Надо успеть до лавины распродаж )
Спасибо за ликбез.
Какие еще бренды кроме тошибы грешат нетипичным шагом разъемов ?
digibear
02.11.2021, 10:17
Тошиба не разрабатывает ноутбуки сама. Как и большинство брендов. Они заказывают разработку моделей тайваньским конторам типа quanta, compal, wistron. В рамках одного модельного ряда одного бренда может быть 2-3 разных платформы от разных разрабов. Так что тут не угадаешь. 0.8 очень редкий шаг. 95% клав имеют шаг 1.0
а это вряд ли, потому что они в основном все без рамки продаются,
https://zx-pk.ru/threads/32118-spectrum-next-alternativnye-platy-realizatsii.html?p=1131187&viewfull=1#post1131187
valerium
08.11.2021, 18:46
https://zx-pk.ru/threads/32118-spectrum-next-alternativnye-platy-realizatsii.html?p=1131187&viewfull=1#post1131187
Это от кого такая клавиатурка? По форме рамки прям смахивает на тошибовскую, но не признал в ней ничего из того, что видел
ps. плата "Keyboard edition" имхо самая клевая, очень красиво )
У меня от всякого "малинок" сформировалось ощущение, что коробочки с разъемами в разные стороны ("паук") неудобны хотя бы потому, что петли проводов вокруг них куда-то деть надо. Лежать такой паук удобно не лежит ни на столе, ни под столом. А вот компактная клавиатура с проводами назад - классика - это best.
Это от кого такая клавиатурка?
Samsung NP-X360
andykarpov,
Не понял отправилось ли в личку. Продублирую здесь.
Собрал конструкцию, использую в связке с https://zx-pk.ru/threads/33211-universalnyj-kontroller-ps-2-klaviatury-dlya-kompyuterov-s-matrichnymi-klaviaturami.html. Все завелось хотя потребовалось DAT с CLK подтянуть резисторами 1К. Спектрум набор клавиш работает вроде нормально, да и дополнительные в основном вроде тоже, кроме стрелки вверх (UP). Реакция на ее нажатие - светодиод гаснет на время всего нажатия до отпускания (при нажатии других работающих кнопок например DOWN светодиод гаснет на короткое время). Также наглухо светодиод гаснет при нажатии контекст меню (находиться в той же колонке что и UP, работоспособность с zx пока не знаю) но END находящийся в той же колонке реагирует кратковременным погасанием светодиода (аналогично работающим, работоспособность с zx пока не знаю). К сожалению в C я не слишком силен. Смотрю kbd_event при сравнении с DOWN и UP ничего критичного не вижу вроде все так, а не работает. В чем может быть дело?
P.S. Приемную часть проверял стандартной PS/2 клавой с не UP работает адекватно.
Самосборная клава с резисторами 1К с PC работать не хочет, поэтому проверить работоспособнось на PC не могу.
Завелось. Дело оказалось в размерности матрицы указанной в config.h.
Здравствуйте.
Тема старая, но всеже ..
Нужна помощь. Хотел сделать маленькую PS/2 клаву.
На основе платы от andykarpov на Atmega32.
Основные пункты инструкции осилил
(список кнопок и соответствие их нажатий), но на этапе
окончательной сборки прошивки понял, что в этом не понимаю ничего.
Помогите , люди добрые , собрать прошивку.
Все положил в облако.
https://disk.yandex.ru/d/RC7i6VtuCVOPpQ
valerium
18.01.2025, 03:03
На основе платы от andykarpov на Atmega32.
Основные пункты инструкции осилил
(список кнопок и соответствие их нажатий),
На вид все правильно, но есть нюанс: именовать клавишу как "KEY_~" синтаксически недопустимо - это же отдается потом компилятору, а он такое не стерпит.
Клавиша, где символ "тильда" имеет на себе еще символ "`", который кто-то именовал как ACCENT (ударение).
В приложенной раскладке переименовал все описания этой клавиши в KEY_ACCENT.
Помогите , люди добрые , собрать прошивку.
Собрать нужно было тоже под atmega32 ? Если да, то вот hex:
https://disk.yandex.ru/d/8akHku98Y2f1QA
исправленная раскладка там же.
Оговорюсь сразу - в коде не рассматривал обработчики клавиш, может они там и не все есть, просто закинул раскладку в исходники Андрея и компильнул. Если какие-то клавиши будут работать неправильно, надо будет их предметно смотреть/править.
Если какие-то клавиши будут работать неправильно, надо будет их предметно смотреть/править.
Ага. Спасибо.
Попробую прошить. Отпишусь.
- - - Добавлено - - -
Что-то не заработало ...
Прошил с теми же фьюзами , что и тестовую прошивку. Правильно ?
На нажатие любой кнопки только светодиод гаснет и снова загорается.
valerium
18.01.2025, 22:55
Что-то не заработало ...
Прошил с теми же фьюзами , что и тестовую прошивку. Правильно ?
На нажатие любой кнопки только светодиод гаснет и снова загорается.
Фьюзы те же (LOW=0x04, HIGH=0xD7). Самое главное там - внутренний генератор в режиме 8Мгц, остальное не особо важно.
Вообще с абстрактной "платой на атмега32" мы далеко не уедем. Надо рассматривать конкретную схему и соответствующий ей код.
Мигание светодиода в исходниках на гите (https://github.com/andykarpov/zx-unikeyboard-ps2) означает, что найдено изменение состояния матрицы и сформировано "событие" на шину ps/2 (data - PB6, clock - PB7). Они правильно подключены к ПК ? На этих линиях, кстати, должна быть подтяжка около 4,7к к +5в.
Надо рассматривать конкретную схему и соответствующий ей код.
Я брал всю инфорацию и документацию по сборке вот отсюда -
https://github.com/andykarpov/zx-unikeyboard-ps2
Линии клок и данные подключены правильно. Два раза проверил.
Резисторы на подтяжку попробую ..
valerium
19.01.2025, 21:01
Линии клок и данные подключены правильно. Два раза проверил.
Резисторы на подтяжку попробую ..
Тут не упоминалось - а к чему эта клавиатура подключается-то ?
Пробую подключиться к Sizif-512 / Sizif XXS.
andykarpov
20.01.2025, 14:20
Надо, наверное, отходить от принципа каждый раз пересобирать прошивку под конкретную матрицу в пользу динамической конфигурации где-нибудь в EEPROM атмеги.
Так, чтоб прошивка была одна, менялась бы только таблица строк-столбцов и таблица соответствий матрицы PS/2 клавишам.
Ну и прошивку конфигурации и опроса совместить с основной прошивкой, чтоб по какому-то джамперу втыкалась.
- - - Добавлено - - -
А то в проекте уже 100500 разных веткок разной степени совершенства и несовместимости друг с другом :)
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot