-
Data: 2010-06-15 23:26:38
Temat: Re: Szybkosc F232/245 VCP vs DXX
Od: "nenik" <n...@o...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]> Dla FT232RL bez problemu realizowałem wysyłanie danych z prędkością ponad
> 300kbaud (~30kB/s) i odbieranie z prędkością 1Mbaud (~100kB/s) zarówno przez
> VCP jak i D2xx. FT245 działa nieco inaczej. W/g dokumentacji przez VCP max.
> 300kB/s, przez D2xx 1MB/s. Tylko pytanie czym i jak odbierasz dane z FT245.
> Nieodbieranie danych powoduje szybkie zapełnienie jedynie 128 Bajtowego
> bufora sprzętowego i nieprzyjmowanie kolejnych danych. Nóżka RXF# w stanie
> Lo sygnalizuje obecność danych w buforze, wtedy każdy kolejny Bajt odczytuje
> się podając impuls na nóżkę RD#. Jeżeli dołączony do FT245 mikroprocesor
> robi to wolno to wtedy on jest wąskim gardłem w tym projekcie. Możliwe, że
> to on ogranicza prędkość odbioru danych do 1200B/s.
przez DXX atmega odbiera dane poprawnie nawet taktowana 1MHz, sprawdzone ,
problem jest jak zmienie program wysylajacy dane z pc
ponizej wkleilem fragmenty kodu ktore pochodza z ksiazki , te fragmenty
wklepalem do swojego programu , ale przez VCP jest jak jest
zmiana baudrate dcb.BaudRate = CBR_19200 na inna wartosc , dla ft245 nic nie daje
podmienie ft245 na ft232 i zobacze
#define cbOutQueue 1024 //rozmiar bufora danych wyjściowych
#define cbInQueue 1024 //rozmiar bufora danych wejściowych
//--------------------------------------------------
------------------
TForm1 *Form1;
HFILE hfile_s; // identyfikator pliku źródłowego
char Buffer_O[cbOutQueue]; // bufor danych wyjściowych
char Buffer_I[cbInQueue]; // bufor danych wejściowych
DWORD Number_Bytes_Read; // Number bytes to read -
// liczba bajtów do czytania
HANDLE hCommDev; // identyfikator portu
LPCTSTR lpFileName; // wskaźnik do nazwy portu
DCB dcb; // struktura kontroli portu szeregowego
DWORD fdwEvtMask; // informacja o aktualnym stanie
// transmisji
COMSTAT Stat; // dodatkowa informacja o zasobach
// portu
DWORD Errors; // reprezentuje typ ewentualnego błędu
//--------------------------------------------------
------------------
int __fastcall Close_Comm(HANDLE hCommDev)
{
CloseHandle(hCommDev);
return TRUE;
}
//--------------------------------------------------
------------------
int __fastcall Write_Comm(HANDLE hCommDev,
DWORD nNumberOfBytesToWrite)
{
DWORD NumberOfBytesWritten;
if (WriteFile(hCommDev, &Buffer_O[0], nNumberOfBytesToWrite,
&NumberOfBytesWritten, NULL) > 0)
{
WaitCommEvent(hCommDev, &fdwEvtMask, NULL);
return TRUE;
}
else
return FALSE;
}
//--------------------------------------------------
------------------
int __fastcall Read_Comm(HANDLE hCommDev,
LPDWORD lpNumberOfBytesRead, DWORD Buf_Size)
{
DWORD nNumberOfBytesToRead;
ClearCommError(hCommDev, &Errors ,&Stat);
if (Stat.cbInQue > 0)
{
if (Stat.cbInQue > Buf_Size)
nNumberOfBytesToRead = Buf_Size;
else
nNumberOfBytesToRead = Stat.cbInQue;
ReadFile(hCommDev, &Buffer_I[0], nNumberOfBytesToRead,
lpNumberOfBytesRead, NULL);
}
else
*lpNumberOfBytesRead = 0;
return TRUE;
}
//------------wstępny odczyt pliku z dysku----------------------------
void __fastcall TForm1::FileListBox1Change(TObject *Sender)
{
memset(Buffer_O, 0, cbOutQueue);
hfile_s = _lopen(FileListBox1->FileName.c_str(), OF_READ);
if (hfile_s != HFILE_ERROR)
_lread(hfile_s, &Buffer_O[0], cbOutQueue);
for (int i = 0; i <= cbOutQueue - 1; i++)
if (Buffer_O[i] == NULL)
Buffer_O[i] = '.';
Memo1->Text = Buffer_O;
Memo2->Text = Buffer_O;
_lclose(hfile_s);
}
//-----------------zamknięcie portu i aplikacji-----------------------
void __fastcall TForm1::CloseCommClick(TObject *Sender)
{
Close_Comm(hCommDev);
Application->Terminate();
}
//---------------inicjalizacja portu----------------------------------
void __fastcall TForm1::OpenCommClick(TObject *Sender)
{
if (CheckBox1->Checked == TRUE) // wybór portu
lpFileName = "COM1";
if (CheckBox2->Checked == TRUE)
lpFileName = "COM2";
hCommDev = CreateFile(lpFileName, GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, NULL);
if (hCommDev != INVALID_HANDLE_VALUE) // sprawdza, czy port jest
// otwarty prawidłowo
{
SetupComm(hCommDev, cbInQueue, cbOutQueue);
dcb.DCBlength = sizeof(dcb);
GetCommState(hCommDev, &dcb);
if (CheckBox3->Checked == TRUE) // wybór prędkości
dcb.BaudRate = CBR_1200; // transmisji
if (CheckBox4->Checked == TRUE)
dcb.BaudRate = CBR_19200; // dla ft245 zmiana baudrate nic nie daje
dcb.Parity = ODDPARITY; // ustawienie parzystości
dcb.StopBits = ONESTOPBIT; // bity stopu
dcb.ByteSize = 7; // bity danych
//-przykładowe ustawienia flag sterujących DCB-
dcb.fParity = TRUE; // sprawdzanie parzystości
dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
dcb.fOutxCtsFlow = FALSE;
dcb.fOutxDsrFlow = FALSE;
dcb.fDsrSensitivity = FALSE;
dcb.fAbortOnError = FALSE;
dcb.fOutX = FALSE;
dcb.fInX = FALSE;
dcb.fErrorChar = FALSE;
dcb.fNull = FALSE;
SetCommState(hCommDev, &dcb);
GetCommMask(hCommDev, &fdwEvtMask);
SetCommMask(hCommDev, EV_TXEMPTY);
}
else
{
switch ((int)hCommDev)
{
case IE_BADID:
MessageBox(NULL, "Niewłaściwa nazwa portu lub port jest"
" aktywny.", "Błąd", MB_OK);
break;
};
}
}
//----------------wysłanie pliku--------------------------------------
void __fastcall TForm1::SendClick(TObject *Sender)
{
DWORD FileSizeHigh;
ProgressBar1->Max = 0;
if (hCommDev > 0)
{
memset(Buffer_O, 0, cbOutQueue);
if ((_lopen(FileListBox1->FileName.c_str(),OF_READ)) !=
HFILE_ERROR)
{
hfile_s = _lopen(FileListBox1->FileName.c_str(), OF_READ);
ProgressBar1->Max=GetFileSize((HANDLE)hfile_s,
&FileSizeHigh);
while (_lread(hfile_s, &Buffer_O[0], 1))
{
Write_Comm(hCommDev, 1);
ProgressBar1->StepIt();
}
_lclose(hfile_s);
FlushFileBuffers(hCommDev);
}
else
MessageBox(NULL, "Nie wybrano pliku do transmisji.",
"Błąd !", MB_OK);
}
else
MessageBox(NULL, "Niewłaściwa nazwa portu lub port jest"
" aktywny.", "Błąd", MB_OK);
}
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Następne wpisy z tego wątku
- 16.06.10 06:42 J.F.
- 16.06.10 09:15 AS
- 16.06.10 09:56 AS
- 16.06.10 18:48 Jerry1111
- 16.06.10 18:54 Jerry1111
- 19.06.10 00:04 nenik
Najnowsze wątki z tej grupy
- karta parkingowa
- Wl/Wyl (On/Off) bialy/niebieski
- I3C
- Pytanie o transformator do dzwonka
- międzymordzie USB 3.2 jako 2.0
- elektronicy powinni pomysleć o karierze elektryka
- jak szybko plynie prad
- Płytki Milkv-Duo
- Światłowód między budynkami
- POtrzebny bufor 3.3<>5V, jedonkieruowy, trójstanowy, wąski
- retro
- Bezprzewodowe polączenie Windows z projektorem
- rozklejanie obudowy
- Prośba o identyfikację komponentu
- Smart gniazdko straciło na zasięgu wifi?
Najnowsze wątki
- 2024-11-14 Gliwice => Network Systems Administrator (IT Expert) <=
- 2024-11-14 Gliwice => Administrator Systemów Sieciowych (Ekspert IT) <=
- 2024-11-13 Filtr do pompy ruskiej
- 2024-11-12 Gdzie kosz?
- 2024-11-13 elektrycznie
- 2024-11-12 Jebane kurwa, kurwy.
- 2024-11-13 karta parkingowa
- 2024-11-13 Wl/Wyl (On/Off) bialy/niebieski
- 2024-11-12 I3C
- 2024-11-13 Kraków => DevOps Engineer (Junior or Regular level) <=
- 2024-11-13 Łódź => Senior SAP HANA Developer <=
- 2024-11-13 Zabrze => Senior PHP Symfony Developer <=
- 2024-11-13 Karlino => Konsultant wewnętrzny SAP (FI/CO) <=
- 2024-11-13 Kraków => QA Inżynier <=
- 2024-11-13 Żerniki => Dyspozytor Międzynarodowy <=