Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Как программно организовать передачу и прием данных ft232

Непрочитано 24.03.2010, 16:28  
urry
Почётный гражданин KAZUS.RUN
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 107 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию Re: Как программно организовать передачу и прием данных ft232

Был вариант на микрочип су - девайс ставится именно на то место, которое Вы ему уготовили
http://www.microchip.su/showthread.p...EF%F2%EE%F0%E5
Но это АСМ, я FTDI не пробовал.
Реклама:
__________________
warez

Последний раз редактировалось urry; 24.03.2010 в 23:47.
urry вне форума  
Непрочитано 24.03.2010, 18:31  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,327
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: Как программно организовать передачу и прием данных ft232

Сообщение от urry Посмотреть сообщение
под линуксом, забирал данные через левый gsm шлюз
Вроде не об этом идёт разговор ... Но зато теперь все видят, что urry очень крут !

Сообщение от tusya83 Посмотреть сообщение
не получается программно определить номер ком-порта, на который встала микросхема
Перебирайте все доступные ком-порты, посылая запросы, пока не получите нужный отклик от устройства.
И вообще, надо определиться, что будет использоваться: Windows API для ком-порта или FTDI функции из FTD2XX.DLL
Yurkin2007 вне форума  
Непрочитано 24.03.2010, 19:53  
tusya83
Частый гость
 
Регистрация: 09.03.2010
Сообщений: 15
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
tusya83 на пути к лучшему
По умолчанию Re: Как программно организовать передачу и прием данных ft232

Понятно. Большое спасибо за ответы. Будем добивать d2xx
tusya83 вне форума  
Непрочитано 24.03.2010, 22:28  
awtoap
Прописка
 
Регистрация: 11.04.2006
Сообщений: 197
Сказал спасибо: 86
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
awtoap на пути к лучшему
По умолчанию Re: Как программно организовать передачу и прием данных ft232

Я чет не понял...почему у Вас с потоками не получается...у меня так все работает. Создаем поток и там опрашиваем функцию о наличии в буфере микры для нас байтиков. Если есть, то забираем с помощью FT_Read... делов то.

Вообщем сейчас куски повыхватываю...разбирайтес� � сами...писано на Delphi:

function RXThreadFunc(Owner: TDMXRepeater): Integer;
begin
Result:= 0;
Owner.fKillRXThread:= False;
while not Owner.fKillRXThread and (SleepEX(1, False) = 0) do
begin
WaitForSingleObject(Owner.fRXEvent, INFINITE);
Owner.ThreadProc_RX;
end;
end;

function TXThreadFunc(Owner: TDMXRepeater): Integer;
begin
Result:= 0;
Owner.fKillTXThread:= False;
while not Owner.fKillTXThread and (SleepEX(1, False) = 0) do Owner.ThreadProc_TX;
end;


Вызывается из потока:
procedure TDMXRepeater.ThreadProc_RX;
var
TX, RX, Event: Cardinal;
Ret, rBytes: Integer;
RcvCmd, RcvData: Byte;
Change: Boolean;
begin
Ret:= FT_GetStatus(fDevHandle, @RX, @TX, @Event);
if (Ret ‹› 0) then Exit;

Ret:= FT_Read(fDevHandle, fRcvBuffer, RX, @rBytes);
if (Ret ‹› FT_OK) or (RX ‹› rBytes) then Exit;
end;


Инициализация (функции API и FTDI):
Res:= FT_Open(n, @fDevHandle); //тут N выбирается из подходящего по списку чипа
if Res ‹› FT_OK then
begin
Result:= srDeviceNotFound;
Exit;
end;
Res:= FT_ResetDevice(fDevHandle);
Res:= FT_Purge(fDevHandle, FT_Purge_RX or FT_Purge_TX);
Res:= FT_SetUSBParameters(fDevHandle, 512, 0);
fRXThrdHandle:= BeginThread(nil, 0, @RXThreadFunc, Pointer(Self), Create_Suspended, fRXThrdID);
if fRXThrdHandle = 0 then
begin
Result:= srUnknownError;
Exit;
end;

fTXThrdHandle:= BeginThread(nil, 0, @TXThreadFunc, Pointer(Self), Create_Suspended, fTXThrdID);
if fTXThrdHandle = 0 then
begin
Result:= srUnknownError;
Exit;
end;

fRXEvent:= CreateEvent(nil, False, False, '');
Res:= FT_SetEventNotification(fDevHandle, FT_Event_RXChar, fRXEvent);

SetThreadPriority(fRXThrdHandle, Thread_Priority_HIGHEST);
SetThreadPriority(fTXThrdHandle, Thread_Priority_HIGHEST);

