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

User Tag List

Страница 1 из 4 1234 ПоследняяПоследняя
Показано с 1 по 10 из 31

Тема: Контроллер для подключения PS/2 клавиатуры

  1. #1
    Member
    Регистрация
    20.12.2016
    Адрес
    г. Ростов-на-Дону
    Сообщений
    195
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Контроллер для подключения PS/2 клавиатуры

    Коллеги, привет!

    Достался мне тут корпус в неплохом состоянии от Квант-8 и я собираюсь восстановить его начинку. Для этого почти все есть:
    Плата от обычного корвета (только нужно либо перепаять выход FDD на стандартный ПКшный, либо сделать кабель)
    Флопы
    БП купил вот такой - есть опасения правда, что 60W не хватит, но если что, закажу большей мощности
    Перегородки собираюсь сделать из метала как в родном, или на 3Д принтере - еще не решил...

    Самый большой затык пока что в клавиатуре, коих насколько я понял в природе еще меньше, чем этих самых квантов. Поэтому хочу начать делать контроллер PS/2. Так как собственного мозга пока не хватает, обращаюсь к коллективному разуму))

    Первичный сбор информации говорит о следующем:
    1. Клавиатура у корвета - обычная матрица замыкателей 8 бит адресов, 16 бит данных (2х8, мультиплексоры читают по очереди, в зависимости от А8)
    2. Хочется использовать тот разъем, что на плате корвета, и не тянуть дополнительно А8 или еще что-то. Максимум питание, но контроллер можно запитать и отдельно. В кванте на сколько я понял так и реализовано - клавиатура подключена к стандартному разъему на плате корвета, где просто дополнительно выведено питание.
    3. Шина данных перед мультиплексором подтянута на +5В, ША инверсирована (т.е. считывание идет по бегающему 0)

    Перелопатил все подобные наработки в этой области для других ретро-ПК, пришел к следующим выводам:
    1. За основу лучше всего брать наработки CARO для ориона или ямахи (больше всего комментариев и логики в коде)
    2. В качестве контроллера собираюсь использовать ATmega644 в DIP40 - и портов хватает (три полноценных порта - как раз 24 контакта для матрицы 8х16) и реализованы прерывания по изменению уровня на любом бите порта

    Пока что не укладывается в голове:
    1. Как лучше поступить: вставить в схему контроллера инверторы? или не утяжелять схему и писать прошивку с учетом инверсии? читал где-то на форумах, что есть риск положить +5 на землю программно...
    2. Не нашел (или плохо искал) ничего подобного в других ПК - обычно ША больше 8 бит, а ШД - не более 8. Таким образом непонятно, как выстроить код, типа:
    D0 EQU 000H
    D1 EQU 001H
    D2 EQU 002H
    D3 EQU 003H
    D4 EQU 004H
    D5 EQU 005H
    D6 EQU 006H
    D7 EQU 007H <-- вот здесь математика оборвалась, младший байт закончился (((( а у нас еще 8 бит ШД есть...
    ;
    A0 EQU 000H
    A1 EQU 008H
    A2 EQU 010H
    A3 EQU 018H
    A4 EQU 020H
    A5 EQU 028H
    A6 EQU 030H
    A7 EQU 038H
    ;
    Ctrl EQU 080H ; Ctrl Bit7=1
    Shift EQU 040H ; Shift Bit6=1
    AltTb EQU 0C0H ;
    ;
    Kl_SL EQU A0+D0 ; Home
    Kl_CTP EQU A0+D1 ; Insert
    Kl_AP2 EQU A0+D2 ; ESCAPE
    Kl_F1 EQU A0+D3
    Kl_F2 EQU A0+D4 и т.д.
    3. Видимо необходимо переписывать прошивку, чтобы в ответ на скан-код выдавался 16-битный ответ? и программно уже разбивать старший и младший байты по двум портам?
    4. Правильно ли я понимаю, что таблица сопоставлений Скан-коды - ответы в ШД по прерываниям необходимо хранить в памяти AVR?

    В общем жду пожеланий, предложений, комментариев...
    Последний раз редактировалось surinm; 27.05.2018 в 19:40.

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

  3. #2
    Member
    Регистрация
    01.02.2018
    Адрес
    г. Железногорск
    Сообщений
    65
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А зачем столько ног? Бегло читал описание на Корвет (может не так читал и не то понял) выставляется 1 на ША клавиатуры и смотрятся 1 на ШД 8*2. Если подключать ps/2 клавиатуру то можно же просто использовать два порта ( не, можно и с одним извратится) считывать скан код сравнивать по таблице и давать 1 на нужную ногу. Не?

  4. #3
    Moderator Аватар для Serebriakov
    Регистрация
    06.04.2013
    Адрес
    г. Могилев, Беларусь
    Сообщений
    188
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    20
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Помнится FORTH32 уже делал подобный переходник на Atmega32-16, но ее скорости не хватало для нормальной обработки.

    У Кванта клавиатура отличается от клавиатуры Корвета. Но если от Кванта берется только корпус, а плата родная Корветовская, то все ок.
    Последний раз редактировалось Serebriakov; 21.06.2018 в 00:46.

  5. #4
    Member
    Регистрация
    01.02.2018
    Адрес
    г. Железногорск
    Сообщений
    65
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну у кванта 4*8 матрица. Там проще, наверное :-)
    Последний раз редактировалось iwa955; 21.06.2018 в 08:04.

  6. #5
    Moderator Аватар для Serebriakov
    Регистрация
    06.04.2013
    Адрес
    г. Могилев, Беларусь
    Сообщений
    188
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    20
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Написал FORTH32 на почту, вот ответ:
    Цитата Сообщение от forth32
    О, как давно это было-то...

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

    С точки зрения конструкции все это означает, что переходник подключается не только к порту клавиатуры, но и к системному порту на материнской плате, причем сигнал RDY надо разорвать (удалить стоящую на этом порту перемычку). Это тоже совсем неэстетично. Ущербный получился переходник, хотя, как я понял, в соседних темах делали клаву для ZX без всяких извращений с подтормаживанием процессора. Как это делали я особо не разбирался, а потом в силу жизненных обстоятельств на год забросил корвет и все связанные с ним разработки. Теперь вот все собираюсь к этому вернуться, доделать наконец тот же extrom-адаптер, но без ESL, в одно рыло, заниматься этим как-то уже не так интересно.

    Вообщем, исходник прошивки переходника я могу поискать в архиве, если интересно. И схему могу нарисовать.Но на нынешнем этапе появились недорогие ARM-контроллеры, те же stm32 например, их быстродействие в несколько раз выше атмеги, и они полностью 32-битные. По идее, такого контроллера должно за глаза хватить для обработки запросов к порту клавиатуры в реальном времени, без всяких тактов ожидания. Но лучше все же сделать разработку переходника на какой-нибдуь FPGA. Я вот подумываю об Altera Cyclone IV, их на алиэкспрессе как грязи и стоят не сильно дороже той же атмеги. Уж этого должно за глаза хватить - это же будет не программная, а аппаратная обработка, на основе встроенной в чип двухпортовой памяти.

  7. #6
    Master Аватар для andreil
    Регистрация
    20.06.2005
    Адрес
    Светлогорск
    Сообщений
    774
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Serebriakov Посмотреть сообщение
    Написал FORTH32 на почту, вот ответ:
    По этому поводу - даже на СТМ32 полностью безвейтовый контроллер не сделать, уже проверено.
    Если МК будет в бесконечном цикле ТОЛЬКО ждать опроса на шине, то самое оптимальное время реакции - около 400нс на частоте 168МГц. Это получено в результате тестов в реальном железе с реальным кодом (получение входной матрицы, формирование выходной матрицы). А нам же надо ещё и саму клавиатуру опрашивать ещё...

    PS: У себя я уже 100% буду делать адаптер с FPGA - это самый оптимальный вариант. А FORTH32 по поводу FPGA можете написать, что не надо смотреть на циклоны - в данных случаях нужен чип, поддерживающий 5-и вольтовые сигналы. А это только MAX3000 и MAX7000. Первый можно настроить как OpenDrain с подтяжкой к +5, а вторые изначально 5-и вольтовые есть.
    Последний раз редактировалось andreil; 22.06.2018 в 14:49.
    Пускаем завод. Времени нет ни на что
    "Байт-48"

  8. #7
    Activist Аватар для Trol73
    Регистрация
    07.05.2015
    Адрес
    г. Ульяновск
    Сообщений
    319
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от andreil Посмотреть сообщение
    Если МК будет в бесконечном цикле ТОЛЬКО ждать опроса на шине, то самое оптимальное время реакции - около 400нс на частоте 168МГц.
    А тут прерывания не получится использовать, чтобы не ждать в бесконечном цикле?

  9. #8
    Master Аватар для andreil
    Регистрация
    20.06.2005
    Адрес
    Светлогорск
    Сообщений
    774
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Trol73 Посмотреть сообщение
    А тут прерывания не получится использовать, чтобы не ждать в бесконечном цикле?
    Нет.
    Замерял - получилось 375нс до начала обработчика прерывания. То есть получаем около 500нс с обработкой (или чуть больше, особо не проверял). Проверено на обработчике, который работает по битовой маске (при сканировании "бегающий ноль") - он занял около 250нс.

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

    Так что если до 700нс оптимально - тогда да, можно и на СТМ32. И то, только на старших моделях, где тактовая выше 150МГц - приведённые тайминги проверялись на STM32F407VGT с частотой 168МГц.
    Пускаем завод. Времени нет ни на что
    "Байт-48"

  10. #9
    Member
    Регистрация
    17.04.2011
    Адрес
    Санкт-Петербург
    Сообщений
    184
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Насколько я помню, MAX3000 - это максимум 256 макроячеек в самой старшей модели, а встроенного блока статической памяти вообще нет. Боюсь что не влезет - тут надо матрицу 8*16 в памяти держать, то есть 128 бит.
    Я лично собрался делаль на циклоне 4. Проблема 5V в принципе обходится. Выходы адреса, идущие на клавиатуру - это ЛН2 с открытым коллектором, их можно подключать напрямую, включив в чипе внутреннюю подтяжку. Входы данных подтянуты к 5V внешним набором резисторов, который можно просто убрать с платы. Ну и, для гарантии, поключить к каждому выходу 3.3v стабилитрон на землю. Хотя это и не обязательно.

    Зато в самом убогом циклоне4 (EP4CE6) имеется 6000 макроячеек и 128кбит статической памяти. Хвтати за глаза на все, в том числе и таблицу перекодировки клавиш. Преимуцество такого решения - подключаться надо только к порту клавиатуры. В системную шину, в том числе и CSKB, лезть не надо.

    А так я несколько лет назад и правда сделал переходник на PS/2, если кому интересно, могу исходник выложить сюда. Но он требует подключения в разрыв сигнала RDY и тормозит процессор на каждом опросе клавиатуры.

  11. #10
    Master Аватар для andreil
    Регистрация
    20.06.2005
    Адрес
    Светлогорск
    Сообщений
    774
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от forth32 Посмотреть сообщение
    Насколько я помню, MAX3000 - это максимум 256 макроячеек в самой старшей модели, а встроенного блока статической памяти вообще нет. Боюсь что не влезет - тут надо матрицу 8*16 в памяти держать, то есть 128 бит.
    Я лично собрался делаль на циклоне 4. Проблема 5V в принципе обходится. Выходы адреса, идущие на клавиатуру - это ЛН2 с открытым коллектором, их можно подключать напрямую, включив в чипе внутреннюю подтяжку. Входы данных подтянуты к 5V внешним набором резисторов, который можно просто убрать с платы. Ну и, для гарантии, поключить к каждому выходу 3.3v стабилитрон на землю. Хотя это и не обязательно.

    Зато в самом убогом циклоне4 (EP4CE6) имеется 6000 макроячеек и 128кбит статической памяти. Хвтати за глаза на все, в том числе и таблицу перекодировки клавиш. Преимуцество такого решения - подключаться надо только к порту клавиатуры. В системную шину, в том числе и CSKB, лезть не надо.

    А так я несколько лет назад и правда сделал переходник на PS/2, если кому интересно, могу исходник выложить сюда. Но он требует подключения в разрыв сигнала RDY и тормозит процессор на каждом опросе клавиатуры.
    На всю матрицу хватит "за глаза". У меня в 128 ячеек уместилась матрица, и ещё пара портов. Плюс это всё общается с СТМкой
    Матрица у нас в виде 16 байт, то есть получаем 144 ячейки на хранение состояния. Это если реализовывать "в лоб".

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

    По поводу циклона - тут будут траблы с питанием (там всё достаточно сложно может быть в некоторых случаях), да ещё и с онфигПЗУ надо быть в курсе многих дел
    Пускаем завод. Времени нет ни на что
    "Байт-48"

Страница 1 из 4 1234 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Контроллер клавиатуры для Профи.
    от caro в разделе Устройства ввода
    Ответов: 143
    Последнее: 23.07.2018, 22:34
  2. Ответов: 28
    Последнее: 06.06.2018, 15:28
  3. Контроллер клавиатуры для Скорпиона
    от caro в разделе Устройства ввода
    Ответов: 31
    Последнее: 23.11.2006, 09:23
  4. Контроллер клавиатуры для Скорпиона
    от Nikolaj Amosov (500:812/02.26) в разделе Устройства ввода
    Ответов: 1
    Последнее: 15.11.2005, 23:05

Ваши права

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