Наверное можно, при определенном программистском скилле.
Наверное можно, при определенном программистском скилле.
Мои игрушки: PowerbookG4 / MacMiniG4 / MacMini i5 / Amiga1260 / Commodore64 / Atari65XE / MSX1 SVI-728 / MSX2 КУВТ2 / MiST / MiSTer / Profi+ / KarabasPro / Speccy2010 / Aspect128 / ZX-UNO VGA 2M / PS3 / PS4Pro+PSVR / PSP / PS Vita / GBC / LDK Game / RG350M / iPhone / iPad / Raspberry Pi (0/3B+/4B/5)
MorphOS / AmigaOS / MacOS / Linux
Такой вариант подразумевает, что у нас есть клавиатура, ноут или еще что-то живое и действующее.
А профит данного подхода был в том, чтобы заюзать любую клавиатуру, полученную отдельно от "туловища". То есть найти дешево подходящую по форм-фактору запчасть в китае или на разборе и встроить. Поэтому в более полном смысле надо анализировать именно матрицу.
"Во времена всеобщей лжи говорить правду - это экстремизм" - афоризм.
Тут люди уже озадачивались подобной проблемой: https://www.instructables.com/How-to...rd-Controller/
Мои игрушки: PowerbookG4 / MacMiniG4 / MacMini i5 / Amiga1260 / Commodore64 / Atari65XE / MSX1 SVI-728 / MSX2 КУВТ2 / MiST / MiSTer / Profi+ / KarabasPro / Speccy2010 / Aspect128 / ZX-UNO VGA 2M / PS3 / PS4Pro+PSVR / PSP / PS Vita / GBC / LDK Game / RG350M / iPhone / iPad / Raspberry Pi (0/3B+/4B/5)
MorphOS / AmigaOS / MacOS / Linux
valerium(13.12.2020)
Хороший вариант. Прямо как есть оно не годится - там usb-клавиатура на выходе, но идея практически наша. То есть подключить клавиатуру, по списку сопоставить нажатия сочетаниям строки-столбца, разобрать результат и пропатчить рабочую прошивку. Там еще есть какой-то код на python (Marcel's python program) в который я еще не вникал, который это все анализирует и выделяет наборы входных и выходных пинов (столбцов и строк).
Ставить teensy даже 2.0 в это дороговато, хотя и соизмеримо с ардуинками. Мне кажется для нашей задачи достаточно avr-ки попроще, атмега 16/32 самое то. Принцип опроса линий для чтения клавиш в скетче весьма прост и понятен. И у нас он будет алгоритмически таким же.
И там есть инфа по целой серии клавиатур - это справочно, но будет полезно.
Еще, конечно, хотелось бы засунуть это в один камень. Чтобы и матрицу им опрашивать, и спеку клавиши нажимать. Но ни в одну дешевую авр-ку это по количеству ног не залезет, а ставить какие-то расширители дороже, чем оставить спековский функционал на втрой авр-ке.
CLR, а как все это работает на трехступенчатой схеме (ps2avr - контроллер ps2 - спек) - там задержки адекватные ?
Последний раз редактировалось valerium; 13.12.2020 в 20:47.
На Speccy2010 вообще без проблем - как родная.
P.S. Вызвонил окончательно матрицу Oklick840s - всё-таки довольно мудовое это занятие, без разбора. Хотя частичный прозвон через включённый контроллер и разъём fpc-26p на своей макетке несколько облегчили задачу. Ну и RC, подписанные на плате контроллера
Алгоритм поиска нажатой клавиши при неизвестных входах R и C достаточно очевидный - назначаем первый контакт R, затем все остальные перебираем как предположительные C до пересечения; назначаем R второй контакт и по кругу. В итоге получившийся массив RC надо как-то распарсить по каждому минимальному количеству соответствий C при данном R. Кажется, тут даже неважно, будут ли итоговые значения соответствовать физическим линиям топологии; важнее логическая структура.
Вот так выглядит итоговый кеймап (разрешение форум конечно "оптимизировал"):
Глядя на эту таблицу, мне кажется, что некоторые столбцы можно смело соединить, там где значения не пересекаются по строкам, чтобы уменьшить количество соединений. Но будет ли это представлять проблему при нажатии некоторых комбинаций - пока неясно.
Последний раз редактировалось CLR; 15.12.2020 в 11:19.
Мои игрушки: PowerbookG4 / MacMiniG4 / MacMini i5 / Amiga1260 / Commodore64 / Atari65XE / MSX1 SVI-728 / MSX2 КУВТ2 / MiST / MiSTer / Profi+ / KarabasPro / Speccy2010 / Aspect128 / ZX-UNO VGA 2M / PS3 / PS4Pro+PSVR / PSP / PS Vita / GBC / LDK Game / RG350M / iPhone / iPad / Raspberry Pi (0/3B+/4B/5)
MorphOS / AmigaOS / MacOS / Linux
Вчитался тут в то, что написано на 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.
Но "самодельная клавиатура" почти молчит, лишь изредка давая какой-то невнятный мусор на произвольные замыкания линий. Как понять, выполнила ли она хотя бы команду сброса ?
Мои игрушки: PowerbookG4 / MacMiniG4 / MacMini i5 / Amiga1260 / Commodore64 / Atari65XE / MSX1 SVI-728 / MSX2 КУВТ2 / MiST / MiSTer / Profi+ / KarabasPro / Speccy2010 / Aspect128 / ZX-UNO VGA 2M / PS3 / PS4Pro+PSVR / PSP / PS Vita / GBC / LDK Game / RG350M / iPhone / iPad / Raspberry Pi (0/3B+/4B/5)
MorphOS / AmigaOS / MacOS / Linux
Припаял к 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, мы в него попадаем, но выйти обратно уже не можем. С настоящей клавиатурой такого не происходит.
Последний раз редактировалось valerium; 27.12.2020 в 00:59. Причина: some new info added
Я на днях собрал тестовый стенд для беспаечной проверки и настройки контроллера ps2avr, буду проверять свою раскладку и идеи по оптимизации.
Заодно и проверю, как оно будет работать на AVR-ZX и на KarabasPro.
![]()
Мои игрушки: PowerbookG4 / MacMiniG4 / MacMini i5 / Amiga1260 / Commodore64 / Atari65XE / MSX1 SVI-728 / MSX2 КУВТ2 / MiST / MiSTer / Profi+ / KarabasPro / Speccy2010 / Aspect128 / ZX-UNO VGA 2M / PS3 / PS4Pro+PSVR / PSP / PS Vita / GBC / LDK Game / RG350M / iPhone / iPad / Raspberry Pi (0/3B+/4B/5)
MorphOS / AmigaOS / MacOS / Linux
andykarpov(07.01.2021)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)