ResumeThread(fRXThrdHandle);
ResumeThread(fTXThrdHandle);

Дерзайте...
awtoap вне форума  
Сказали "Спасибо" awtoap
tusya83 (24.03.2010)
Непрочитано 24.03.2010, 23:56  
urry
Почётный гражданин KAZUS.RUN
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 107 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию Re: Как программно организовать передачу и прием данных ft232

Сообщение от Yurkin2007 Посмотреть сообщение
Сообщение от urry Посмотреть сообщение
под линуксом, забирал данные через левый gsm шлюз
Вроде не об этом идёт разговор ... Но зато теперь все видят, что urry очень крут !
Я извиняюсь за флуд - сейчас работаю в области, далекой от МК - но не за свое выражение о вредных советах. Дальнейшие разборки - в личку.
В делфи не пишу, в си++ где-то так
Код:
1.	 hPort = CreateFile(   PortName,
2.	                        GENERIC_READ | GENERIC_WRITE,
3.	                        0,
4.	                        NULL,
5.	                        OPEN_EXISTING,
6.	                        FILE_FLAG_OVERLAPPED | FILE_ATTRIBUTE_SYSTEM,
7.	                        NULL);
8.	 
9.	  if (hPort == INVALID_HANDLE_VALUE)
10.	   {
11.	    DumpError("CreateFile");
12.	    IsError = true;
13.	    return;
14.	   }
15.	 
16.	  if (!PurgeComm(hPort, PURGE_RXCLEAR | PURGE_TXCLEAR))
17.	   {
18.	    DumpError("PurgeComm");
19.	    IsError = true;
20.	    return;
21.	   }
22.	 
23.	  DCB dcb;
24.	  if (!GetCommState(hPort, &dcb))
25.	   {
26.	    DumpError("GetCommState");
27.	    IsError = true;
28.	    return;
29.	   }
30.	  dcb.DCBlength         = sizeof(dcb);
31.	  dcb.BaudRate          = dwBaudRate;
32.	  dcb.fBinary           = true;
33.	  dcb.fParity           = false;
34.	  dcb.fOutxCtsFlow      = false;
35.	  dcb.fOutxDsrFlow      = false;
36.	  dcb.fDtrControl       = DTR_CONTROL_ENABLE;
37.	  dcb.fDsrSensitivity   = false;
38.	  dcb.fTXContinueOnXoff = false;
39.	  dcb.fOutX             = false;
40.	  dcb.fInX              = false;
41.	  dcb.fNull             = false;
42.	  dcb.fRtsControl       = RTS_CONTROL_ENABLE;
43.	  dcb.fAbort:: onerror ::     = true;
44.	  dcb.ErrorChar         = 0xFF;
45.	  dcb.XonLim            = 2048;
46.	  dcb.XoffLim           = 512;
47.	  dcb.XonChar           = 17;
48.	  dcb.XoffChar          = 19;
49.	  dcb.EofChar           = 0;
50.	  dcb.EvtChar           = 0;
51.	  dcb.ByteSize          = 8;
52.	  dcb.Parity            = NOPARITY;
53.	  dcb.StopBits          = ONESTOPBIT;
54.	  if (!SetCommState(hPort,&dcb))
55.	   {
56.	    DumpError("SetCommState");
57.	    IsError = true;
58.	    return;
59.	   }
60.	 
61.	  if (!SetupComm(hPort,2048,0))
62.	   {
63.	    DumpError("SetupComm");
64.	    IsError = true;
65.	    return;
66.	   }
67.	 
68.	  COMMTIMEOUTS cto;
69.	  if (!GetCommTimeouts(hPort,&cto))
70.	   {
71.	    DumpError("GetCommTimeouts");
72.	    IsError = true;
73.	    return;
74.	   }
75.	  cto.ReadIntervalTimeout               = 0;
76.	  cto.ReadTotalTimeoutMultiplier        = 0;
77.	  cto.ReadTotalTimeoutConstant          = 0;
78.	  cto.WriteTotalTimeoutMultiplier       = 0;
79.	  cto.WriteTotalTimeoutConstant         = 0;
80.	  if (!SetCommTimeouts(hPort,&cto))
81.	   {
82.	    DumpError("SetCommTimeouts");
83.	    IsError = true;
84.	    return;
85.	   }
86.	 
87.	  if (!SetCommMask(hPort,EV_RXCHAR))
88.	   {
89.	    DumpError("SetCommMask");
90.	    IsError = true;
91.	    return;
92.	   }
93.	 
94.	  COMMCONFIG ccfg;
95.	  unsigned long cfgsize = sizeof(ccfg);
96.	  if (!GetCommConfig(hPort,&ccfg,&cfgsize))
97.	   {
98.	    DumpError("GetCommConfig");
99.	    IsError = true;
100.	    return;
101.	   }
102.	  ccfg.dwSize = cfgsize;
103.	  ccfg.dcb                      = dcb;
104.	  ccfg.dwProviderSubType        = PST_RS232;
105.	  if (!SetCommConfig(hPort,&ccfg,cfgsize))
106.	   {
107.	    DumpError("SetCommConfig");
108.	    IsError = true;
109.	    return;
110.	   }
111.	//----------------------------------------------------- 
112.	  hEvtRead = CreateEvent(NULL,false,false,NULL);
113.	  hEvtWrite = CreateEvent(NULL,false,false,NULL);
114.	  memset(&ovRead,0,sizeof(ovRead));
115.	  memset(&ovWrite,0,sizeof(ovWrite));
116.	  ovRead.hEvent = hEvtRead;
117.	  ovWrite.hEvent = hEvtWrite;
 //---------------------------------------------------------
// чтение
	   char buf[1000];
	    int num;

	    ReadFile(hPort,buf,1,&num,ovRead);
	    if (WaitForSingleObject(ovRead-›hEvent, ‹таймаут› ) != WAIT_OBJECT_0)
	     {
	      PurgeComm(hPort, PURGE_RXABORT);
	      //не уложились в таймаут
	     }
// запись	 
   WriteFile(hPort,buf,bufsize,&num,ovWrite);
  if (WaitForSingleObject(ovWrite-›hEvent,‹таймаут записи›) != WAIT_OBJECT_0)
    {
     PurgeComm(hPort, PURGE_TXABORT);
     // не уложились в таймаут
    }
__________________
warez

Последний раз редактировалось urry; 25.03.2010 в 00:24.
urry вне форума  
Сказали "Спасибо" urry
tusya83 (25.03.2010)
Непрочитано 25.03.2010, 13:25  
tusya83
Частый гость
 
Регистрация: 09.03.2010
Сообщений: 15
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
tusya83 на пути к лучшему
По умолчанию Re: Как программно организовать передачу и прием данных ft232

awtoap,
urry, большое спасибо. Сначала помучаю еще чуток FTD2XX, если не пойдет, буду разбираться с API как предложил urry.
tusya83 вне форума  
Непрочитано 25.03.2010, 13:59  
GASCHE
Частый гость
 
Регистрация: 28.04.2007
Сообщений: 40
Сказал спасибо: 2
Сказали Спасибо 7 раз(а) в 5 сообщении(ях)
GASCHE на пути к лучшему
По умолчанию Re: Как программно организовать передачу и прием данных ft232

Сообщение от tusya83 Посмотреть сообщение
подскажите пожалуйста.
Как правильно организовать постоянный мониторинг состояния порта, чтоб
Если пишите на Delphi посмотрите здесь - http://www.delphikingdom.ru/asp/view...catalogid=1126
GASCHE вне форума  
Непрочитано 25.03.2010, 14:09  
tusya83
Частый гость
 
Регистрация: 09.03.2010
Сообщений: 15
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
tusya83 на пути к лучшему
По умолчанию Re: Как программно организовать передачу и прием данных ft232

Мне нужно на с++, но попробую разобраться
tusya83 вне форума  
Непрочитано 25.03.2010, 22:31  
awtoap
Прописка
 
Регистрация: 11.04.2006
Сообщений: 197
Сказал спасибо: 86
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
awtoap на пути к лучшему
По умолчанию Re: Как программно организовать передачу и прием данных ft232

Я вам предложил на API (ищите одноименные функции в хелпе) без использования виртуального COM порта, а urry именно с COM портом. Максимальную скорость передачи данных получите только при работе с API функциями FTDI на прямую.
awtoap вне форума  
Непрочитано 01.04.2010, 18:33  
GASCHE
Частый гость
 
Регистрация: 28.04.2007
Сообщений: 40
Сказал спасибо: 2
Сказали Спасибо 7 раз(а) в 5 сообщении(ях)
GASCHE на пути к лучшему
По умолчанию Re: Как программно организовать передачу и прием данных ft232

Сообщение от tusya83 Посмотреть сообщение
Мне нужно на c
http://www.piclist.ru/S-COM-THREAD-R...HREAD-RUS.html
GASCHE вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Решено] Третье Послание Человечеству lelkanet Отвлекитесь, эмбеддеры! 201 06.01.2010 00:33


Часовой пояс GMT +4, время: 20:38.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.