Важная информация

User Tag List

Страница 8 из 9 ПерваяПервая ... 456789 ПоследняяПоследняя
Показано с 71 по 80 из 88

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

  1. #71
    Master
    Регистрация
    19.12.2013
    Адрес
    г. Никополь, Украина
    Сообщений
    997
    Спасибо Благодарностей отдано 
    339
    Спасибо Благодарностей получено 
    667
    Поблагодарили
    177 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

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

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

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

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

  2. #72
    Veteran Аватар для Serg6845
    Регистрация
    30.12.2018
    Адрес
    г. Москва
    Сообщений
    1,004
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    250
    Поблагодарили
    230 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

    А можно этот вариант без контроллера посмотреть ? Не, я не специалист в "Специалистах", просто сама идея интересна.
    там в основе тот же сдвиговый регистр.
    схема приемника кодов с клавы
    на с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, спасибо за науку )
    да всегда пожалуйста

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

    Цитата Сообщение от andykarpov Посмотреть сообщение
    Отличная идея тактировать от клока SPI, чо-то как-то сразу в голову и не пришло

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

    Зверинецъ

    Специалист (был когда-то "совсем стандарт") - 1988-2023
    Ленинград1 +256К +AY+BDI+VGA выход +Ethernet (Speccyboot) +Xmodem (115200)+divmmc
    Ленинград2 + CF карта
    Платформа 8085+Z80+CPLD (Специалист МХ2 +SD +FDD +PS/2kbd)
    БК0010-01 стоковый
    [свернуть]

  3. Этот пользователь поблагодарил Serg6845 за это полезное сообщение:

    valerium (07.01.2021)

  4. #73
    Master Аватар для valerium
    Регистрация
    03.05.2020
    Адрес
    г. Челябинск
    Сообщений
    760
    Записей в дневнике
    2
    Спасибо Благодарностей отдано 
    225
    Спасибо Благодарностей получено 
    257
    Поблагодарили
    136 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Добил 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...ore_index.jsonhttps://mcudude.github.io/MightyCore/package_MCUdude_MightyCore_index.json), как добавить в менеджер плат - читать здесь. Обращаем внимание на установку частоты 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-макетку", чтоб в дальнейшем можно было в нее добавлять какие-то посторонние доработки. Мне раньше всегда было мало макетного поля Ленинграда - это будет решением в угоду моей жадности до макеток )

  5. Этот пользователь поблагодарил valerium за это полезное сообщение:

    CLR (16.02.2021)

  6. #74
    Activist Аватар для CLR
    Регистрация
    03.02.2005
    Адрес
    Челябинск
    Сообщений
    326
    Спасибо Благодарностей отдано 
    260
    Спасибо Благодарностей получено 
    52
    Поблагодарили
    28 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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





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

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

  7. Эти 3 пользователя(ей) поблагодарили CLR за это полезное сообщение:

    andykarpov (20.02.2021), solegstar (16.02.2021), valerium (16.02.2021)

  8. #75
    Master Аватар для valerium
    Регистрация
    03.05.2020
    Адрес
    г. Челябинск
    Сообщений
    760
    Записей в дневнике
    2
    Спасибо Благодарностей отдано 
    225
    Спасибо Благодарностей получено 
    257
    Поблагодарили
    136 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Это как раз то, о чем спрашивал tank-uk вот в этой ветке.
    А у Карабаса-про клавиатурный контроллер на чем реализован? Он на атмеге классически или на чем-то внутри циклопа ?
    ps2avr ведь с ним работает как надо ?

  9. #76
    Activist Аватар для CLR
    Регистрация
    03.02.2005
    Адрес
    Челябинск
    Сообщений
    326
    Спасибо Благодарностей отдано 
    260
    Спасибо Благодарностей получено 
    52
    Поблагодарили
    28 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    На атмеге 328. Работает отлично, без каких-либо проблем. В тесте залипших клавиш на профи (если сделать ресет с нажатой клавишей) видно, что можно одновременно нажать до трех клавиш. То есть играть с такой клавы тоже вполне себе можно. Например, перемещение по диагонали, типа влево-вверх и одновременный огонь. Более трех если нажать - появляются фантомные нажатия (из-за отсутствия диодной развязки внутри матрицы).
    Мои игрушки: 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

  10. #76
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  11. #77
    Master
    Регистрация
    19.12.2013
    Адрес
    г. Никополь, Украина
    Сообщений
    997
    Спасибо Благодарностей отдано 
    339
    Спасибо Благодарностей получено 
    667
    Поблагодарили
    177 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CLR Посмотреть сообщение
    Зато снаружи клавиатура "идентична натуральной" вплоть до микроюсб разьема (который теперь на самом деле ps/2).
    А можно ли узнать модельку клавы-донора? Тоже чо-то такое махонькое хочется к прошке замутить

  12. #78
    Activist Аватар для CLR
    Регистрация
    03.02.2005
    Адрес
    Челябинск
    Сообщений
    326
    Спасибо Благодарностей отдано 
    260
    Спасибо Благодарностей получено 
    52
    Поблагодарили
    28 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от andykarpov Посмотреть сообщение
    А можно ли узнать модельку клавы-донора?
    Oklick840s. Есть ещё точно такие же JETACCESS SLIM LINE K7 BT и Rapoo E6300.
    Надеюсь, они и в разводке идентичны. Все файлы для них у меня есть, если что
    Мои игрушки: 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

  13. Этот пользователь поблагодарил CLR за это полезное сообщение:

    andykarpov (28.03.2021)

  14. #79
    Sinclair User Аватар для Eltaron
    Регистрация
    16.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,045
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    144
    Спасибо Благодарностей получено 
    463
    Поблагодарили
    326 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А кнопки Menu-то нету, для Карапрофика не пойдет
    Граф Дракула наш кумир, патамушта он вомпир!
    VKINK 9 : BORDER NOT PI

  15. #80
    Activist Аватар для CLR
    Регистрация
    03.02.2005
    Адрес
    Челябинск
    Сообщений
    326
    Спасибо Благодарностей отдано 
    260
    Спасибо Благодарностей получено 
    52
    Поблагодарили
    28 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Eltaron Посмотреть сообщение
    А кнопки Menu-то нету, для Карапрофика не пойдет
    Я в прошивке ее на FN забиндил. Что выглядит логично. Ещё некоторые колпаки местами переставил, чтобы ctrl был в левом нижнем углу, а слева и справа от пробела находились lalt и ralt. Правда, для одного из альтов колпака с соответствующей надписью в этой клаве нету (но я то знаю, что там за кнопа) Ещё есть пара непонятных кноп - на кнопку с земным шаром назначил pause, а на кнопку с >< назначил prtscr- чтобы раскладки spec/xt переключать.
    Мои игрушки: 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

Страница 8 из 9 ПерваяПервая ... 456789 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Переделать клавиатуру AT >> XT
    от artice в разделе Устройства ввода
    Ответов: 27
    Последнее: 20.10.2023, 21:34
  2. Ответов: 7
    Последнее: 02.06.2018, 20:56
  3. Как можно восстановить клавиатуру?
    от IMPguitar в разделе Устройства ввода
    Ответов: 1
    Последнее: 31.01.2017, 19:17
  4. как переделать CAS в WAV
    от marsNRG в разделе Atari
    Ответов: 9
    Последнее: 09.01.2016, 18:45

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •