PDA

Просмотр полной версии : Как переделать практически любую клавиатуру в PS/2



CLR
27.11.2020, 00:58
Исторически так сложилось, что ко многим нашим ретроЭВМ стали подключать ps/2 клавиатуры в силу определенной простоты протокола и несложной и недорогой реализации адаптера. Но время идёт, и сегодня большинство клавиатур в магазинах уже USB. Конечно, все ещё можно найти и ps/2 клаву, но их исчезающе мало и выбор симпатичной модели, прямо скажем, невелик.

Надо сказать, что на изыскания меня сподвигли нешуточные холиворы типа Next vs Evo. Которые иногда выливались в заходы типа «некст - это только красивый корпус». Форм-фактор «компьютер-в-клавиатуре» - это вообще-то всегда был стандарт для ретроЭВМ, и далеко не каждый пользователь готов кроить коробку из-под обуви или там скворечник, чтобы пристроить там без всякого сомнения гениальные творения отечественного спектрумостроения. Либо разложить платы на столе, сплести вокруг них гнездо из МГТФ, в котором он будет жить и растить своих детей. Ну да ладно, я отвлёкся.
Так вот, из некоторых клавиатур можно сделать вполне себе неплохой самодостаточный корпус, раскрыв верхнюю и нижнюю части и вставив между ними прямоугольный короб из подходящего материала, переменной высоты, ну чтобы клавиатура классически была наклонена к пользователю. Сейчас в продаже доступно немало весьма симпатичных укороченных клавиатур, из которых при должной аккуратности можно сделать корпус ничуть не хуже Некста)

Речь о том, что все уже как правило сделано до нас, и несложный поиск навёл меня на проект https://sourceforge.net/projects/ps2avr/
PS/2 Keyboard Controller on AVR - ps2avr. Что это такое? А это способ сделать из произвольной клавиатурной матрицы, хоть от USB клавы, хоть от ноута, кастомный контроллер ps/2 на Atmega16. Схема простейшая и копеечная, единственно надо решить квест с раскладкой клавиатуры и перекомпилировать исходник в старой версии WinAVR. Почему в старой? Я пробовал в новой, и под линуксом в avr-gcc и получал множественные ошибки, связанные с устаревшими функциями и пр. Так как программист я ненастоящий, мне фиксить исходник показалось неинтересно и я скачал старенький WinAVR, где это дело без ошибок чудесным образом и скомпилировалось. Наиболее распространены клавиатурные матрицы с шлейфом о 26 контактах. Разъём для шлейфа можно взять со штатного контроллера, сдуть с дохлой платы ноутбука или купить в магазине. Контроллер подразумевает подключение столбцов и строк. В исходниках есть специальный файл, в который перед компиляцией надо вписать местоположение конкретных символов для конкретной матрицы. Причём раскладок можно сделать аж 4 штуки и переключать их через dip switch. Выяснить топологию чисто прозвоном с помощью мультиметра можно, но довольно сложно. Проще разобрать матрицу до плёнок и посмотреть глазами. (Хотя не все клавы бывает просто разобрать до плёнок). Если этот квест удалось пройти (у меня он занял довольно много времени), и компиляция прошла без ошибок, то полученный .hex файл можно зашивать в атмегу, подключать матрицу и вжух! Готова ps/2 клава именно того дизайна, который понравился в магазине. А не по остаточному принципу.

Что получилось лично у меня, можно посмотреть в галерее у меня в профиле. Там я присобачил матрицу от нетбука Asus eeepc900 к классическому алюминиевому корпусу Ленинграда и засунул внутрь Speccy2010 с блоком питания. Работает отлично, выглядит симпатично. Надеюсь, некоторое решение проблемы с корпусом я подсказал. Всем добра!

SoftLight
27.11.2020, 01:39
Фига себе! Вот это круто получилось!!!

NEO SPECTRUMAN
27.11.2020, 04:19
готов кроить коробку из-под обуви или там скворечник
а вставить в ибмПЦ совместимый корпус под который оно наверно расчитано не?

CLR
27.11.2020, 09:00
а вставить в ибмПЦ совместимый корпус

Если плата настолько большая и изначально под него, то конечно да. Но такое решение занимает место, и как правило дома уже есть более мощная ЭВМ. Приходится городить рядом ещё одно «рабочее место», либо заводить обе машины через KVM свитч. Конечно, яростным фанатам все нипочём, но рядовому пользователю, чтобы иногда поиграться да посмотреть демки, разводить дома такой «компьютерный клуб» может оказаться не вполне уместно.
К тому же напрочь уходит «дух старой школы» :)

Black Cat / Era CG
27.11.2020, 09:15
Много места? И вроде на коробку из-под обуви тоже не очень похоже.
https://drive.google.com/file/d/1J-yOna1k2HiFdHRLSLdNgCIImdJT1JS5/view?usp=sharing
Вывод. Холивары - это религия, религия - это мифы и пространные принципиально не доказуемые / не опровергаемые, но желательно пафосные фразы. Коробка из под обуви - миф. "дух старой школы" - пафосная фраза.

stepmotor
27.11.2020, 09:45
CLR, Круто получилось!

NEO SPECTRUMAN
27.11.2020, 10:10
ещё одно «рабочее место»
ну одни находят еще одно рабочее место

картинке из радостей дня
https://img.radiokot.ru/files/30570/2df2e2lfzb.jpg
https://img.radiokot.ru/files/30570/2df2dp3irh.jpg

а другие ноют про коробки с под обуви
про то что изза 70 дюймового телевизора и проектора пришлось выкинуть старый и хороший ЭЛТ
тк он занимал много места
а не мерзком 50 дюймовом лсд не работает...

- - - Добавлено - - -


Коробка из под обуви - миф.
по моему это стрАААшная прАААвда
ну может и не из под обуви
но с под хрен знает чего это точно
а вот про скворещнике это да :)

CLR
27.11.2020, 11:03
ну одни находят еще одно рабочее место

Если я разложу по столам все свои ЭВМ, то получится примерно такой же музей антиквариата на всю комнату. Но есть ли в этом волшебный смысл? Ну не будут они все использоваться на постоянной основе дома, а будут ускоренно желтеть и покрываться пылью. Если это происходит в общественном пространстве (какой-нибудь «дворец пионеров» или реальный музей) - то другое дело.

- - - Добавлено - - -


Много места? И вроде на коробку из-под обуви тоже не очень похоже.

Это вопрос эстетики и отношения к ней. Если не смущает пожелтевший 5-дюймовый дисковод в чёрном корпусе - то конечно никаких вопросов нет. А другой человек заморочится и найдёт дисковод с чёрной мордой для чёрного корпуса. А третий - вообще не приемлет дискет и дисководов и желает все запускать исключительно с флешкарт.

Black Cat / Era CG
27.11.2020, 11:53
Ну я просто не эстет. Мне дисковод нужен, чтобы дискеты читать, а не любоваться. А если дисковод не нужен, то в продаже есть куча корпусов нужного форм-фактора всех цветов и расцветок. И они еще и компактнее. Так как плата под стандартный корпус.

CLR
27.11.2020, 12:51
Я забыл ещё упомянуть про Bluetooth клавы, среди которых сейчас довольно много действительно красивых моделей. Внутри они чаще всего имеют тот же самый 26-контактный шлейф с возможностью переделки в ps/2. Можно пойти дальше, добавить какие-нибудь микросхемы-переключатели с Z-состоянием и сделать адаптер, в котором сохранится оригинальный функционал и добавится ps/2 режим через переключатель.

Также это потенциальная возможность засунуть новодел в корпус ноутбука. Матрицу клавиатуры переделать теперь известно как. Тачпады старых ноутов чаще всего имеют интерфейс ps/2 мыши, так что остаётся найти на али/ибее скалер, совместимый с дисплейной матрицей бука, собрать несложный дистрибьютор питания со стабилизаторами/электролитами и заморочиться с аккумулятором. Ну или не заморачиваться, а питать всегда от БП. Если все платы физически входят в корпус бука, то я не вижу существенных проблем в реализации: снять лишние коннекторы с плат, чтобы уменьшить габариты; припаять несколько разъёмов-удлинителей и залить все термоклеем)

NEO SPECTRUMAN
27.11.2020, 18:21
найдёт дисковод с чёрной мордой для чёрного корпуса
или покрасит морду в черный

Black Cat / Era CG
04.12.2020, 17:28
Зачем? Мне ее не на полку ставить, и не барыжить ей потом. Я ей пользуюсь :)

valerium
04.12.2020, 21:37
А существует ли какой-нибудь стандарт для ноутбучных клавиатурных матриц в части расположения строк-столбцов ? Ну хотя бы для основной буквенной части клавиш ? Или же они все всегда совершенно разные и каждую матрицу надо всю целиком исследовать на предмет того, как по ней разбросаны клавиши и как расположены строки/столбцы на коннекторе ?

CLR
04.12.2020, 23:50
Боюсь, что стандарта не существует. По крайней мере мне про это информации найти не удалось. Но зато можно купить две одинаковые матрицы, одну раздербанмть в исследовательских целях, а другую попытаться использовать.

valerium
05.12.2020, 08:29
Но зато можно купить две одинаковые матрицы, одну раздербанмть в исследовательских целях, а другую попытаться использовать.
Это был мой второй вопрос, точнее единственное оставшееся решение )
Собственно, у меня идея в другом. Есть Dell NX20 - вот такой (http://i.dell.com/das/dih.ashx/500x500/das/xa_____/global-site-design%20WEB/f86e8c61-a88e-7173-196c-7237855baa71/1/OriginalPng?id=Dell/Product_Images/eSupport/notebooks/portable_systems/laptop-portable-system-nx20-right-esupport-149.jpg).
Он мертв и сильно перекопан был еще в то время, когда был актуален.
Имеет толстый корпус с флопом, в который легко залезет, скажем, даже ленинград с bdi.
Но клавиатура... Там двусторонняя плата с запаянными клавишами и чтобы эту матрицу изменить, надо оезать обе стороны дорожек, снимая все клавиши, половина не выживет.
Вместо нее думал засунуть клаву от какого-нибудь aspire one 10,1" (с доработками вокруг,- а иначе никак), но их надо или покупать две, чтоб одну отправить на органы, или придумывать неинвазивный способ выяснения ее конфигурации. И покупать две я пока не хочу... это не наш метод )

CLR
05.12.2020, 09:37
Ох какой древний артефакт!
Клавиатурную матрицу теоретически можно вызвонить, но это весьма трудоемко. Представляете, что на каждую комбинацию двух щупов мультиметра на контактах надо будет нажимать поочередно все клавиши, чтобы найти вероятное пересечение и заносить в таблицу предположений. Вообще эта задача - аппаратное сканирование матрицы клавиатуры -тянет на создание отдельного девайса :)
А насчёт закупа одинаковых более современных матриц - рекомендую посетить с этой целью комп конторы, которые занимаются ремонтами и продажами бу комп техники. Был в таком местном - мне вытаскивали огромную коробку этих самых матриц на любой вкус и цвет. Да и отдают недорого.

valerium
05.12.2020, 12:40
Клавиатурную матрицу теоретически можно вызвонить, но это весьма трудоемко. Представляете, что на каждую комбинацию двух щупов мультиметра на контактах надо будет нажимать поочередно все клавиши, чтобы найти вероятное пересечение и заносить в таблицу предположений. Вообще эта задача - аппаратное сканирование матрицы клавиатуры -тянет на создание отдельного девайса :)

Я вначале тоже подгрузился подключением атмеги или еще чего с кучей GPIO, но потом подумал - а задача-то детскорадиокружковская )
Ну, собственно, девайс может представлять собой 25..32 светодиода с токоограничительными резисторами, анод к Vcc. Все их подключаем на ВСЕ ноги матрицы, потом ОДНУ ногу сажаем на землю (горит соотв. ее светодиод - "выбрана"), жмем клавиши по одной - обнаруживаем зажигание остальных светодиодов, которые будут находиться на линиях матрицы, перпендикулярных выбранной. Потом меняем земляную ногу и ищем другие смежные с ней столбцы/строки. Этак за 15-20 минут схема матрицы и обрисуется.
Главное, чтоб подобранный ток светотдиода не оказался слишком высоким для пленочных контактов - а то подгорит или поплавится еще.

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

По поводу контор с коробками дешевыми клавиатур - спишемся в личке, надо мне будет в те же самые коробки посмотреть )

valerium
05.12.2020, 15:42
... и перекомпилировать исходник в старой версии WinAVR. Почему в старой? Я пробовал в новой, и под линуксом в avr-gcc и получал множественные ошибки, связанные с устаревшими функциями и пр. Так как программист я ненастоящий, мне фиксить исходник показалось неинтересно и я скачал старенький WinAVR, где это дело без ошибок чудесным образом и скомпилировалось.
А вот об этом поподробнее можно, какая версия WinAVR считается достаточно старой ?
У меня в WinAVR 20100110 валится avr-objcopy на винде 8.1. Даже до ошибок компиляции дело не дошло.
В какой версии он нормально пересобирается ?

CLR
05.12.2020, 16:33
WinAVR тот же самый, только я его запускаю в Win7 на стареньком 32-разрядном нетбуке.
После установки запускается Programmer’s Notepad, в нем открываем keymain.c и жмём Tools - [WinAVR] Make All. После компиляции в директории исходника появляется keymain.hex.

valerium
05.12.2020, 20:24
Ух ты, там действительно еще какой-то модный notepad ставится ))
Я запускал make, он дальше прокатывает все по сценарию.
Но суть-то одна и на win8.1 при запуске из редактора все ровно так же обваливается на avr-objcopy.
На 7ке 32-битной avr-objcopy отработал нормально.

CLR
05.12.2020, 20:37
Это успех! :) Там в файле keymap.чегото там можно подсмотреть четыре раскладки от автора, одну из которых надо будет заменить своей.

pavel_1977
05.12.2020, 21:10
valerium, WinAVR PATCH - устраняет проблему совместимости WinAVR с Windows 10, Windows 8.1
74126

valerium
06.12.2020, 02:45
valerium, WinAVR PATCH - устраняет проблему совместимости WinAVR с Windows 10, Windows 8.1
74126
Что-то на восьмерке пошло не так ( Указываю в папку уcтановки WinAVR, папка выбирается (Select), но кнопка "Patch" неактивна. Версия WinAVR 20100110. Где я косячу ?

CLR
06.12.2020, 19:14
Кстати, этим же способом можно сделать из самой простой самодельной ZX-клавиатуры о 40 клавишах ту же ps/2 клавиатуру. Для ценителей аутентичных древностей. Только надо убедиться, что новоделу для корректной работы не понадобятся некоторые недоступные в данном случае кнопки. Либо несколько усложнить схему и реализовать дополнительные кнопки через «комбо»)

valerium
07.12.2020, 21:32
valerium, WinAVR PATCH - устраняет проблему совместимости WinAVR с Windows 10, Windows 8.1
74126
Вот то же самое, только без автоматического инсталлера, который у меня и косякнул
74140
Собственно, там DLL-ка, которую надо положить в utils\bin в папке WinAVR.

Пока собирался куда-нибудь съездить за atmega16, откопал у себя почти десяток atmega32a в tqfp44. Исходник под нее собирается без изменений.
Ну и TQFP - отличный плоский вариант, ближе к выходным добуду макетку под tqfp, запаяю и поиграюсь.

CLR
08.12.2020, 09:46
А я взял в местном Проконтакте74 пару атмег16 tqfp44, что-то захотелось мне суперминимальную ps/2 клаву из блютузной Oklick 840s сделать. А то полноразмерная ps/2 клава «крыло самолета» порядком подзадолбала своими габаритами.
Подумалось, что можно в принципе развести печатку, узкую, чтобы в любую клаву полезла, но кажется, при фиксированной топологии столбцов и строк придётся мудрить под неё раскладку в файле описания раскладки. Хотя, возможно это не составит особой проблемы.

valerium
08.12.2020, 10:36
А я взял в местном Проконтакте74 пару атмег16 tqfp44, что-то захотелось мне суперминимальную ps/2 клаву из блютузной Oklick 840s
Теперь ясно, кто меня опередил ) Нету их, хоть и показывает сайт наличие. И макетки tqfp тоже кто-то смёл ))

Я тоже на радио/bt-клавы смотрю китайские. И прихожу к выводу, что надо не матрицу клавишную к атмеге подключать, а bt-модуль. И клавиатуру с ним спаривать. И делать все это на одном контроллере с тем, который эмулирует нажатия спековской клавиатуры.
Никто еще bt к спеку не прикручивал ?

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

CLR
08.12.2020, 11:22
Я ещё обратил внимание, что довольно приятные мелкие клавиатуры встречаются в чехлах для андроид-планшетов.

Eltaron
08.12.2020, 11:38
Ой, а норм магазин этот проконтакт74. В Екб бесплатно шлют :)

valerium
08.12.2020, 22:19
А все-таки насчет Bluetooth-клавиатур, какую версию bt они используют ? Можно ли их спарить с модулем hc-05, например (у него 2.0) ?

Eltaron
08.12.2020, 23:35
А все-таки насчет Bluetooth-клавиатур, какую версию bt они используют ? Можно ли их спарить с модулем hc-05, например (у него 2.0) ?
Основная масса - 2.0.
Наверняка есть и BLE (4.0), но какой-то массовости у них, кажется, ещё нет.
Спарить с HC-05 нельзя, у него же только профиль последовательного устройства. Возможно, можно написать свою прошивку для него, которая умеет в режим HID-клавиатуры (SDK есть), но это капец возни.

Вот, например, джойстик делают заливкой прошивки от другого модуля (RN-42) - но это slave, а не хост, он к компу по BT цепляется: https://mitxela.com/projects/bluetooth_hid_gamepad

valerium
09.12.2020, 12:48
Вот, например, джойстик делают заливкой прошивки от другого модуля (RN-42) - но это slave, а не хост, он к компу по BT цепляется: https://mitxela.com/projects/bluetooth_hid_gamepad
Я считал, что hid-профиль - это подмножество для всех bt-профилей. Пока толком ничего не понял, но видимо это не так )
А RN-42 ведь имеет режим master, он с клавой сдружится ? И вроде в нем есть uart, нам этого недостаточно ?
Натыкался на гайды по заливке прошивки RN-42 в HC-05, видимо они аппаратно одинаковые или частично одинаковые

solegstar
09.12.2020, 12:51
Боюсь, что стандарта не существует. По крайней мере мне про это информации найти не удалось. Но зато можно купить две одинаковые матрицы, одну раздербанмть в исследовательских целях, а другую попытаться использовать.
я тоже интересовался одно время этим вопросом - хотел сделать адаптер для ноутбучных клавиатур на плис, чтобы можно было меняя прошивку подключать любую клавиатуру от ноутбука и транслировать их коды в 40 клавиш спека. пока руки не дошли, но в планах это всё есть. есть специальные тестеры для ноутбучных клавиатур, явный самопал, возможно на каком-то форуме можно найти автора такого тестера и возможно он поделиться наработками...
Пока я нашел вот какие раскладки:
https://drive.google.com/uc?export=download&id=132jte13vfy55x4U-BLSpcMyUwWzR4DWU
https://drive.google.com/uc?export=download&id=1AFENkaA9pN14ndNuHdG7FE6k5BzkH_4z
https://drive.google.com/uc?export=download&id=1bMXmqqrCgzbsCip9wxSA-Mu5ehT9YV1k
https://drive.google.com/uc?export=download&id=1yFHf5B3e7mJJBhkk9iPjjYeq9X0WgkiC

