Задать вопрос
@ip69

Какой выбрать самый быстрый микроконтроллер для создания игровой клавиатуры (PS/2)?

Добрый день

Задача - получить как можно более низкое время отклика от клавиатуры.

Судя по тому, что удалось вычитать в статьях и обсуждениях, мне нужен микроконтроллер для игровой клавиатуры PS/2.
Доступные примеры, которые нашлись, только для USB.

Игра - Counter Strike Source.

Предполагается, что необходимый минимум кнопок - W, A, S, D, C (5 штук).
W - вперед
A - влево
S - назад
D - вправо
C - присесть

Есть еще Q и R, но их в крайнем случае можно повесить на мышь.

После самостоятельных поисков, найдена только одна более менее информативная статья со списком быстрых серийных клавиатур.
https://habr.com/post/345776
Источник - https://danluu.com/keyboard-latency

Нашелся онлайн тест - blog.seethis.link/scan-rate-estimator

Текущая клавиатура - Microsoft MultiMedia Keyboard 1.0a выдает скромные результаты:
Shortest Key Press | Estimated Scan Rate
36ms | 27.77777777777778Hz

В качестве наиболее популярного контроллера, нашелся Teensy 2.

Копнув глубже, даже нашлась оптимизация - neophob.com/2011/04/serial-latency-teensy-vs-arduino

Есть несколько вопросов новичка.
1. Если взять в качестве донора самую лучшую из списка - Apple Magic (MLA22LL/A), возможно ли улучшить ее результат ?
2. Влияет ли количество кнопок в матрице, даст ли выигрыш их уменьшение до 5 необходимых ?
3. Есть ли смысл рассматривать для данной задачи, контроллер Teensy 2 ?
  • Вопрос задан
  • 948 просмотров
Подписаться 2 Сложный Комментировать
Пригласить эксперта
Ответы на вопрос 3
@Mirn
Я делал реализацию PS/2 клавиатуры на ванильном intel8051 что 24мгц 12 тактов на инструкцию. Ещё в 90ые этому МК хватало скорости чтоб по прерываниям прямыми ножкодрыганиями формировать коды клавиш, задержек нет, прерывание и опрос и начало передачи гораздо меньше времени занимают чем посылка кода клавишы который по сути UART с мелкими правками (физ уровень как i2c) - он сам по себе медленный и поэтому быстрее 3000-4000 раз в секунду невозможно что либо быстрее передавать - станет каша из бит если мы текущую передачу прервём и начнём нову.
Поэтому ответ прост - подойдёт любой МК который работает свыше 2 миллионов команд в секунду (вообще любой из современных) и имеет хотябы один вход прерывания - на него повесить через диодное И выход со всех кнопочек что на землю.
Ответ написан
Комментировать
@DRomanov1972
Автоэлектрик
Расчет простой:
- дисплей 120Hz - 8ms
- PS/2 80..300kbps, 3 байта по 11 бит - 0.1..0.4ms
- задержка для анти-дребезга - min 5ms
-------------------------------------------------
Итого 5ms - для 16MHz AVR это 80000(40000) инструкций - хватит за глаза даже для индусского кода с пулингом и без прерываний. А по уму - любой 5-вольтовый контроллер с INT и USART with XCK (или с I2C/TWI или со SPI), например ATmega8A. Если DATA и CLK прямо с ног контроллера - подключать их через резисторы 200 ом.

>Доступные примеры, которые нашлись, только для USB.
По поиску "ps/2 клавиатура на avr" - море готовых проектов, подправить только скорость опроса клавиш.

PS: Гнаться за задержкой меньше 5ms смысла нет - не ощутишь. В некоторых играх в настройках бывает переключение ввода Системный/DirectX (для винды) или подобное. А операционка+проги могут и от 50ms добавлять за нефиг делать, особенно в винде - то после очередного обновления, то Chrome новый или его расширения, то погода ;).
Ответ написан
Комментировать
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Вообще-то USB, даже версии 1.0, гораздо быстрее, чем PS/2. 1.5 мегабита против 300 килобит. Так что какой контроллер ни возьми, вы просто упретесь в скорость передачи.

PS. В тему - https://habr.com/post/345776/ измерение latency клавиатур.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы