|
Выбор порта на персоналке с малыми задержками |
|
|
|
Sep 14 2011, 12:15
|
Участник

Группа: Участник
Сообщений: 51
Регистрация: 5-07-10
Пользователь №: 58 297

|
Приветствую!
Я разрабатываю устройство для психологических исследований. Суть - в том, что испытуемому на экране показывают динамично меняющееся изображение, а испытуемый управляет отображаемым процессом посредством некоего пульта.
Пульты бывают двух видов - либо простая кнопка, у которой обрабатывается только время нажатия, либо плавный переключатель (например, педаль), для которого учитывается его мгновенное положение (как коэффициент от 0.0 до 1.0)
В устройстве критичны задержки при обработке сигналов от пульта, поэтому например компьютерная клавиатура, подключенная по usb, - сразу не подходит в качестве пульта (задержка буффера клавиатуры, задержка USB-порта).
Если делать устройство на базе персоналки, какой интерфейс я могу использовать в данном случае и какие задержки (именно задержки, а не скорость интерфейса) я могу получить? Как варианты - USB; FireWire; кастомная плата, подключенная по PCI/PCIe/PCMCI, может быть древний LPT/COM?
Естественно, на персоналке планируется ОСРВ, чтобы аппаратные прерывания обрабатывались жестко по мере поступления.
|
|
|
|
|
 |
Ответов
|
Sep 14 2011, 12:54
|
Участник

Группа: Участник
Сообщений: 51
Регистрация: 5-07-10
Пользователь №: 58 297

|
Спасибо за быстрый ответ!
Насчет 10-20 мс - соглашусь, это период перерисовки (обновления видеопамяти), чаще - нет смысла, т.к. это не покажет ни один монитор, реже тоже - картинка не будет какое-то время соответствовать модели.
Только в таком случае, если ориентироваться на этот интервал при обработке внешнего прерывания, то и погрешность будет в пределах 10-20 мс. К тому же, если фактически сигнал от пульта сгенерирован во время первого кадра, то и обработать его желательно за время первого кадра, а не второго.
Время реакции испытуемого хотелось бы оценивать с большей точностью, в идеале - 1 мс.
Не поделитесь раскладкой по времени конкретных интерфейсов?
|
|
|
|
|
Sep 14 2011, 14:26
|

Знающий
   
Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237

|
Цитата(Andrey Pesoshin @ Sep 14 2011, 16:54)  Время реакции испытуемого хотелось бы оценивать с большей точностью, в идеале - 1 мс.
Не поделитесь раскладкой по времени конкретных интерфейсов? Из популярных интерфейсов ввода (RS-232, USB, LPT, PS/2) разве что в USB сложно строго детерминировать время от физического события (нажатия кнопки, условно говоря) до появления данных в буфере драйвера (обработчика прерывания). Это связано с тем, что USB-устройства всегда аппаратно опрашиваются хостом (поллинг) с помощью выстроенной цепочки дескрипторов, поэтому время реакции будет зависеть от правильности выстраивания этой цепочки драйвером, от количества USB-устройств и может составлять от 1 мс до 1 с (теоретически!). Что касается остальных интерфейсов - LPT частота опроса до 200 кГц, RS-232 зависит от скорости передачи данных и т. п. Однако когда прикладное приложение получит данные уже от драйвера - здесь гораздо всё более туманно в многозадачной системе, даже если она ОСРВ, зависит от периода "тика" планировщика задач, загруженности системы и интенсивности работы высокоприоритетных процессов (например, обмена по сети). На мой взгляд, Вам не нужно бояться относительно длительного времени между событием и его фиксацией - главное, чтобы оно было как можно более определённым ( в идеале - одинаковым от измерения к измерению), тогда его можно просто вычесть при расчётах.
--------------------
Сделано в Китае. Упаковано в России.
|
|
|
|
|
Sep 14 2011, 16:08
|
Участник

Группа: Участник
Сообщений: 51
Регистрация: 5-07-10
Пользователь №: 58 297

|
Хм, значит USB точно нельзя использовать из-за недетерминированности времени отклика.
На время эксперимента можно же отключить все остальные приоритетные процессы и выставить приоритет на внешние прерывания, тик, если варьируется, выставить по-максимуму, тогда задержку многозадачной ОС можно попробовать не учитывать.
LPT с 200 кГц, ps/2 и rs232 (через DB9, а не виртуальный COM-порт через COM/USB-переходник) выглядят заманчиво, но встречаются на персоналках в природе уже редко, и тенденция, что скоро их не будет совсем.
Demeny, а как Вы считаете, если использовать кастомный пульт (допустим, с единственной кнопкой) и кастомную печатную плату для обработки сигналов от пульта и сопряжения с шиной PCI/PCIe (или PMCIA для использования в "полевых" условиях, когда в роли персоналки - ноутбук), можно ли выстроить систему так, что задержка интерфейса будет минимизирована? Я же правильно понимаю, что задержки генерации прерываний при использовании PCI/PCIe много меньше 1 мс?
|
|
|
|
|
Sep 15 2011, 06:48
|

Знающий
   
Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237

|
Цитата(Andrey Pesoshin @ Sep 14 2011, 20:08)  Demeny, а как Вы считаете, если использовать кастомный пульт (допустим, с единственной кнопкой) и кастомную печатную плату для обработки сигналов от пульта и сопряжения с шиной PCI/PCIe (или PMCIA для использования в "полевых" условиях, когда в роли персоналки - ноутбук), можно ли выстроить систему так, что задержка интерфейса будет минимизирована? Я же правильно понимаю, что задержки генерации прерываний при использовании PCI/PCIe много меньше 1 мс? Не думаю, что кастомный пульт, подключаемый к PC, принципиально улучшит точность измерения времени реакции, поскольку основная неопределённость находится в программной части (драйвер - приложение) на PC. И правильно Вам сказали, что применение ОСРВ здесь вряд ли что-то изменит. Вам по сути нужно не столько получить отклик с минимальной задержкой, сколько привязать этот отклик к конкретной временной метке, связанной с кадром на экране. Чтобы получить временную метку с разрешением 500 мкс - системный тик должен быть как минимум такой же, а 500 мкс тик даже для QNX - это очень серьёзный стресс для ОС (типовое значение 10 мс). Я бы сделал примерно так - пульт можно соединить с PC по RS-232 на скорости, например, 115200 бит/с. При этом переписать обработчик прерывания по приходу байта в COM-порт таким образом, чтобы он вычитывал из регистров видеокарты текущий номер разворачиваемого кадра и текущие координаты луча развёртки. Время передачи управления обработчику прерывания в любой ОС составляет единицы микросекунд, время передачи байта по RS-232 тоже известно (~87 мкс). Таким образом можно вычислить время нажатия кнопки почти до пикселя на экране
--------------------
Сделано в Китае. Упаковано в России.
|
|
|
|
Сообщений в этой теме
Andrey Pesoshin Выбор порта на персоналке с малыми задержками Sep 14 2011, 12:15 Demeny Время развертки одного кадра изображения на монито... Sep 14 2011, 12:30    Andrey Pesoshin Demeny, DpInRock
Большое спасибо за проявленный ин... Sep 15 2011, 13:18     Demeny Цитата(Andrey Pesoshin @ Sep 15 2011, 17... Sep 16 2011, 09:11      Andrey Pesoshin Цитата(Demeny @ Sep 16 2011, 13:11) Неопр... Sep 16 2011, 13:50 Ruslan1 Цитата(Andrey Pesoshin @ Sep 14 2011, 15... Sep 14 2011, 16:40 DpInRock Обычная клавиатура. PS\2.
Обычная мышь. (Даже... Sep 14 2011, 14:00 Andrey Pesoshin Тест - Реакция на движущийся объект (примерное опи... Sep 14 2011, 14:44 Andrey Pesoshin Ruslan1 Я, если честно, решил пока задачу "вл... Sep 14 2011, 17:25 Xenia Цитата(Andrey Pesoshin @ Sep 14 2011, 16... Sep 14 2011, 17:42 Andrey Pesoshin Xenia
А порекомендуете что-нибудь конкретное из ли... Sep 14 2011, 18:13 DpInRock Ну как же люди любят все усложнять....
Казалось б... Sep 14 2011, 19:22 Ruslan1 Цитата(DpInRock @ Sep 14 2011, 22:22) Ну ... Sep 14 2011, 19:48 Andrey Pesoshin ну а стремление усложнять это не всегда же плохо )... Sep 14 2011, 20:43 DpInRock Цитатаэто время в ПК для коррекции и дальнейших по... Sep 15 2011, 07:10 muravei Цитата(DpInRock @ Sep 15 2011, 10:10) Наж... Sep 16 2011, 09:46 _3m Цитата(Andrey Pesoshin @ Sep 14 2011, 16... Sep 16 2011, 14:04 Andrey Pesoshin Цитата(_3m @ Sep 16 2011, 18:04) Геймерск... Sep 16 2011, 14:18
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|