CLR
09.12.2020, 13:13
В идеале, мне кажется, это должен быть некий программно-аппаратный комплекс, к которому можно прицепить матрицу и по запросу на экране нажимать клавиши, чтобы в итоге получить файл раскладки. Но кто будет с этим заморачиваться по-сути на один раз - непонятно :)

CLR
11.12.2020, 12:01
Пришла мысль, что вычислить раскладку клавиатуры можно даже не прозванивая матрицу, а наоборот, отцепив матрицу от контроллера. Гуляя пинцетом (или каким-нибудь более удобным способом, например, сцепив два щупа мультиметра) по контактам разъёма матрицы, можно нарисовать таблицу соединений куда быстрее. Естественно, на родном контроллере клавиатуры, подключённом к ЭВМ и при открытом текстовом редакторе либо экранной клавиатуре. Надо попробовать. Главное, КЗ по питанию не сделать :)

Гаррий
11.12.2020, 13:00
CLR, сразу об этом подумал, но постеснялся написать. Имхо вообще не проблема.

valerium
11.12.2020, 13:02
для этого надо, чтоб к клавиатуре прилагался весь ноут )

еще вариант
https://youtu.be/roTuU4Ocm5k

solegstar
11.12.2020, 13:26
Несколько поизучал тестеры клавиатур с различными разъемами и вот что получилось:
https://drive.google.com/uc?export=download&id=1_UgbDnyghNbr61yWVhOe_SlgYeG1Lfn_
https://drive.google.com/uc?export=download&id=1McWO9ES35kT0wcS5wvUVVddj5hlEDjGI
разъемов довольно много разных и наверное нет смысла делать на адаптере все разъемы, а сделать некоторые переходники, как предложил в личной переписке alvis. максимум по контактам китайского тестера это 40пин, у отечественного 34.
у меня есть девборда с выводом в регистры MODBUS её входов/выходов, поэтому можно смотреть какой код будет выдан при нажатии той или иной клавиши при сканировании, таким образом можно сопоставить клавиши со шлейфом. попробую сделать прошивку на выходных. пока записывать соотв. клавиш коду придется вручную. какие-то клавиатуры есть.

Romych
11.12.2020, 15:29
Что-то мне кажется, что HC-05 умеет спариваться только с таким-же com-портом. А не с любым HID-девайсом.
Тут можно взять маленький STM32WB с BT на борту и с него вывести PS/2. Но блин, дороговаты они у нас в розницу.

Eltaron
11.12.2020, 15:32
Как вариант, можно сделать тестирующую прошивку для самого готового девайса по схеме ps2avr. Чтоб писала в консоль "Press A" и перебирала быстренько все линии в поиске замкнутой. Сотня нажатий, пара-тройка минут времени на всё, и готов конфиг, который потом можно сувать уже в основную прошивку.

valerium
11.12.2020, 16:02
Как вариант, можно сделать тестирующую прошивку для самого готового девайса по схеме ps2avr.
имхо это лучший вариант. на выходе у нас будет конечный набор нужных для спека (а не вообще всех) клавиш в виде RC-кооринат, который можно даже выводить сразу в виде инициализированного массива для помещения в исходник ps2avr.
все сторонние тестеры ради одного раза нецелесообразны, надо просто научить саму железяку запоминать раскладку.

valerium
13.12.2020, 01:03
Накидал на макетке стенд с atmega32, прошил пересобранный исходник - работает. Сейчас хочу все клавиатурные ноги вынуть на какой-то разъем, у той схемы их всего 25, ну можно будет еще 2 ноги, задействованные под выбор кейсета добавить к набору. В итоге 27. Разъемы у клавиатур бывают и пошире... Я видел разъемы 32 контакта на hp, то есть одной атмегой такую клавиатуру целиком уже не перебрать. Но и расширять чем-то - это тоже усложняет решение, да и клава вся явно не будет нужна.
Какой разъем предусматривать в "универсальном" варианте - под шлейф ffc с шагом 1 мм ? 32 пина, меньше, больше ? Преждевременно это, конечно, поскольку прошивка нисколько не набросана даже, но просто хочу начальные требования прикинуть.

CLR
13.12.2020, 09:09
Ну очевидно под разъём, покрывающий все доступные ноги контроллера. А шлейф вставлять, прижимая в угол разъёма от первого контакта, как на тех аппаратных тестерах матриц на видео. А в чем вообще затея? Написать свою прошивку?

Подумалось, что можно сделать и наоборот - взяв от бт или ps2 клавы контроллер, выяснив раскладку, в результате прицепить к контроллеру самодельную спектрумовскую клаву, самую дремучую о 40 клавишах для «полного погружения» :)

Разобрал мелкую BT клаву Oklick 840s, а у нее на контроллере расписана распиновка разьема в виде C12 R6 C7 C4 и т.д. Надо проверить, убедиться что она верная и можно лепить плату. Если получится сохранить BT функционал - будет только лучше. На microusb разъеме для зарядки как раз не используются D+D- контакты. Можно смастерить ps2-usb шланг, единственно, надо придумать как сделать, чтобы оба контроллера не работали одновременно и не мешали друг другу.

valerium
13.12.2020, 11:07
Ну очевидно под разъём, покрывающий все доступные ноги контроллера. А шлейф вставлять, прижимая в угол разъёма от первого контакта, как на тех аппаратных тестерах матриц на видео. А в чем вообще затея? Написать свою прошивку?

Идея в том, чтоб научить эту железку адаптироваться под любую клавиатуру.
То есть берем ps2avr как оно есть, берем неизвестную доселе клавиатуру, подключаем ее, заливаем тестовую прошивку, которая контролируясь через консоль опрашивает набор нужных нам клавиш (в консоли дает подсказку, что нажать в каждый момент). Мы на неизвестной клавиатуре их нажимаем, на выходе получаем таблицу нужных нам клавиш в RC-координатах, из нее инициализируем матрицу раскладки в keymap.h - и получаем действующий экземпляр ps2avr под свою клавиатуру.

Сейчас вот понял, в каком месте возникает натяжка. На тестовой прошивке можно поиграться режимами всех линий (для одной попытки сканирования одна включается как выход, остальные как вход, потом переключаем режимы и сканируем дальше и т п), на рабочей же уже все расписано жестко - выход или вход в соответствии с принадлежностью к строкам или столбцам. А какие линии неизвестной клавиатуры у нас будут являться строками, а какие столбцами, на данный момент неизвестно.
То есть просканить клавиатуру будет возможно (и получить все клавишные пересечения, например, в координатах контактов разъема (Q- 1-2, w - 1-4, и т п), но потом из этой таблицы надо будет уже головой выбрать, что насзанчить строками, а что столбцами, перекоммутировать разъем - и уже тогда править раскладку рабочей прошивки. Короче, тоже выходит весьма не прямо (

CodeMaster
13.12.2020, 11:40
Идея в том, чтоб научить эту железку адаптироваться под любую клавиатуру.
Наконец-то подошли к изобретению велосипеда ;-)


потом из этой таблицы надо будет уже головой выбрать, что насзанчить строками, а что столбцами
Думацо, что если можно "выбрать головой", то и автоматизировать это процесс можно. Там же не так всё хаотично, можно предварительно ориентироваться на максимально общие колонки "QWER", "ASDF", "ZXCV" и "1234".

valerium
13.12.2020, 11:56
Наконец-то подошли к изобретению велосипеда ;-)

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



Думацо, что если можно "выбрать головой", то и автоматизировать это процесс можно. Там же не так всё хаотично, можно предварительно ориентироваться на максимально общие колонки "QWER", "ASDF", "ZXCV" и "1234".
Пока не накоплено какой-либо информации по матрицам - трудно построить какую-либо модель.
Но то, что никакие клавы не сделаны продольно-поперечными, как у спека, а наоборот - извилистость дорог на пленках говорит о том, что разрабы умным трассировщиком за что-то боролись, наверное есть закономерность. Со временем разберемся.
Здешние проекты от времени не портятся. Прям с винами сравнение напрашивается )

CodeMaster
13.12.2020, 12:17
Ну с этой точки зрения тут весь форум - изобретение велосипедов, такова суть этой, если позволите, игры.
Не, я немножко не про то, а про то, что такой редактор-анализатор раскладки напрашивается для этого проекта.


Пока не накоплено какой-либо информации по матрицам - трудно построить какую-либо модель.
Если эта модель сейчас будет выдавать 80-90% соответствия - это отличный задел для допила руками в Блокноте.

valerium
13.12.2020, 13:05
Не, я немножко не про то, а про то, что такой редактор-анализатор раскладки напрашивается для этого проекта.

Если эта модель сейчас будет выдавать 80-90% соответствия - это отличный задел для допила руками в Блокноте.
Короче, кроме прошивки считывателя требуется еще одна составляющая - редактор раскладок, точнее то, что будет ее перестраивать в зависимости от назначения линии row/column (и контролировать возможность перестройки с учетом остальных линий).
Почитаю исходники, чтоб в голове отлежались, попробую сделать наброски, как время позволит. Пока неспешно ищу себе клавиатуру подходящую.

CLR
13.12.2020, 13:56
Чтобы оценить замороченность топологии - вот неполная таблица, которую я натыкал на работающем контролере за пару часов:
https://zx-pk.ru/attachment.php?attachmentid=74188&d=1607856275
https://zx-pk.ru/attachment.php?attachmentid=74189&d=1607856655

CodeMaster
13.12.2020, 14:30
на работающем контролере
А нельзя пойти от обратного, проанализировать AVR'кой сначала контроллер (при наличии) на строки и столбцы, а потом уже соответствие кодов клавишам?

CLR
13.12.2020, 14:35
Наверное можно, при определенном программистском скилле.

valerium
13.12.2020, 14:40
А нельзя пойти от обратного, проанализировать AVR'кой сначала контроллер (при наличии) на строки и столбцы, а потом уже соответствие кодов клавишам?
Такой вариант подразумевает, что у нас есть клавиатура, ноут или еще что-то живое и действующее.
А профит данного подхода был в том, чтобы заюзать любую клавиатуру, полученную отдельно от "туловища". То есть найти дешево подходящую по форм-фактору запчасть в китае или на разборе и встроить. Поэтому в более полном смысле надо анализировать именно матрицу.

CodeMaster
13.12.2020, 14:48
Такой вариант подразумевает
Да я понимаю, что он подразумевает, но зачастую оно есть.


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


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

CLR
13.12.2020, 15:23
Тут люди уже озадачивались подобной проблемой: https://www.instructables.com/How-to-Make-a-USB-Laptop-Keyboard-Controller/

valerium
13.12.2020, 20:13
Тут люди уже озадачивались подобной проблемой: https://www.instructables.com/How-to-Make-a-USB-Laptop-Keyboard-Controller/
Хороший вариант. Прямо как есть оно не годится - там usb-клавиатура на выходе, но идея практически наша. То есть подключить клавиатуру, по списку сопоставить нажатия сочетаниям строки-столбца, разобрать результат и пропатчить рабочую прошивку. Там еще есть какой-то код на python (Marcel's python program) в который я еще не вникал, который это все анализирует и выделяет наборы входных и выходных пинов (столбцов и строк).
Ставить teensy даже 2.0 в это дороговато, хотя и соизмеримо с ардуинками. Мне кажется для нашей задачи достаточно avr-ки попроще, атмега 16/32 самое то. Принцип опроса линий для чтения клавиш в скетче весьма прост и понятен. И у нас он будет алгоритмически таким же.
И там есть инфа по целой серии клавиатур - это справочно, но будет полезно.

Еще, конечно, хотелось бы засунуть это в один камень. Чтобы и матрицу им опрашивать, и спеку клавиши нажимать. Но ни в одну дешевую авр-ку это по количеству ног не залезет, а ставить какие-то расширители дороже, чем оставить спековский функционал на втрой авр-ке.

CLR, а как все это работает на трехступенчатой схеме (ps2avr - контроллер ps2 - спек) - там задержки адекватные ?

CLR
13.12.2020, 20:46
CLR, а как все это работает на трехступенчатой схеме (ps2avr - контроллер ps2 - спек) - там задержки адекватные ?

На Speccy2010 вообще без проблем - как родная.

P.S. Вызвонил окончательно матрицу Oklick840s - всё-таки довольно мудовое это занятие, без разбора. Хотя частичный прозвон через включённый контроллер и разъём fpc-26p на своей макетке несколько облегчили задачу. Ну и RC, подписанные на плате контроллера :)

Алгоритм поиска нажатой клавиши при неизвестных входах R и C достаточно очевидный - назначаем первый контакт R, затем все остальные перебираем как предположительные C до пересечения; назначаем R второй контакт и по кругу. В итоге получившийся массив RC надо как-то распарсить по каждому минимальному количеству соответствий C при данном R. Кажется, тут даже неважно, будут ли итоговые значения соответствовать физическим линиям топологии; важнее логическая структура.

Вот так выглядит итоговый кеймап (разрешение форум конечно "оптимизировал"):
https://zx-pk.ru/attachment.php?attachmentid=74195&d=1607938824

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

valerium
26.12.2020, 14:20
Алгоритм поиска нажатой клавиши при неизвестных входах R и C достаточно очевидный - назначаем первый контакт R, затем все остальные перебираем как предположительные C до пересечения; назначаем R второй контакт и по кругу. В итоге получившийся массив RC надо как-то распарсить по каждому минимальному количеству соответствий C при данном R. Кажется, тут даже неважно, будут ли итоговые значения соответствовать физическим линиям топологии; важнее логическая структура.

Вчитался тут в то, что написано на instructables - там логика выделения строк/столбцов интересная.
Есть modifier keys - это оба alt, ctrl, shift, а также Fn, GUI - их всего 8 шт. У большинства изготовителей они расставлены так, чтобы работать в паре с любой другой клавишей без неоднозначных конфликтов, а также не мешать друг другу, поэтому правилом всех разводок клавиатуры является то, что они все восемь стоят на разных столбцах. Соответственно по их сканированию можно выделить 8 неповторяющихся линий, которые будут являться СТОЛБЦАМИ (cols) - к примеру если LAlt cканится как пересечение 20х21, а RAlt 21х18, то их неповторяющиеся линии (20 и 18 в данном случае) будут приняты как столбцы. Все остальные линии назначаются СТРОКАМИ (rows). В их видео это неплохо разъяснено.
В итоге мы получаем 8 столбцов, относительно которых должны в большинстве случаев сосканироваться все строки. Вполне могут остаться строки, которые нам и не будут нужны. И это означает, что подавляющая часть клавиатур имеет структуру 8xN. Именно этот анализ выполняет "python-программа Марселя", для которой является обязательным отдельное сканирование клавиш-модификаторов.

А теперь о практике. Появилось время - поиграл с клавиатурным контролером на atmega8 с avray.ru (PS/2->SPECCY, версия 5.5, ремейк схемы от caro). Он у меня вполне достойно заработал с живой клавиатурой на 25 мгц (на 16 вообще была тишина). Но с самодельной клавиатурой на atmega32 (KEYMATRIX->PS2), которая является скелетом для произвольной матрицы, он работать вообще не захотел, я пока не пойму, почему.
На контроллере caro добавил подтяжку CLK и DAT (5,1к) к единичке, без этого не работала и живая клавиатура, при том, что она вроде включена в атмеге8.
Но "самодельная клавиатура" почти молчит, лишь изредка давая какой-то невнятный мусор на произвольные замыкания линий. Как понять, выполнила ли она хотя бы команду сброса ?

CLR
26.12.2020, 15:31
Как понять, выполнила ли она хотя бы команду сброса ?

Там на схеме есть линии подключения светодиодов индикации caps lock, num lock, scroll lock - может по их состоянию будет понятно?
Ну, либо попробовать посмотреть, что там на UART атмеги.

valerium
27.12.2020, 00:31
Там на схеме есть линии подключения светодиодов индикации caps lock, num lock, scroll lock - может по их состоянию будет понятно?
Ну, либо попробовать посмотреть, что там на UART атмеги.
Припаял к PS2AVR индикацию CAPSLOCK. При включении в PC он загорается на полсекунды, как и положено при сбросе. При любом выдергивании и втыкании на ходу сразу повторно происходит сброс и клавиатура работает.
Однако я не добился переключения *LOCK-ов на ней, это должно работать или нет ? У меня включена 0-я раскладка из исходника, при переключении *LOCK-клавиш ни индикаторы не меняются, ни регистр букв при нажатии CAPSLOCK не меняется.
Статус на индикаторы передается корректно (если настоящей клавиатурой задать какое-то состояние *LOCK-ов, то при горячей замене ее на наш PS2AVR после сброса этот запомненный статус тут же отображается на индикаторах).

Спеку не особо надо корректную работу *LOCK-ов, но здесь вообще нулевой прогресс.
Сейчас у меня используется такая связка:
Спек (ленин1) + контроллер caro на atmega8 + PS2AVR (как будущая клавиатура)

При включении спека сброс PS2AVR не происходит. Даже если я сбрасываю атмегу в контроллере caro (при этом должен сразу выполняться сброс клавиатуры аж до 16 попыток, но он не происходит). Так что связка этих двух AVRок не работает. Понимаю, что протокол PS/2 где-то реализован с большими ограничениями, отсюда наш тупик.

Удавалось ли протестить PS2AVR с какими-то еще спековскими контроллерами клавиатуры ?

Ради интереса воткнул сейчас PS2AVR в AVR-ZX 2.0 (он же Aspect128), где контроллер клавиатуры сделан на ATTiny2313 и прошивка оного мне неизвестна. Работает только одно нажатие клавиши, дальше оно навсегда зацикливается. Если нажать F12, это SDDOS, мы в него попадаем, но выйти обратно уже не можем. С настоящей клавиатурой такого не происходит.

CLR
27.12.2020, 20:21
Я на днях собрал тестовый стенд для беспаечной проверки и настройки контроллера ps2avr, буду проверять свою раскладку и идеи по оптимизации.
Заодно и проверю, как оно будет работать на AVR-ZX и на KarabasPro.

https://zx-pk.ru/attachment.php?attachmentid=74348&d=1609089272

https://zx-pk.ru/attachment.php?attachmentid=74349&d=1609089305

valerium
27.12.2020, 21:33
Я на днях собрал тестовый стенд для беспаечной проверки и настройки контроллера ps2avr, буду проверять свою раскладку и идеи по оптимизации.
Заодно и проверю, как оно будет работать на AVR-ZX и на KarabasPro.

Во, хорошая идея. Надо мне будет тоже маркированные pbs-ки припаять, чтоб "клавиши" замыкать было удобнее.

