Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2007, 23:50   #1
dima00
Пользователь
 
Регистрация: 19.03.2007
Сообщений: 17
По умолчанию работа с Ft245/232 на Delphi

Скажите пожалуйста как при работе с ft245/232 производить постоянное считывание информации с буфера устройства, если при помощи timer, то получается ошибка ft_invalid_handle? Может кто работал с микросхемами ft на delphi так пришлите, пожалуйста, текст программы постоянного обращения и т.д.

Спасибо
dima00 вне форума Ответить с цитированием
Старый 20.03.2007, 00:14   #2
VDLab
Embedder
Пользователь
 
Аватар для VDLab
 
Регистрация: 01.11.2006
Сообщений: 68
По умолчанию

Какой период у таймера? Если меньше 1мс, могут возникнуть проблемы.
[SHIFT] вправо, [SHIFT] влево считается [ESCAPE]ом и карается REBOOTом!
VDLab вне форума Ответить с цитированием
Старый 20.03.2007, 19:51   #3
dima00
Пользователь
 
Регистрация: 19.03.2007
Сообщений: 17
По умолчанию

Период более 1 мс
Напишите пожалуйста текст программы если не сложно
dima00 вне форума Ответить с цитированием
Старый 21.03.2007, 14:42   #4
VDLab
Embedder
Пользователь
 
Аватар для VDLab
 
Регистрация: 01.11.2006
Сообщений: 68
По умолчанию

Лично с ФТшками не работал, кодом помочь не могу, так что выкладывайте свой, будем пытаться разобраться.
[SHIFT] вправо, [SHIFT] влево считается [ESCAPE]ом и карается REBOOTом!
VDLab вне форума Ответить с цитированием
Старый 21.03.2007, 23:55   #5
dima00
Пользователь
 
Регистрация: 19.03.2007
Сообщений: 17
По умолчанию

Вот текст моей программы (не уверен что надо Close_USB_Device; писал без него и с ним все равно не работает):


Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  N,i :integer;
  PortStatus: ft_result;
begin
  if timer1.Interval<>0 then
  begin
  gl_h:=d2xxunit.FT_HANDLE;
  PortStatus:=Open_USB_Device;
  if PortStatus=FT_OK then
  begin

   Set_USB_Device_TimeOuts(500,500);
  N:=Read_USB_Device_Buffer(384);
  for i:=1 to N do
  begin
    memo5.Text:=memo5.Text+intToHex(FT_In_Buffer[i-1],2)+' ';
  end;
  memo5.text:=memo5.Text+#$D+#$A;
 Close_USB_Device;
  end
 end;
 end;

Последний раз редактировалось rpy3uH; 29.07.2008 в 12:36.
dima00 вне форума Ответить с цитированием
Старый 25.03.2007, 15:09   #6
dima00
Пользователь
 
Регистрация: 19.03.2007
Сообщений: 17
По умолчанию

Может кто скинет сюда текст программы работы с ft232/245
dima00 вне форума Ответить с цитированием
Старый 31.03.2007, 13:08   #7
VDLab
Embedder
Пользователь
 
Аватар для VDLab
 
Регистрация: 01.11.2006
Сообщений: 68
По умолчанию

Наконец то добрался до сайта!
Это код из какого примера? Что то я ничего подобного не встречал у FTDI. С другими приведенными примерами пробовали?
И приведите весь код полностью, а то из приведенного куска мало что понятно.
[SHIFT] вправо, [SHIFT] влево считается [ESCAPE]ом и карается REBOOTом!
VDLab вне форума Ответить с цитированием
Старый 02.04.2007, 19:44   #8
dima00
Пользователь
 
Регистрация: 19.03.2007
Сообщений: 17
По умолчанию

Я обращаюсь к функциям не через FTD2XX.dll, а через D2XXUnit.pas


Код:
procedure TForm1.N25Click(Sender: TObject);
var t:integer;
begin
  form2.showmodal;
  if form2.RadioButton2.Checked then
  begin
  if form2.Edit1.Text<>'' then
    try t:=strtoint(form2.Edit1.Text);
    except t:=0;
    end
  else t:=0;
  timer1.Interval:=t;
  form1.Button16.Enabled:=false;
  gl_er:=0;
  end
  else if form2.RadioButton1.Checked then
  begin
    timer1.Interval:=0;
    form1.Button16.Enabled:=true;
    gl_er:=0;
  end;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
var
  N,i :integer;
  PortStatus: ft_result;
begin
  if timer1.Interval<>0 then
  begin
 // gl_h:=d2xxunit.FT_HANDLE;
  PortStatus:=Open_USB_Device;
  if PortStatus=FT_OK then
  begin

   Set_USB_Device_TimeOuts(500,500);
  N:=Read_USB_Device_Buffer(384);
  for i:=1 to N do
  begin
    memo5.Text:=memo5.Text+intToHex(FT_In_Buffer[i-1],2)+' ';
  end;
  memo5.text:=memo5.Text+#$D+#$A;
//  Close_USB_Device;
  gl_er:=0;
  end
  else
  begin
    if gl_er=0 then
    begin
    gl_er:=1;
    if portstatus=FT_INVALID_HANDLE then d2xxunit.FT_HANDLE:=0;
    case PortStatus of
    FT_DEVICE_NOT_FOUND: MessageDlg('Ошибка открытия USB Device (Open_USB_Device)'+#$D+#$A+#$D+#$A+'Устройство не найдено (FT_DEVICE_NOT_FOUND)', mtError, [mbOk], 0);
    FT_DEVICE_NOT_OPENED: MessageDlg('Ошибка открытия USB Device (Open_USB_Device)'+#$D+#$A+#$D+#$A+'FT_DEVICE_NOT_OPENED', mtError, [mbOk], 0);
    FT_INVALID_HANDLE: MessageDlg('Ошибка открытия USB Device (Open_USB_Device)'+#$D+#$A+#$D+#$A+'FT_INVALID_HANDLE', mtError, [mbOk], 0);
    FT_IO_ERROR: MessageDlg('Ошибка открытия USB Device (Open_USB_Device)'+#$D+#$A+#$D+#$A+'FT_IO_ERROR', mtError, [mbOk], 0);
    FT_INSUFFICIENT_RESOURCES: MessageDlg('Ошибка открытия USB Device (Open_USB_Device)'+#$D+#$A+#$D+#$A+'FT_INSUFFICIENT_RESOURCES', mtError, [mbOk], 0);
    FT_INVALID_PARAMETER: MessageDlg('Ошибка открытия USB Device (Open_USB_Device)'+#$D+#$A+#$D+#$A+'FT_INVALID_PARAMETER', mtError, [mbOk], 0);
    else MessageDlg('Ошибка открытия USB Device (Open_USB_Device)'+inttostr(PortStatus), mtError, [mbOk], 0);
    if portstatus=FT_INVALID_HANDLE then d2xxunit.FT_HANDLE:=gl_h;
  end;
  end;
 end;
 end;
end;

Последний раз редактировалось rpy3uH; 29.07.2008 в 12:36.
dima00 вне форума Ответить с цитированием
Старый 06.04.2007, 23:55   #9
dima00
Пользователь
 
Регистрация: 19.03.2007
Сообщений: 17
По умолчанию

Скажите пожалуйста почему при выключении и обратном включении питания устройства программа выдает ошибку чтения, пока не отсоединить и обратно подсоединить устройство к компьютеру. Вот текст моей программы:
Код:
procedure TForm1.FormCreate(Sender: TObject);      
begin
  Open_USB_Device;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Close_USB_Device;
end;
        
procedure TForm1.Button10Click(Sender: TObject);
  var
  st :string;
  N,i:integer;
  PortStatus: ft_result;
begin
  PortStatus:=Open_USB_Device;
  if (PortStatus=FT_success) or (PortStatus=FT_OK) then begin
    Reset_USB_Device;
    Set_USB_Device_TimeOuts(500,500);
  end
  else
      MessageDlg('Ioeaea ioe?uoey USB Device (Open_USB_Device)', mtError, [mbOk], 0);
  st:='';
  for i:=0 to memo2.Lines.Capacity-1 do
  begin
  st:=st+HexToByte(memo2.Lines[i]);
  end;
  sleep(1);
  for i:=1 to Length(st) do
  begin
      FT_Out_Buffer[i-1]:=Byte(st[i]);
  end;
  N:=Write_USB_Device_Buffer(Length(st));
  If  N<>(Length(st)) then MessageDlg('Ioeaea i?e ia?aaa?a aaiiuo.', mtError, [mbOk], 0);

    N:=Read_USB_Device_Buffer(384);

  for i:=1 to N do
  begin
    memo5.Text:=memo5.Text+intToHex(FT_In_Buffer[i-1],2)+' ';
  end;
  memo5.text:=memo5.Text+#$D+#$A;
  Close_USB_Device;
end;

Последний раз редактировалось rpy3uH; 29.07.2008 в 12:36.
dima00 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с таблицами в Delphi Olga5 БД в Delphi 13 04.04.2012 17:58
Работа с Word в Delphi Sanek_ntsk Общие вопросы Delphi 4 12.06.2008 10:20
Работа с тестом в Delphi IGoDoVaN Помощь студентам 11 10.06.2008 08:23