реклама на сайте
подробности

 
 
> FTDI может выдать прерывание для компьютера?
Firebird
сообщение Jan 4 2008, 10:36
Сообщение #1





Группа: Новичок
Сообщений: 7
Регистрация: 4-01-08
Пользователь №: 33 813



Привет! С Новым Годом!

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

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

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

Как можно это организовать, программа на Delphi ???
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 7)
Седой
сообщение Jan 5 2008, 09:55
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806



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

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

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


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

PS. Советую ознакомиться с основами Win32 ( процессы, потоки, окна, сообщения, взаимодействие user и kernel и т.д).
PS2. Сообщения таймера имееют самый низкий приоритет обработки, даже ниже чем WM_PAINT.
Go to the top of the page
 
+Quote Post
jorikdima
сообщение Jan 8 2008, 09:22
Сообщение #3


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



согласен. в том что есть такие запаздывания ftdi не виноват. это тормоза винды
Go to the top of the page
 
+Quote Post
tyro
сообщение Jan 8 2008, 09:47
Сообщение #4


Любитель Кошек
*****

Группа: Свой
Сообщений: 1 593
Регистрация: 8-06-06
Пользователь №: 17 873



Цитата(Firebird @ Jan 4 2008, 13:36) *
Привет! С Новым Годом!

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

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


--------------------
По современному этикету, в левой руке держат вилку, в правой - мышку.
Go to the top of the page
 
+Quote Post
Firebird
сообщение Jan 8 2008, 10:40
Сообщение #5





Группа: Новичок
Сообщений: 7
Регистрация: 4-01-08
Пользователь №: 33 813



С Рождеством!

Спасибо за предложения. Подобный вопрос задал самим разработчикам 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


Т.е. с прерыванием ничего не получится.
Go to the top of the page
 
+Quote Post
jorikdima
сообщение Jan 9 2008, 08:33
Сообщение #6


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



о каких задержках идет речь?
Go to the top of the page
 
+Quote Post
KRS
сообщение Jan 9 2008, 11:04
Сообщение #7


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



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

А какой именно FTDI? и как вы порашиваете устройство через BitBang или через UART?
Какой драйвер вы используете?
Go to the top of the page
 
+Quote Post
khach
сообщение Jan 10 2008, 08:47
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741



Смотрите примеры использования функции FT_SetEventNotification в D2XX Programmer's Guide и работай те по событию.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 21:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.0141 секунд с 7
ELECTRONIX ©2004-2016