По вчерашним экспериментам у меня выводы такие:
1. Идея сделать все на двух больших кирпичах с разбегу не прокатывает. В Speccy2010 реализация ps/2 грамотная, но это так не везде. В большинстве случаев протокол ps/2 реализован обрезанным и между этими реализациями будут нестыковки. Может и удастся найти более-менее работающий вариант клавиатурного контроллера на атмеге, но он и для обычного спека работает на пределе быстродействия, а для турбо уже опять все будет мимо.
2. В целом идея использовать ps/2 как промежуточный протокол является компромиссом и с очень большой натяжкой, т.к. он предусматривает передачу "событий", то есть цепочек байт вида "клавиша нажата" и "клавиша отпущена". Это диффы к текущему состоянию клавиатуры, если хоть один из них будет каким-то образом потерян, то контроллер не будет адекватно отражать состояние клавиш. Косяк передачи по интерфейсу маловеротен, тут больше играет роль неуспевание его обработки и переписывание следующим байтом. Мне это напоминает MIDI-интерфейс и зависание звучания инструментов, если в передаче или обработке его событий есть потери.
3. Красивым вариантом обхода всего этого безобразия является использование некоторой схемы с регистром на все имеющиеся клавиши, которая "отражает" их спеку при опросе клавиатуры, и при этом состояние этого регистра постоянно рефрешится опросом актуальной матрицы. Есть такие решения для PS/2 у andykarpov
https://github.com/andykarpov/ps2_cpld_kbd
и leonid-z
https://github.com/leonid-z/zxkeyboard
В обоих случаях атмега получает клавишные события по интерфейсу ps/2, обновляет в своем массиве состояние нужных клавиш и постоянно ПОЛНОСТЬЮ передает его по SPI той самой схеме, которая реализована в CPLD. Это всего 6 байт (40 бит клавиши спека и еще один байт может передавать состояния специальных кнопок навроде ресета, мэджика, турбо и т п).
Только в нашем случае нет необходимости вообще как-то привязываться к PS/2, достаточно этой же атмегой опрашивать некую клавишную матрицу, по некоей таблице соответствия генерить массив состояний клавиш спека и передавать его в регистр CPLD.
Посмотрим, насколько мне хватит тямы что-то из этого сделать.

Две последних CPLD-реализации под завязку используют CPLD, первая - EPM7128, вторая - EPM3064. И судя по всему вдвое больше LE требуется более грамотной реализации SPI slave, а т к во втором случае она слишком лаконична и проста, то где-то должна быть подстава )
Собственно, у меня все равно сейчас для игрушек есть только EPM7064, поэтому начну со второго варианта. И с опроса атмегой какой-нибудь простой матрицы клавиш типа 4х4 для отладочной передачи по SPI. Потом можно будет на эту же атмегу поключить большую матрицу.
To be continued...

valerium
03.01.2021, 03:43
Две последних CPLD-реализации под завязку используют CPLD, первая - EPM7128, вторая - EPM3064. И судя по всему вдвое больше LE требуется более грамотной реализации SPI slave, а т к во втором случае она слишком лаконична и проста, то где-то должна быть подстава )
Собственно, у меня все равно сейчас для игрушек есть только EPM7064, поэтому начну со второго варианта. И с опроса атмегой какой-нибудь простой матрицы клавиш типа 4х4 для отладочной передачи по SPI. Потом можно будет на эту же атмегу поключить большую матрицу.
To be continued...
Всех с наступившим НГ ! Кто как празднует, а мне после елки и шампанского довелось поковырять обе вышеприведенные разработки.
Схема leonid-z у меня работать не захотела ни в каком виде. Не сумел я никакие отладочные наборы данных прокачать по этому упрощенному SPI на epm7064, да и отлаживать там что-либо трудно - CPLD забита под завязку и даже одного триггера под отладочную защелку не выкроить (
Поэтому бросил я ту идею, добыл epm7128 и пересобрал под нее практически без изменений CPLD-версию andykarpov, хоть и напрягало меня, что под какой-то промежуточный клавиатурный регистр тратится CPLD, в которую можно засунуть практически всю логику спека. Запустил все это с ардуинкой на atmega328p и на ps/2-клавиатуре все заработало прям с разбегу.
Потом с некоторыми мелкими изменениями контроллер поменял на atmega32 с его четырьмя 8-разрядными портами (из которых в дальнейшем без SPI и rx/tx остается 26 ног - вполне достаточно для многих клавиатурных матриц). Код пересобрал в том же arduno IDE с модулями для atmega32 - клавиатура PS/2 тоже заработала без проблем, однако есть неприятность - исходная Atmega328p с включенным фьюзом CKOUT дает получить наружу тактовые импульсы своего генератора, которыми тактируется CPLD-часть. А вот Atmega32 такого не имеет и для CPLD пришлось сделать отдельный генератор.
Вопрос к знающим: какие-то еще из богатых ногами атмег умеют раздавать свой генератор наружу ?

Сегодня прошерстил код атмеги (приятно, читабельно - респект andykarpov !), обработку прерывания от PS/2 и обработку принятых кодов заменил на сканирование матрицы - для примера взял ненужную спековскую клавиатуру (5х8) и прицепил на порты C и D атмеги32. Ее клавиши сканятся и мапятся в регистр CPLD вполне успешно, спек с ней работает вполне адекватно, так что если еще "добавим ножек", то уже можно любую клавиатуру до 26 пин включительно читать и перемапливать на спековскую. Алгоритм опроса незнакомой матрицы пока не реализован, но вроде в железяку вписываемся без проблем и должно получиться.
74377

Для дальнейших экспериментов нашел клавиатуру от Asus X200 на 24 пина, с ней далее и буду экспериментировать.
74376

valerium
04.01.2021, 02:09
...продолжение.

Цитата из билайновской рекламы про робота - "ой, а разговоров-то было !".
Все оказалось в разы проще. Дольше всего пришлось МГТФ зачищать.
Нижу привожу гайд по борьбе в клавиатурной матрицей для домохозяек и других аналогичных мне неучей.

Итак, клавиатура от Asus X200, макетка с atmega32 и кварцем, arduino IDE с модулями MightyCore для поддержки atmega32.
С атмеги32 подключены только SPI (PB4-PB7) на CPLD и UART (PD0, PD1) для дебага через USB-UART. Остальные портовые ноги PD2-PD7, PC0-PC7, PA0-PA7, PB0-PB3 свободны для подключения к разъему клавиатурной матрицы.
74385
Для дебага/обратной связи с МК нужен USB-TTL-UART навроде такого (https://roboshop.spb.ru/image/cache/catalog/demo/product/ch340-2-800x800.jpg), но у меня его нет, а садиться и ехать за ним куда-то не позволяет новогоднее состояние настроение. Поэтому вместо него используется ардуинка с залепленным дулом на землю ресетом.
74382

Модуль для atmega32 (и других контроллеров, не нативных для плат Ардуино) удобен тем, что мы можем удобно ссылаться на удобно описанные ноги портов соответствующего контролера, а также задав в настройках IDE частоту кварца не заботиться о правильности частоты UART для нужной скорости.
Пакет модулей берется по ссылке https://mcudude.github.io/MightyCore/package_MCUdude_MightyCore_index.json
Как его добавить в IDE и сделать доступным из менеджера плат, есть картинки тут (https://alexgyver.ru/lessons/naked-chip/).

Код, написанный при помощи топора - сразу же после hello world:



//описание алиасов для пинов
#define PINS_MAX 26

#define PIN0 PIN_PD2
#define PIN1 PIN_PD3
#define PIN2 PIN_PD4
#define PIN3 PIN_PD5
#define PIN4 PIN_PD6
#define PIN5 PIN_PD7
#define PIN6 PIN_PC0
#define PIN7 PIN_PC1
#define PIN8 PIN_PC2
#define PIN9 PIN_PC3
#define PIN10 PIN_PC4
#define PIN11 PIN_PC5
#define PIN12 PIN_PC6
#define PIN13 PIN_PC7
#define PIN14 PIN_PA7
#define PIN15 PIN_PA6
#define PIN16 PIN_PA5
#define PIN17 PIN_PA4
#define PIN18 PIN_PA3
#define PIN19 PIN_PA2
#define PIN20 PIN_PA1
#define PIN21 PIN_PA0
#define PIN22 PIN_PB0
#define PIN23 PIN_PB1
#define PIN24 PIN_PB2
#define PIN25 PIN_PB3

//массив номеров пинов для перебора клавиатуры
const uint8_t pins[PINS_MAX] =
{
PIN0, PIN1, PIN2, PIN3, PIN4, PIN5, PIN6, PIN7, PIN8, PIN9,
PIN10, PIN11, PIN12, PIN13, PIN14, PIN15, PIN16, PIN17, PIN18, PIN19,
PIN20, PIN21, PIN22, PIN23, PIN24, PIN25
};


// initial setup
void setup()
{
//все клавиатурные ноги ставим в режим входа с пуллапом
for (uint8_t i=0; i<PINS_MAX; i++) pinMode (pins[i], INPUT_PULLUP);

//и инициализируем вывод по UART для получения данных о клавишах в "мониторе порта"
Serial.begin(115200);
Serial.flush();
Serial.println(F("Unikeyboard matrix explorer v1.0"));
}

// main loop
void loop()
{
uint8_t colcount, rowcount;

//перебираем все потенциальные столбцы
for (colcount=0; colcount<PINS_MAX; colcount++)
{
//при опросе очередного столбца переключаем все линии "как бы строк" в режим входа, чтоб не получить конфликт уровней на выходах
for (rowcount=0; rowcount<PINS_MAX; rowcount++) pinMode (pins[rowcount], INPUT_PULLUP);

//один пин потенциального столбца включаем в режим выхода, даем уровень 0
pinMode (pins[colcount], OUTPUT);
digitalWrite (pins[colcount], LOW);

//перебираем все пины строки, пропуская пин столбца
for (rowcount=0; rowcount<PINS_MAX; rowcount++)
// если на входе строки находим 0 (нажата клавиша на пересечении текущих COL/ROW) - выводим ее в консоль
// в виде двух индексов пинов (меньший+1, больший+1). Плюс единица, т к индексы нумеруются с 0, а контакты на разъеме с 1.
if ( (rowcount != colcount) and !digitalRead(pins[rowcount]) )
{
Serial.println ("Pressed key ("+String((colcount<rowcount?colcount:rowcount)+1)+", "+String((colcount<rowcount?rowcount:colcount)+1)+")");
delay (300);
}
}
}



Этот скетч компиляем, экспортируем и заливаем в атмегу любым удобным способом (avrdude, khazama, и т п), фьюзы у меня на нем LOW=0x0e, HIGH=0xD7, EXT=0xFD, но из них важен по сути только внешний источник CKSEL=1110, а задержки включения SUT и генераторный CKOPT не принципиальны (впрочем, внутренний генератор тоже можно использовать, не забыв в настройке IDE это указать, чтоб частота UART пересчиталась).
Подключаем клавиатуру к атмеге, подключаем USB-UART к компу и запускаем IDE в режиме монитора порта (или любой другой терминал на соответствующем компорте), давим по порядку клавиши, видим вывод следующего характера:
74381

Я записал соответствующие сочетания линий для каждой клавиши прямо на самой клавиатуре:
74384

Дальше, если верить легенде о 8 столбцах в любой клавиатуре, то надо выделить эти самые 8 столбцовых линий.
Рекомендуют это делать по линиям modifier keys, в моем случае они такие:
LCTRL 4 12
RCTRL 4 6
LALT 2 7
RALT 2 9
LSHIFT 5 11
RSHIFT 5 8
GUI(WIN) 3 13
Fn 1 6
MENU 1 9

В парах "близнецовых" клавиш видим непересекающиеся линии 6,7,8,9,11,12. И у GUI есть линия 13. Это в сумме 7 линий.
Дальше лотерея - надо восьмую линию подобрать как-то наугад, долго глядя в клавиатуру. Я просто предположил, что эта клава имеет столбцовые линии в одной подряд идущей группе, и в ряду 6,7,8,9,11,12,13 пропущена линия 10. Если это не так - далее при построении таблицы вылезет какой-то несходняк и эту итерацию надо будет повторить.
Итак имеем столбцовые линии 6,7,8,9,10,11,12,13. Остальные строковые.
Строим таблицу:
74383
Цветом выделены мастхэв-клавиши для спектрума, ненужные строки можно исключить целиком (в целом это означает, что если у клавиатуры больше 26 линий, то не используя некоторые можно ее заюзать с той же атмегой, где их <=26).

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

Мапить эту клавиатуру в регистр клавиш в CPLD буду немного позже. Но тоже скоро.

zebest
04.01.2021, 04:12
для домохозяек и других аналогичных мне неучей.
...и это всё о нём (с)
Я так понимаю для стандартной ардуино уно пинов не хватит ? А если в два захода? чисто для сканированийя)))
а для Arduino Mega 2560 ? там вроде как 54 IO. А то есть погибшая при пожаре мини слим усб клава, я бы позаглядывал, что там в унутри.

