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

User Tag List

Страница 2 из 5 ПерваяПервая 12345 ПоследняяПоследняя
Показано с 11 по 20 из 41

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

  1. #11
    Activist
    Регистрация
    17.04.2011
    Адрес
    Санкт-Петербург
    Сообщений
    324
    Спасибо Благодарностей отдано 
    32
    Спасибо Благодарностей получено 
    200
    Поблагодарили
    48 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Плюс это всё общается с СТМкой
    Так ты хочешь делать комбинированную схему, stm32+max3000, то есть использовать CPLD просто в качестве эмулятора двухпортовой памяти? Ну тогда конечно...
    Но так неинтересно. Я хочу в FPGA запихать все - и матрицу, и PS/2 контроллер, и таблицу перекодировки кнопок. А на это 256 ячеек явно маловато.

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

  2. #12
    Guru Аватар для svofski
    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    4,105
    Спасибо Благодарностей отдано 
    772
    Спасибо Благодарностей получено 
    643
    Поблагодарили
    398 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    andreil, а какое должно быть время отклика? Я давным-давно делал на дубовом LPC1769 (120 MHz) эмулятор картриджа для Вектрекса (проц 6809 на 1.5 МГц). Там конечно все тормозное, но более-менее одного порядка величины. Вот мой код рабства шины:

    https://github.com/svofski/cartuchni.../src/vectrex.S

    К сожалению я ничего не замерял, оно просто работало, я даже в ОЗУ его не засовывал. Так что не могу привести никаких цифр. Но вдруг хоть чем-то пригодится. Все-таки питать стм32 сильно проще, чем Циклон. Еще и загрузчик.
    Больше игр нет

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

    По умолчанию

    Цитата Сообщение от forth32 Посмотреть сообщение
    Так ты хочешь делать комбинированную схему, stm32+max3000, то есть использовать CPLD просто в качестве эмулятора двухпортовой памяти? Ну тогда конечно...
    Но так неинтересно. Я хочу в FPGA запихать все - и матрицу, и PS/2 контроллер, и таблицу перекодировки кнопок. А на это 256 ячеек явно маловато.

    На алиэкспрессе продаются недорогие готовые платки с EP4CE6, на которых уже есть и клок, и питание разведено, и конфиг-ром имеется. По сути, к ней ничего и не надо больше. Я вот на такой и буду делать.
    Ну, почти. Кроме буфера для клавиатуры CPLD в моей железке выполняет ещё преобразования векторов прерывания и полный арбитраж шины для прерываний, обрабатываемых мультикартой.

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

    Цитата Сообщение от svofski Посмотреть сообщение
    andreil, а какое должно быть время отклика? Я давным-давно делал на дубовом LPC1769 (120 MHz) эмулятор картриджа для Вектрекса (проц 6809 на 1.5 МГц). Там конечно все тормозное, но более-менее одного порядка величины. Вот мой код рабства шины:

    https://github.com/svofski/cartuchni.../src/vectrex.S

    К сожалению я ничего не замерял, оно просто работало, я даже в ОЗУ его не засовывал. Так что не могу привести никаких цифр. Но вдруг хоть чем-то пригодится. Все-таки питать стм32 сильно проще, чем Циклон. Еще и загрузчик.
    По времени отклика не скажу, но для ВМ80 обращение к портам занимает 3 цикла (если без ожидания).
    По таймингам для 6809 вижу, что это занимает 695-330нс ("Usable Access Tirne"). Если это оно, тогда без CPLD никак...
    А по поводу картриджа - там же не за 1 цикл было дело, как понимаю. А если растянуто на пару-тройку циклов (запись частей адреса и только потом чтение), то вполне можно успеть заранее подготовить данные.

    То есть - если чтение клавиатуры выполняется одной командой (как в ZX'е), тогда только CPLD (в случае без введения ожиданий и прочего).
    Последний раз редактировалось andreil; 22.06.2018 в 23:27.
    "Байт-48"

  4. #14
    Guru Аватар для svofski
    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    4,105
    Спасибо Благодарностей отдано 
    772
    Спасибо Благодарностей получено 
    643
    Поблагодарили
    398 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вот я освежаю память. После E в течение 100нс захватывается адрес. После этого 440нс то самое Usable access time, после которого данные на шине должны быть валидными. Сколько-то они там держатся, пока не уйдет E, после чего шина данных обратно тристейтится. Я не знаю, что значит "растянуто на пару-тройку циклов", это и есть весь цикл. Вот эти временные диаграммы от процессора они как есть, в Вектрексе никаких премудростей нет, он прямо вот так кишками наружу всей шиной торчит. И это работает на Cortex-M3 120MHz из флеша. Это другой производитель, другой флеш контроллер, все вообще другое, но все же это сопоставимые устройства. stm32f4xx точно его за пояс заткнет.

    У 8080 адрес устройства выставлен к negedge фазы 2 t1, а данные должны стабилизироваться на конец ф1 t3? Если так, то имеется больше одного такта (>400нс) на то, чтобы выставить данные. Тесно, но все укладывается вроде, особенно на 168 МГц.

    Не пытаюсь никого переубедить, мил Циклон так и ладно. Просто заметил расхождение со своими ожиданиями и опытом.
    Больше игр нет

  5. #15
    Activist
    Регистрация
    20.12.2016
    Адрес
    г. Москва
    Сообщений
    375
    Спасибо Благодарностей отдано 
    83
    Спасибо Благодарностей получено 
    30
    Поблагодарили
    20 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Serebriakov Посмотреть сообщение
    У Кванта клавиатура отличается от клавиатуры Корвета.
    Там такой же замыкатель, только больше кнопок. Плата кванта ничем не отличается от корвета, ПЗУ в них только другим прошиты, в т.ч. наверняка БИОС учитывает расширение клавиатуры.

    Цитата Сообщение от forth32 Посмотреть сообщение
    Но он требует подключения в разрыв сигнала RDY и тормозит процессор на каждом опросе клавиатуры
    Хотелось бы конечно сделать контроллер без вмешательства в схему платы, и без торможения проца. В т.ч. и без убирания инверсии ШД (выпаивания резисторов)

    Очень рад, что тема наконец ожила))

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

    forth32, можете опубликовать схему и прошивку?

  6. #16
    Activist
    Регистрация
    17.04.2011
    Адрес
    Санкт-Петербург
    Сообщений
    324
    Спасибо Благодарностей отдано 
    32
    Спасибо Благодарностей получено 
    200
    Поблагодарили
    48 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    По просьбам трудящихся выкладываю исходник и схему своего варианта PS2-контроллера. Вариант, конечно, не самый оптимальный, поскольку с этим контроллером наблюдались глюки. Во-первых, он изредка намертво подвешивает корвет, и вывести его из этого состояния можно только сигналом RESET или программным сбросом контроллера (я вывел его на кнопку Print Screen). Во-вторых, контроллер категорически откразывается работать с некоторыми биосами микродоса, при том что со всеми биосами CP/M он работает отлично. В чем причина, я в свое время так и не разобрался. Теперь же я решил сделать этот контроллер на FPGA вместо МК, поэтому возвращаться к отладке данной разработки не вижу смысла.
    Вложения Вложения

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

  8. #17
    SaintTurnip
    Гость

    По умолчанию

    А концептуально так нельзя?
    - к порту корвета подключен SRAM, в котором хранится состояние матрицы
    - контроллер пишет в SRAM, когда позволяет CSKB

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

    По умолчанию

    Цитата Сообщение от SaintTurnip Посмотреть сообщение
    А концептуально так нельзя?
    - к порту корвета подключен SRAM, в котором хранится состояние матрицы
    - контроллер пишет в SRAM, когда позволяет CSKB
    А чем это принципиально отличается от варианта с FPGA? Мало того, что схема получается сложнее - микроконтроллер, SRAM, адресный мультиплексор, еще кое-какая мелкая логика, вместо одного корпуса FPGA и восьминогого конфигрома. Но еще и сигнал CSKB от корвета приходит асинхронно по отношению к контроллеру, и что делать, если сигнал CSKB вдруг пришел, а контроллер как раз занят записью байта в SRAM?
    В FPGA можно организовать полноценную двухпортовую SRAM, при этом операции выборки байта корветом и записи байта контроллером происходят абсолютно независимо друг от друга. Для того их и придумали, эти самые FPGA, чтобы не городить огород из логической рассыпухи. Лично я считаю, что это - наиболее оптимальный способ сделать полноценный адаптер PS/2.
    Вот восстановлю свой корвет и займусь...

  10. #19
    SaintTurnip
    Гость

    По умолчанию

    Даже не пытался критиковать FPGA.

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

    CSKB может отрубать МК от SRAM - чего мультиплексору тухнуть.

    (здесь был непродуманный псевдокод)

    В SRAM в любом случае писать не все 256 адресов клавиатуры, а diff к последнему записанному состоянию.

    Ну один, ну может два байта. Чего там успевать-то.

    Плюсы МК - можно USB клаву подцепить, и все равно будет довольно дешево (ну, без учета сложности PCB)

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

    forth32, есть корвет 8010 скучающий. Ты же из Питера?
    Последний раз редактировалось SaintTurnip; 29.06.2018 в 10:12.

  11. #20
    Activist
    Регистрация
    17.04.2011
    Адрес
    Санкт-Петербург
    Сообщений
    324
    Спасибо Благодарностей отдано 
    32
    Спасибо Благодарностей получено 
    200
    Поблагодарили
    48 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SaintTurnip Посмотреть сообщение
    CSKB может отрубать МК от SRAM - чего мультиплексору тухнуть.
    Дело в том, что адрес КА0-КА7 поступает из корвета ВСЕГДА, а не по спаду CSKB. Этот сигнал неотключаемый, это просто инверсия младших адресных линий процессора. Таким образом, на время взаимодействия МК с контроллером нужно отключить эти сигналы от адресного входа SRAM и вместо них подключить порт контроллера, а по окончании записи данных вернуть все обратно. Отсюда и мультиплексор.
    В SRAM в любом случае писать не все 256 адресов клавиатуры, а diff к последнему записанному состоянию.
    Ну один, ну может два байта. Чего там успевать-то.
    Боюсь, что ты тут тоже не прав. Попробую пояснить свою мысль.
    Клавиатура - это, по сути, битовая матрица 8*16, то есть всего 128 бит. При этом, в случае нажатия нескольких кнопок на одной адресной горизонтали, например ctrl+shift - оба на КА7, выходной ноль появляется одновременно на нескольких выходах данных, в данном случае на 1KD5 и 1KD7 (разумеется, в момент сканирования линии КА7).
    А вот SRAM - это совсем другое дело. Это, конечно, тоже матрица битовых ячеек памяти, но вот между горизонталями матрицы и адресными входами стоит дешифратор. Таким образом, 8 адресным входам соответствует 256 горизонталей матрицы. В этой ситуации при нажатии кнопки, например, CTRL, придется понять бит D5 во всех ячейках SRAM, у которых адрес A7=0 (сканирование клавиатуры идет нулями). А при отпускании кнопки - все эти биты опустить обратно. А это - 128 операций записи. Кроме того, всякие комбинации типа ctrl+shift юзер нажимает и отпускает обычно практически одновременно, поэтому получаем еще 128 операций. Итого 256. Согласись, что это уже весьма прилично по времени получается. За это время драйвер клавиатуры корвета полезет опрашивать клавиатуру, а SRAM занята текущей операцией записи слова из контроллера. Ведь, как я и говорил ранее, корвет и контроллер работают совершенно асинхронно. И что в этой ситуации делать? Прерывать запись нельзя, раз она уже начата, а драйвер клавиатуры ждать не будет. Он просто прочитает то, что сейчас выставлено на шине данных SRAM, а там выставлен текущий записываемый байт. Результат непредсказуем.

    Конечно, на первый взгляд можно было бы прописывать не все 128 слов с А7=0, а только одно слово, с адресом 01111111. Поскольку драйвер клавиатуры, по идее, должен опрашивать адресные линии по одной. На практике оказалось, что есть программы, которые проверяют факт наличия нажатой кнопки, выставив адрес 00000000. То есть за одну операцию ввода можно узнать, нажата ли хотя бы одна кнопка на всей клавиатуре. Так, например, сделано в биосах некоторых версий микродоса. Не удивлюсь, если найдутся программы, особенно игрушки, опрашивающие клавиатуру произвольными сочетаниями адресных линий. Поэтому, я считаю, что матрицу клавиатуры надо реализовать полноценно. Но даже если этого не делать, то асинхронность опероса клавиатуры и записи данных обязательно рано или поздно приведут к конфликту.

    Код:
    Плюсы МК - можно USB клаву подцепить, и все равно будет довольно дешево (ну, без учета сложности PCB)
    usb-клаву можно и к fpga зацепить - этих usb ip-core уже довольно много существует. А насчет цены - ну, наверное, подешевле будет. Правда, 16-битную SRAM в не-BGA корпусе еще найти надо, и она тоже денег будет стоить. Хотя, наверное, и подешевле FPGA. Но экономия будет рублей 500 максимум.

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

Страница 2 из 5 ПерваяПервая 12345 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 34
    Последнее: 24.11.2022, 16:05
  2. Ответов: 146
    Последнее: 31.05.2020, 19:00
  3. Ответов: 28
    Последнее: 06.06.2018, 15:28
  4. Контроллер клавиатуры для Скорпиона
    от Nikolaj Amosov (500:812/02.26) в разделе Scorpion
    Ответов: 1
    Последнее: 15.11.2005, 23:05

Ваши права

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