Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: FTDI может выдать прерывание для компьютера?
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
Firebird
Привет! С Новым Годом!

В организации где я работаю используют FTDI для подключения устройств к компьютеру. Для того, чтобы узнать состояние устройства, необходимо постоянно его опрашивать, для этого используется таймер в Delphi программе. Однако программа как-то не сразу узнает об изменениях в устройстве, например, нажимаем кнопку, при этом индикатор на устройстве сразу загорается, а программа узнает о нажатии на кнопку через некотрое время. Пробовали уменьшить интервал опроса до 50 мск, не помогает.

У меня вопрос, FTDI может выдать прерывание(как COM порт, например), чтобы программа смогла отреагировать на это прерывание, вместо того, чтобы в событии таймера проверять наличие данных.

Например, устройство передает данные в FTDI, затем FTDI через драйвер передает данные в буфер, и одновременно отправляет сообщение программе, чтобы она прочитала эти данные.

Как можно это организовать, программа на Delphi ???
Седой
Цитата(Firebird @ Jan 4 2008, 15:36) *
У меня вопрос, FTDI может выдать прерывание(как COM порт, например), чтобы программа смогла отреагировать на это прерывание, вместо того, чтобы в событии таймера проверять наличие данных.

Например, устройство передает данные в FTDI, затем FTDI через драйвер передает данные в буфер, и одновременно отправляет сообщение программе, чтобы она прочитала эти данные.

Как можно это организовать, программа на Delphi ???


Ответ: это невозможно.

PS. Советую ознакомиться с основами Win32 ( процессы, потоки, окна, сообщения, взаимодействие user и kernel и т.д).
PS2. Сообщения таймера имееют самый низкий приоритет обработки, даже ниже чем WM_PAINT.
jorikdima
согласен. в том что есть такие запаздывания ftdi не виноват. это тормоза винды
tyro
Цитата(Firebird @ Jan 4 2008, 13:36) *
Привет! С Новым Годом!

В организации где я работаю используют FTDI для подключения устройств к компьютеру. Для того, чтобы узнать состояние устройства, необходимо постоянно его опрашивать, для этого используется таймер в Delphi программе. Однако программа как-то не сразу узнает об изменениях в устройстве, например, нажимаем кнопку, при этом индикатор на устройстве сразу загорается, а программа узнает о нажатии на кнопку через некотрое время. Пробовали уменьшить интервал опроса до 50 мск, не помогает.
Как можно это организовать, программа на Delphi ???

Попробуйте вынести опрос в отдельный поток. Назначте в случае необходимости приоритет этому потоку повыше. Далее посылайте сообщение в основную часть программы. Если важен визуальный эффект, то сначала "перересуйте" картинку. Обрабатывайте. На "глаз" разница во времени между нажатием кнопки прибора (если конечно он об этом сразу посылает сообщение) и реакции программы, не должна быть заметна.
P.S. Это справедливо, если в это же время на PC не "крутятся" другие программы, которые могут монопольно захватывать его ресурсы. smile.gif
Firebird
С Рождеством!

Спасибо за предложения. Подобный вопрос задал самим разработчикам FTDI, вот их ответ

Цитата
Hello,

USB is a polled system based on a 1ms frame rate. Our USb transfers are bulk
mode transfers and as such there is no way for interrupts to be used.

Waiting on events is the closest thing.

Regards,
Support Engineer


Т.е. с прерыванием ничего не получится.
jorikdima
о каких задержках идет речь?
KRS
Цитата(Firebird @ Jan 4 2008, 13:36) *
В организации где я работаю используют FTDI для подключения устройств к компьютеру. Для того, чтобы узнать состояние устройства, необходимо постоянно его опрашивать, для этого используется таймер в Delphi программе. Однако программа как-то не сразу узнает об изменениях в устройстве, например, нажимаем кнопку, при этом индикатор на устройстве сразу загорается, а программа узнает о нажатии на кнопку через некотрое время. Пробовали уменьшить интервал опроса до 50 мск, не помогает.

А какой именно FTDI? и как вы порашиваете устройство через BitBang или через UART?
Какой драйвер вы используете?
khach
Смотрите примеры использования функции FT_SetEventNotification в D2XX Programmer's Guide и работай те по событию.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.