valerium
04.01.2021, 10:29
Я так понимаю для стандартной ардуино уно пинов не хватит ? А если в два захода? чисто для сканированийя)))
а для Arduino Mega 2560 ? там вроде как 54 IO. А то есть погибшая при пожаре мини слим усб клава, я бы позаглядывал, что там в унутри.
В несколько заходов можно попробовать, но их будет не два, а больше. Просто потому, что могут оказаться клавиши _между_ теми линиями, которые друг друга исключили в первом и втором заходах, надо будет их еще сколько-то раз вычислять. Может получиться, что и за 10 таких заходов еще останутся "белые пятна".
На мега 2560 - запросто, раз ног хватает и если она уже есть. Надо только разобраться, как именно там именуются ноги соответствующих портов и довнести их в массив пинов. Я позавчера удивлялся, что для atmega32 параллельно существуют разные распиновки arduino, sanguino и bobuino (разная нумерация одних и тех же ног), когда искал, как их указывать в скетче.

Немного поразмыслив, могу предложить такой вариант: в несколько заходов постараться вычислить клавиши-модификаторы (опросом или даже просто тестером протыкивая гребенку разъема), найти 8 линий столбцов (или додумать ненайденную линию), после чего подключать все столбцовые линии и часть строчных, опрашивать часть клавы, затем менять строчные линии и опрашивать остальные клавиши - так мы сможем разделить все на два непересекающихся набора.

Но это получится только если для той клавиатуры справедливо правило 8 столбцовых линий (не знаю, каков процент исключений существует)

valerium
06.01.2021, 01:59
Допиливаю рабочую прошивку атмеги, смапил основную часть клавиш, работают цифры-буквы, шифты, курсор, капслок - без косяков и без пропусков клавиши-модификатора.
Вроде бы и все хорошо. Но не удается повторить ту логику, которая была сделана изначально у andykarpov для работы с двойственными клавишами PC, которые меняют назначение в зависимости от состояния шифта - например =/+ или ;/: - просто потому, что это не PS/2 и нажатие шифта для "второго значения" еще можно поймать, но нет события на отпускание клавиши для возврата к "первому значению".
Добавлять глючности в работу простого и приделывать всякие флаги промежуточных состояний я не хочу, поэтому на них вынесу одиночные функции и этого на данный момент хватит.
Кейпада на клавиатуре Asus X200 нет и в шаблон я его добавлять пока не буду, т к проверить толком не на чем.

Еще исходное CPLD-решение имеет 4 регистра для передачи спецфункций (reset, magic, turbo и некий special), их тоже планирую включить, есть ли стандарт на их расположение на PCшной клавиатуре ? Или каждый лепит, как ему нравится ?
Еще по поводу стандарта - не могу привыкнуть к раскладкам, где оба шифта работают как CS, а оба CTRL как SS; мне кажется логичнее сделать все левые модификаторы заменой CS, а все правые - заменой SS. Ну на ALT еще куда ни шло поставить CS+SS.
Что по этому поводу говорится в правилах хорошего тона ?

zebest
06.01.2021, 16:23
подключать все столбцовые линии и часть строчных, опрашивать часть клавы, затем менять строчные линии и опрашивать остальные клавиши - так мы сможем разделить все на два непересекающихся набора.
ну я как то так и предполагал для ардуинки с малым количеством пинов. Для жирной ардуинки это не существенно.
Ну и раз про жирную ардуинку, типа 2560.
А что, например нельзя сразу сделать, на входе 25 линий с клавы, на выходе 8+5 линий на ZX ? Без CPLD

valerium
06.01.2021, 18:17
Так уже было много раз сделано и всегда был достигнут предел быстродействия у такого контроллера, чаше всего он на 20-25 мгц avr-ки успевал обрабатывать клавиатурный опрос спека со стандартными 3,5мгц, а в турбо-режимах это не работало или частично, или вообще.
Именно поэтому CPLD красиво решает эту проблему буферным регистром, который спек опрашивает независимо от жизни МК.

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

Serg6845
06.01.2021, 19:56
добыл epm7128 и пересобрал под нее практически без изменений CPLD-версию andykarpov, хоть и напрягало меня, что под какой-то промежуточный клавиатурный регистр тратится CPLD, в которую можно засунуть практически всю логику спека.


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




Запустил все это с ардуинкой на atmega328p и на ps/2-клавиатуре все заработало прям с разбегу. Потом с некоторыми мелкими изменениями контроллер поменял на atmega32 с его четырьмя 8-разрядными портами (из которых в дальнейшем без SPI и rx/tx остается 26 ног - вполне достаточно для многих клавиатурных матриц). Код пересобрал в том же arduno IDE с модулями для atmega32 - клавиатура PS/2 тоже заработала без проблем, однако есть неприятность - исходная Atmega328p с включенным фьюзом CKOUT дает получить наружу тактовые импульсы своего генератора, которыми тактируется CPLD-часть. А вот Atmega32 такого не имеет и для CPLD пришлось сделать отдельный генератор.
Вопрос к знающим: какие-то еще из богатых ногами атмег умеют раздавать свой генератор наружу ?



встречный вопрос - а зачем? если все равно пересобирать CPLD - там без этого клока можно легко обойтись. если не копипастить навернутый полный SPI слейв, от которого нужен банальный сдвиговый регистр - то в качестве клока вполне пойдет сигнал AVR_SS.

valerium
07.01.2021, 00:47
это у спека все просто и прозрачно, всего 40 триггеров и немного логики. вот когда я для специалиста такое делал - вот там да...
p.s. впрочем там я даже без контроллера обошелся - хотя этот грязный хак не на всех клавах работает.

Там вроде матрица больше и разбросана по разным портам ВВ55... Или она опрашивается как-то иначе ?
А можно этот вариант без контроллера посмотреть ? Не, я не специалист в "Специалистах", просто сама идея интересна.



встречный вопрос - а зачем? если все равно пересобирать CPLD - там без этого клока можно легко обойтись. если не копипастить навернутый полный SPI слейв, от которого нужен банальный сдвиговый регистр - то в качестве клока вполне пойдет сигнал AVR_SS.
Да ответ простой - не смог я этого ) Пока не умею. Я ведь ненастоящий сварщик.
Скопипастить сложный пример было проще, чтобы хоть с чего-то начать.

Как я понимаю, это примерно вот так должно выглядеть на vhdl, если ориентироваться на CPLD-решение Андрея Карпова (вся клава+спецкнопки - 6 слов по 16-бит, режим MSBFIRST, в старшем байте "адрес" кейстатусов в CPLD-регистре, в младшем байте сами кейстатусы):



entity SPI_slave is
Port ( SCK : in STD_LOGIC;
DATA : in STD_LOGIC;
SS : in STD_LOGIC);
end SPI_slave;

architecture Behavioral of SPI_slave is
signal spi_do : STD_LOGIC_VECTOR (15 downto 0);
signal kb_data : std_logic_vector(39 downto 0) := (others => '0'); -- 40 keys

-- additional signals
signal reset : std_logic := '0';
signal turbo : std_logic := '0';
signal magick : std_logic := '0';
signal special : std_logic := '0';

begin

process (SCK)
begin
if (SCK'event and SCK = '1') then
if (SS = '0') then
spi_do <= spi_do (14 downto 0) & DATA;
end if;
end if;
end process;

process (SS)
begin
if (SS'event and SS = '1') then
case spi_do(15 downto 8) is
when X"01" => kb_data(7 downto 0) <= spi_do (7 downto 0);
when X"02" => kb_data(15 downto 8) <= spi_do (7 downto 0);
when X"03" => kb_data(23 downto 16) <= spi_do (7 downto 0);
when X"04" => kb_data(31 downto 24) <= spi_do (7 downto 0);
when X"05" => kb_data(39 downto 32) <= spi_do (7 downto 0);
when X"06" => reset <= spi_do(0); turbo <= spi_do(1); magick <= spi_do(2); special <= spi_do(3);
when others => null;
end case;
end if;
end process;

end Behavioral;


Опять же - для собственного развлечения я это сделаю, но будет ли в этом какая-то практическая выгода, неизвестно, т.к. ПЛИСка и 7128, и 3128, и более мелкие *064 стоят одних и тех же 150-200 руб на каждом китайском углу. И цена решения будет одна, хоть 40 триггеров задействовано в CPLD, хоть 100+. Только если генератор сэкономить...


UPD: Собственно, доработал CLPD, убрал жирного SPI slave, убрал генератор.
77 of 128 macrocells. Сильно много не оторвать, в 64 точно не упихать.
74407

Serg6845, спасибо за науку )

andykarpov
07.01.2021, 04:16
Отличная идея тактировать от клока SPI, чо-то как-то сразу в голову и не пришло :)

ЗЫ: по поводу обычного сдвигового регистра вместо SPI - в оригинальной схеме на тиньке, которую я брал за основу - так и было сделано.
Когда я повторил это же решение, выяснилось, что на большой скорости обмена сдвиговый регистр мог ловить мусор, достаточно часто, в результате - фантомные нажатия клавиш и другие неприятности.
Поэтому SPI тут не просто так :)

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

Что делать с расширенными кнопками и кнопками, которые должны генерировать последовательности (макросы) - тут, конечно, вопрос, как правильнее сделать...

- - - Добавлено - - -

ЗЫ: и да, как ни крути - в 7064 что-то никак не впихивается :) А хотелось бы, конечно :)

Serg6845
07.01.2021, 12:06
Там вроде матрица больше и разбросана по разным портам ВВ55... Или она опрашивается как-то иначе ?

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



А можно этот вариант без контроллера посмотреть ? Не, я не специалист в "Специалистах", просто сама идея интересна.


там в основе тот же сдвиговый регистр.
схема приемника кодов с клавы (http://sksb3.no-ip.org:8085/kbreg_at.gif)
на с0 подается 625кГц со счетчика, на с1 - строчная синхронизация (у меня VGA, 31кГц)
но некоторые АТ клавы без команд инициализации не работают, а некоторые вобще валят какой-то мусор непрерывно - поэтому на свой страх и риск :)



Да ответ простой - не смог я этого ) Пока не умею. Я ведь ненастоящий сварщик.
Скопипастить сложный пример было проще, чтобы хоть с чего-то начать.

Как я понимаю, это примерно вот так должно выглядеть на vhdl, если ориентироваться на CPLD-решение Андрея Карпова (вся клава+спецкнопки - 6 слов по 16-бит, режим MSBFIRST, в старшем байте "адрес" кейстатусов в CPLD-регистре, в младшем байте сами кейстатусы):


я не слишком силен в vhdl, в основном схематиком пользуюсь. но вобще-то я имел в виду по SCK тупо загонять данные в регистр, а по фронту SS (в конце посылки) - уже распихивать результат в клавиатурную матрицу.



Опять же - для собственного развлечения я это сделаю, но будет ли в этом какая-то практическая выгода, неизвестно, т.к. ПЛИСка и 7128, и 3128, и более мелкие *064 стоят одних и тех же 150-200 руб на каждом китайском углу. И цена решения будет одна, хоть 40 триггеров задействовано в CPLD, хоть 100+. Только если генератор сэкономить...

UPD: Собственно, доработал CLPD, убрал жирного SPI slave, убрал генератор.
77 of 128 macrocells. Сильно много не оторвать, в 64 точно не упихать.


да, в 64 походу не влезет. там в абсолютном минимуме 56 триггеров - spi регистр и 40 клавиш - плюс спецкнопки...

UPD:
хотя если пооптимизировать - можно например сделать SPI регистр 8-битным с 5 битами данных и увеличить количество посылок с атмеги. минус 8 ячеек. но все равно впритык.



74407

Serg6845, спасибо за науку )

да всегда пожалуйста :)

- - - Добавлено - - -


Отличная идея тактировать от клока SPI, чо-то как-то сразу в голову и не пришло :)

ЗЫ: по поводу обычного сдвигового регистра вместо SPI - в оригинальной схеме на тиньке, которую я брал за основу - так и было сделано.
Когда я повторил это же решение, выяснилось, что на большой скорости обмена сдвиговый регистр мог ловить мусор, достаточно часто, в результате - фантомные нажатия клавиш и другие неприятности.
Поэтому SPI тут не просто так :)


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

valerium
09.01.2021, 03:57
Добил zx-unikeyboard до более-менее законченного варианта. Сейчас работает вся осмысленная часть клавиатуры плюс 4 спецсигнала (/reset, /magic, turbo on/off, special on/off). У себя их привязал на F12, F2, F10 и PrtScr соответственно.
У клавиатуры не смог добиться стабильной работы макросов, которые с одной клавиши в несколько "нажатий" эмулируют ввод символов [ ] { }, а поскольку в нестабильном варианте все равно ими пользоваться не буду, решил от них отказаться. Еще пока не не смог красиво привязать PC-шную раскладку символов -/_ =/+ ;/: (т е без шифта и с шифтом), поэтому символы _, +, : разнес по другим клавишам.
Благодаря упрощению SPI была уменьшена CLPD-часть, правда осталась CPLD той же "емкости", но не требуется тактовый генератор для нее; также убран даже кварц атмеги - совершенно нормально все работает с внутренним 8мгц- генератором, таким образом вся схема упрощена до atmega32-16au, epm7128slc84, разъемов и пуллап-резисторов.
Также убрал с контроллера все светодиоды и прочие бантики - все в пользу максимального количества ног для клавиатуры.
Играть в лотерею с epm7128slc больше не хочу, беда с ними - все приходят непригодные для прошивки по jtag, поэтому живой вариант буду делать на epm3128atc100 (вроде значительно меньше хлама продается ?) и с прицелом на максимально плоскую плату.

Да простит CLR, ибо тема начиналась с идеи о другом, но тем не менее ссылку пока выложу здесь.
Пробую пользоваться гитхабом, поэтому вот: https://github.com/valerium-labs/zx-unikeyboard - схема, сорсы CPLD и AVR-частей.

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

Этап 1. Подключаем клавиатуру к атмеге (32, 16 или какой там захочется - главное, чтоб было как минимум четыре 8-разрядных порта) и собираем под нее avr-keyexplorer.ino в Arduino IDE.
Если нет поддержки нужного контроллера, ставим его, например, из модуля MightyCore через менеджере плат - https://mcudude.github.io/MightyCore/package_MCUdude_MightyCore_index.jsonhttps://mcudude.github.io/MightyCore/package_MCUdude_MightyCore_index.json), как добавить в менеджер плат - читать здесь (https://alexgyver.ru/lessons/naked-chip/). Обращаем внимание на установку частоты 8 мгц в IDE при сборке прошивки, а также на установку соответствующих фьюзов (8 мгц на внутреннем генераторе). В случае других частот/вариантов тактирования правим то и другое единообразно.
Если есть отклонения от схемы в подключении пинов клавиатурного разъема к атмеге - приводим в соответствие все #define PIN* в скетче.
Прошиваем сборку прошивки в атмегу своим любимым программатором и соответствующим софтом.
Если CPLD уже запаяна, нужно прошить ее ДО атмеги, чтобы ее выводы SPI были уже в режиме входов и не мешали работа программатора с атмегой.

Этап 2. Подключаем UART атмеги к ПК через любой удобный преобразователь, смотрим дебаг с соответствующего компорта, я пользовался встроенным монитором ком-порта в Arduino IDE. Нажимаем все клавиши своей клавиатуры, они все должны генерировать нажатия с парой чисел в дебаговом выводе - это номера пары пинов для каждой клавиши. Записываем эти значения.

Этап 3. Нужно разделить все пины на столбцовые и строковые, столбцовых обычно <=8, строковых может быть заметно больше. Один из способов найти пины столбцов - это собрать воедино неповторяющиеся пины парных клавиш-модификаторов (LCTRL, RCTRL, LALT, RALT, LSHIFT, RSHIFT, Fn, WIN/GUI).

Пример для клавиатуры от Asus X200:
---------------------------
LCTRL 4 12
RCTRL 4 6
LALT 2 7
RALT 2 9
LSHIFT 5 11
RSHIFT 5 8
GUI(WIN) 3 13
Fn 1 6
---------------------------
Здесь жирным выделены номера пинов не пересекающиеся в парах лев/прав модификаторов, они будут назначены столбцами: 6,7,8,9,11,12,13. Предположительно еще линия 10 будет столбцом, это можно проверить по ОТСУТСТВИЮ клавиши для нее в паре с какой-либо из этих семи столбцовых линий. Таким образом получаем линии столбцов 6,7,8,9,10,11,12,13, остальные линии 1,2,3,4,5,14,15,16,17,18,19,20,21,22,23,24 будут строками.

Для проверки строится таблица-матрица для всех линий и соответствующих им клавиш. Если в ходе внесения очередной клавиши мы не можем ее внести потому что она объединяет два "столбца" или две "строки", значит в выборе столбца/строки была допущена ошибка - пересматриваем назначение столбцов/строк.

Этап 4. Когда есть матрица, переходим к модулю avr-kbd правим в customkey.h перечисление всех нужных нам клавиш с уникальными номерами, а также заполняем массив keyaddr в формате {<клавиша>, <столбец>, <строка>} (пример: { KEY_LCTRL, 12, 4 }).
В самом скетче правим массивы констант cols и rows, заполняя их номерами столбцовых и строковых пинов соответственно. Если клавиатура имеет нестандартную размерность, корректируем COLS_MAX и ROWS_MAX (8 и 16 по умолчанию).
Если есть отклонения от схемы в подключении пинов клавиатурного разъема к атмеге - приводим в соответствие номера пинов в #define PIN*.
Просматриваем все кейсы в функции fill_kbd_matrix, корректируем обработчики нужных клавиш, ненужные убираем, нужные отсутствующие добавляем (скорее всего они будут дублировать уже существующие, поэтому их значения просто добавляются как кейсы перед нужным обработчиком).
Собираем прошивку, для первоначальной отладки есть DEBUG_MODE=1, можно через UART посмотреть, читает ли и обрабатывает ли атмега нужную клавишу.

Этап 5. Если CPLD еще нет, то запаиваем ее и прошиваем (пример прошивки для epm7128slc84 в проекте соответствует схеме). Подключаем к Спеку - в соответствии со схемой. Проверяем и допиливаем прошивки по своему вкусу.

Что еще можно сделать.
1. Если отказаться от UART и дебага, можно количество ног клавиатуры расширить до 28.
2. Хочу немного автоматизировать формирование матрицы, идея проста - делим все пины на "два лагеря", т е на два непересекающихся множества. Получив из дебага массив опроса клавиш в вида пар пинов для N клавиш это достаточно просто сделать за N проходов по этому массиву (взяли первую клавишу, один пин - в столбцы, второй - в строки, дальше ищем все клавиши с таким же столбцом в одной из координат, значит вторые ее координату добавляем к строкам, дальше по каждой из полученных строк ищем клавиши с такой же строкой - получаем новые столбцы, перебираем новые столбцы - так до тех пор, пока не обойдем пройдем все клавиши (надо как-то их отмечать при переборе). Если находим клавишу с обоими пинами в предполагаемых столбцах или строках, значит где-то есть ошибка переноса данных или опроса клавиатуры. Если все пройдено, но остались клавиши с никуда не отнесенными пинами - значит клавиатуры имеет клавиши вне основной матрицы, надо будет заадуматься, нужно ли их использовать.
Писать такое на C как-то уныло, наверное пришло время осваивать python.
3. Раз уж остается свободной довольно немалая часть CPLD (много и ног, и макроячеек), есть идея развести плату как "CPLD-макетку", чтоб в дальнейшем можно было в нее добавлять какие-то посторонние доработки. Мне раньше всегда было мало макетного поля Ленинграда - это будет решением в угоду моей жадности до макеток )

CLR
16.02.2021, 09:50
Пока прогрессивная общественность городит всякую цплду, я неторопливо, старым дедовским методом переделал очередную миниатюрную клаву в ps/2. Ибо доступные в магазине ps/2 клавы ну все как одна в дизайне "крыло самолета". Вот как это выглядит изнутри и снаружи:

https://zx-pk.ru/attachment.php?attachmentid=74623&d=1612416499

https://zx-pk.ru/attachment.php?attachmentid=74624&d=1612416533

На фото тест клавиатуры в Профи-режиме на плате KarabasPro. Городить печатку ради одного раза мне было лень, поэтому внутри мотня (из под коня). Все, как мы любим. Зато снаружи клавиатура "идентична натуральной" вплоть до микроюсб разьема (который теперь на самом деле ps/2).

Сперва даже думал оставить bluetooth функционал, и оба контроллера впритык помещались в кузов, но один контроллер мешал работать другому, развязку на диодах или пулап-резисторах мне было делать лень, поэтому оставил только ps/2 режим. Работает очень хорошо.

valerium
16.02.2021, 16:54
Это как раз то, о чем спрашивал tank-uk вот в этой (https://zx-pk.ru/threads/32731-zx-unikeyboard-ili-kak-podklyuchit-k-speku-klaviaturu-proizvolnoj-konfiguratsii.html?p=1104228&viewfull=1#post1104228) ветке.
А у Карабаса-про клавиатурный контроллер на чем реализован? Он на атмеге классически или на чем-то внутри циклопа ?
ps2avr ведь с ним работает как надо ?

CLR
17.02.2021, 09:58
На атмеге 328. Работает отлично, без каких-либо проблем. В тесте залипших клавиш на профи (если сделать ресет с нажатой клавишей) видно, что можно одновременно нажать до трех клавиш. То есть играть с такой клавы тоже вполне себе можно. Например, перемещение по диагонали, типа влево-вверх и одновременный огонь. Более трех если нажать - появляются фантомные нажатия (из-за отсутствия диодной развязки внутри матрицы).

andykarpov
20.02.2021, 03:12
Зато снаружи клавиатура "идентична натуральной" вплоть до микроюсб разьема (который теперь на самом деле ps/2).

А можно ли узнать модельку клавы-донора? Тоже чо-то такое махонькое хочется к прошке замутить :)

CLR
20.02.2021, 04:24
А можно ли узнать модельку клавы-донора?

Oklick840s. Есть ещё точно такие же JETACCESS SLIM LINE K7 BT и Rapoo E6300.
Надеюсь, они и в разводке идентичны. Все файлы для них у меня есть, если что :)

Eltaron
20.02.2021, 10:10
А кнопки Menu-то нету, для Карапрофика не пойдет :)

CLR
20.02.2021, 11:54
А кнопки Menu-то нету, для Карапрофика не пойдет :)

Я в прошивке ее на FN забиндил. Что выглядит логично. Ещё некоторые колпаки местами переставил, чтобы ctrl был в левом нижнем углу, а слева и справа от пробела находились lalt и ralt. Правда, для одного из альтов колпака с соответствующей надписью в этой клаве нету (но я то знаю, что там за кнопа) :) Ещё есть пара непонятных кноп - на кнопку с земным шаром назначил pause, а на кнопку с >< назначил prtscr- чтобы раскладки spec/xt переключать.

tank-uk
13.03.2021, 13:24
Приехали , будем пробовать

https://uploads.tapatalk-cdn.com/20210313/9f4ad809edf0f8d0a30b324999ce4e33.jpg

valerium
23.08.2022, 18:51
https://zx-pk.ru/attachment.php?attachmentid=74188&d=1607856275

Достал аналогичную клавиатуру. Пока в руки не взял, не понимал, насколько она мизерная - тут ни одна фотография (и ни одно описание с размерами) осязаемой картины не дает.
Она буквально на пару сантиметров больше ладони.
Но самое главное - не могу понять, как ее открыть - как отклеить и не сломать ? Подскажите люди добрые, что с ней делать - греть воздухом, поддевать-тянуть или что ?

CLR
26.08.2022, 15:02
Двусторонний скотч там на все днище - можно погреть феном железяку, можно так поддеть.
Там снизу две резиновых полоски-ножки, они в отверстиях в металлическом дне, можно их толкать и поднимать клаву, отделяя от поддона.

valerium
07.12.2022, 22:24
CLR, спасибо за совет. С третьего подхода сумел расслоить клавиатуру. Вот что из этого получилось (https://zx-pk.ru/threads/34178-sizif-xxs.html?p=1168143&viewfull=1#post1168143)

CityAceE
19.03.2024, 09:22
Прежде чем собирать этот контроллер, хочу удостовериться у собиравших его. Я точно смогу подключить клавиатуру Специалиста с матрицей 12*6 (+ 2 отдельных кнопки) к PC? Сложно ли будет откорректировать раскладку в прошивке?

UPD

Вот к такой плате (https://aliexpress.ru/item/32707479192.html?sku_id=60849410391) можно будет подключить без дополнительных деталей клавиатуру? Подойдёт ли выложенная прошивка?

https://pic.maxiol.com/thumbs2/1710848610.3280329127.atmega.jpg (https://pic.maxiol.com/?v=1710848610.3280329127.atmega.jpg&dp=2)

valerium
20.03.2024, 23:05
Прежде чем собирать этот контроллер, хочу удостовериться у собиравших его. Я точно смогу подключить клавиатуру Специалиста с матрицей 12*6 (+ 2 отдельных кнопки) к PC? Сложно ли будет откорректировать раскладку в прошивке?


У атмеги с 4 портами на такую матрицу ног хватит (до 26 можно), так что подключить 12+6 линий - и две доп.клавиши хоть каждую отдельно можно вешать. Плата на фото вполне годится.
Вопрос в том, что она должна будет набирать на PC, то есть какие ps2-коды слать при нажатии специфических клавиш Специалиста ?
Прошивку можно задействовать и эту, и еще были варианты, все адаптируемо.

CityAceE
21.03.2024, 08:14
Вопрос в том, что она должна будет набирать на PC, то есть какие ps2-коды слать при нажатии специфических клавиш Специалиста ?
У меня основная цель этого контроллера - использовать настоящую клавиатуру от Специалиста совместно с эмулятором Emu80. А у этого эмулятора все кнопки Специалиста забиндены на разные кнопки стандартной клавиатуры. Так что проблем нет.

Заказал эту плату. По получению буду экспериментировать. Надеюсь на помощь в адаптации прошивки.

Z80trdos
31.03.2024, 00:27
CLR, valerium, спасибо вам огромное!!!
Вдохновился вашими трудами, тоже собрался разобрать и переделать Oklick840s.
Не могли бы вы поделиться своими файлами, схемами и другими наработками для Oklick840s?

Есть Ардуинка 328p мини вот такая: https://learn.adafruit.com/introducing-pro-trinket/overview, думаю как раз влезает в коробочку Oklick840s.
Хочу наколхозить максимально быстро МГТФ проводом, внутри всё равно не видно.
А можно ли как-то приспособить родную плату, чтобы подпаяться к разъёму шлейфа клавиатуры?

Прочитал всю тему, архив oklick840s.zip скачал, но таблицы раскладки плохо читаемы.
Что ещё полезного можно использовать для повторения?
:v2_dizzy_roll: