|
FTDI может выдать прерывание для компьютера? |
|
|
|
Jan 4 2008, 10:36
|
Группа: Новичок
Сообщений: 7
Регистрация: 4-01-08
Пользователь №: 33 813

|
Привет! С Новым Годом!
В организации где я работаю используют FTDI для подключения устройств к компьютеру. Для того, чтобы узнать состояние устройства, необходимо постоянно его опрашивать, для этого используется таймер в Delphi программе. Однако программа как-то не сразу узнает об изменениях в устройстве, например, нажимаем кнопку, при этом индикатор на устройстве сразу загорается, а программа узнает о нажатии на кнопку через некотрое время. Пробовали уменьшить интервал опроса до 50 мск, не помогает.
У меня вопрос, FTDI может выдать прерывание(как COM порт, например), чтобы программа смогла отреагировать на это прерывание, вместо того, чтобы в событии таймера проверять наличие данных.
Например, устройство передает данные в FTDI, затем FTDI через драйвер передает данные в буфер, и одновременно отправляет сообщение программе, чтобы она прочитала эти данные.
Как можно это организовать, программа на Delphi ???
|
|
|
|
|
 |
Ответов
(1 - 7)
|
Jan 5 2008, 09:55
|
Местный
  
Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806

|
Цитата(Firebird @ Jan 4 2008, 15:36)  У меня вопрос, FTDI может выдать прерывание(как COM порт, например), чтобы программа смогла отреагировать на это прерывание, вместо того, чтобы в событии таймера проверять наличие данных.
Например, устройство передает данные в FTDI, затем FTDI через драйвер передает данные в буфер, и одновременно отправляет сообщение программе, чтобы она прочитала эти данные.
Как можно это организовать, программа на Delphi ??? Ответ: это невозможно. PS. Советую ознакомиться с основами Win32 ( процессы, потоки, окна, сообщения, взаимодействие user и kernel и т.д). PS2. Сообщения таймера имееют самый низкий приоритет обработки, даже ниже чем WM_PAINT.
|
|
|
|
|
Jan 8 2008, 09:47
|

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

|
Цитата(Firebird @ Jan 4 2008, 13:36)  Привет! С Новым Годом!
В организации где я работаю используют FTDI для подключения устройств к компьютеру. Для того, чтобы узнать состояние устройства, необходимо постоянно его опрашивать, для этого используется таймер в Delphi программе. Однако программа как-то не сразу узнает об изменениях в устройстве, например, нажимаем кнопку, при этом индикатор на устройстве сразу загорается, а программа узнает о нажатии на кнопку через некотрое время. Пробовали уменьшить интервал опроса до 50 мск, не помогает. Как можно это организовать, программа на Delphi ??? Попробуйте вынести опрос в отдельный поток. Назначте в случае необходимости приоритет этому потоку повыше. Далее посылайте сообщение в основную часть программы. Если важен визуальный эффект, то сначала "перересуйте" картинку. Обрабатывайте. На "глаз" разница во времени между нажатием кнопки прибора (если конечно он об этом сразу посылает сообщение) и реакции программы, не должна быть заметна. P.S. Это справедливо, если в это же время на PC не "крутятся" другие программы, которые могут монопольно захватывать его ресурсы.
--------------------
По современному этикету, в левой руке держат вилку, в правой - мышку.
|
|
|
|
|
Jan 8 2008, 10:40
|
Группа: Новичок
Сообщений: 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 Т.е. с прерыванием ничего не получится.
|
|
|
|
|
Jan 9 2008, 11:04
|

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

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