Hi, ich habe ein FT232R mit ein PIC16F630 angeschlossen.Ich habe die UART RXD und TXD für die Daten-kommunikation verwendet. Um den FT232 zu steuren habe ich ein Programm in VisualBasic 2008 geschrieben. Es wir ein Byte von FTDI zu PIC gesendet dann wird ein Byte von der PIC zu FTDI gesendet. Mit 19200 Baudrate habe ich 2000 Byte/s erreicht. Dann habe ich mir den FT4232 besorgt. Ich habe den gleichen Programm mit FT4232H verwendet. Das Problem ich kriege nur 60 Byte/s. Wenn ich die Daten vom FT4232 nur sende, erreiche ich ein Byte pro 100 us. Wenn ich sende und Empfange(von FTDI lese) dann habe ich nur 60 Byte /s. Warum die Datenübertragung mit FT4232H zu langsam ist ? S. Danke
@Sabine Mühller (zizo)
>Warum die Datenübertragung mit FT4232H zu langsam ist ?
Liegt möglicherweise an vergurkten FIFO-Einstelungen im FT4232 oder
Problemen in deinem Visual Basic Programm. Der IC kann locker 115k2 ohne
Pause, eher mehr.
MFg
Falk
Du musst beachten, dass USB ein Paket-orientiertes Protokoll hat. Das heisst, wenn du viele Bytes auf einmal anstatt nur einzelne Bytes raushaust, bekommst du Speed. Ralf
Hi, also es liegt nicht am Visual Basic Programm, weil mit den anderen IC FT232 war schon schnell. --Liegt möglicherweise an vergurkten FIFO-Einstelungen kannst du mir mehr erklären, mein Code Initialisierung: '''''''''''''''Port A FT_Status = FT_OpenByIndex(0, FT_Handle0) If FT_Status <> FT_OK Then ListBox1.Items.Add("PORTA Öffnet sich nicht") Exit Sub End If ' Display device count on form ListBox1.Items.Add("PORTA Öffnet sich ") ' Purge buffers FT_Status = FT_Purge(FT_Handle0, FT_PURGE_RX Or FT_PURGE_TX) If FT_Status <> FT_OK Then ListBox1.Items.Add("Purge Failed") Exit Sub End If ' Set Baud Rate FT_Status = FT_SetBaudRate(FT_Handle0, 923076) If FT_Status <> FT_OK Then ListBox1.Items.Add("Baudrate Failed") Exit Sub End If ' Set Timeout FT_Status = FT_SetTimeouts(FT_Handle0, 5000, 0) If FT_Status <> FT_OK Then ListBox1.Items.Add("Timeout Failed") Exit Sub '' End If ' Set parameters FT_Status = FT_SetDataCharacteristics(FT_Handle0, FT_DATA_BITS_8, FT_STOP_BITS_2, FT_PARITY_NONE) If FT_Status <> FT_OK Then ListBox1.Items.Add("SetDataCharacteristics Failed") Exit Sub End If ' Set Flow Control FT_Status = FT_SetFlowControl(FT_Handle0, FT_FLOW_NONE, 0, 0) If FT_Status <> FT_OK Then ListBox1.Items.Add("SetFlowControl Failed") Exit Sub End If Lesen+Schreiben: Do While x < 10000 x = x + 1 i = 0 senddaten = 1 ''If senddaten = 256 Then ''senddaten = 0 ''End If strwritebuffer = Chr(senddaten) ''TextBox4.Text = Asc(strwritebuffer) BytesWritten = 0 ' Write string data to device FT_Status = FT_Write_String(FT_Handle0, strwritebuffer, 1, BytesWritten) If FT_Status <> FT_OK Then Exit Sub End If Wartenaufmehr: 'Get auf number of Byte waiting to be read FT_Status = FT_GetQueueStatus(FT_Handle0, FT_RxQ_Bytes) If FT_Status <> FT_OK Then Exit Sub End If i = i + 1 If i > 2000 Then Exit Sub End If If FT_RxQ_Bytes < 1 Then GoTo Wartenaufmehr BytesRead = 0 TempStringData = " " Do FT_Status = FT_Read_String(FT_Handle0, TempStringData, FT_RxQ_Bytes, BytesRead) If FT_Status <> FT_OK Then Exit Sub Else Impuls = Impuls + 1 If Impuls = 2000000000 Then Impuls = 0 End If count1 = Impuls End If ' Display string on form TextBox5.Text = Asc(TempStringData) loop
Nimm das Konfigprogramm für den FTDI, das heisst Mprog. Schau dir die Einstellungen für den funktionierenden FT232 sowie den langsamen FT4323 an, dort sollten Unschiede zu sehen sein. Schau auch in der Systemsteuerung im Gerätemanager nach den Einstellungen für die beiden virtellen COM-Ports nach. Da sollte man was finden. MfG Falk
danke ich habe jetzt die zwei ICs mit FT_Prog ausgelesen, ich habe kein Unterschied festgestellt, das gleich auch im Geräte Maneger , ide zwei Einstellungen sind gleich!
ich habe USB-Kabel ausgetaucht, es hat nix gebracht. hat jemand eine Idee? hat es diese Module schon bei jemanden funktioniert?
Ich habe doch oben geschrieben, was du tun musst. Dein Programm schreibt soweit ich sehen kann ein einziges Byte in den Buffer und ruft danach sofort die Senderoutine des FTDI-Chips auf. Das IST LANGSAM, weil du damit höchstens 1 Byte abschickst und bis der USB-Bus das nächste Mal den FTDI-Chip zum Senden auffordert mindestens 1ms vergeht. Mache einen Buffer von 256 Bytes, befülle ihn mit den Werten von 0-255 und schicke diesen Buffer an den FTDI-Chip und messe die Geschwindigkeit der Übertragung. Ralf
Danke Ralf, es klappt , wenn ich mehr als ein Wert zu schieken, gut , von den Baudrate 100 Wert zu schreiben und dann lesen ist schon mal gut . ich habe noch ein Problem , ich lese immer den anfangswert. Ich finde den Fehler nicht S. i = 0 BytesWritten = 0 Do sumx = 2 + xtx senddaten = sumx '' senddaten hoch zählen If sumx = 50 Then xtx = 0 End If strwritebuffer = Chr(senddaten) ' Write string data to device FT_Status = FT_Write_String(FT_Handle0, strwritebuffer, 100, BytesWritten) If FT_Status <> FT_OK Then Exit Sub End If Loop Until (BytesWritten = 100) ListBox1.Items.Add("500 ok") Wartenaufmehr: 'Get auf number of Byte waiting to be read FT_Status = FT_GetQueueStatus(FT_Handle0, FT_RxQ_Bytes) If FT_Status <> FT_OK Then Exit Sub End If i = i + 1 If i > 2000000 Then Exit Sub End If If FT_RxQ_Bytes < 100 Then GoTo Wartenaufmehr BytesRead = 0 TempStringData = " " Do BytesRead = 0 FT_Status = FT_Read_String(FT_Handle0, TempStringData, FT_RxQ_Bytes, BytesRead) If FT_Status <> FT_OK Then Exit Sub End If ' Display string on form TextBox5.Text = Asc(TempStringData) ListBox1.Items.Add(Asc(TempStringData)) Loop Until (FT_RxQ_Bytes = BytesRead) If FT_RxQ_Bytes = BytesRead Then ListBox1.Items.Add("lesen ok") End If
> ich habe noch ein Problem , ich lese immer den anfangswert.
Ehrlich gesagt kann ich dir da nicht helfen, weil dein Code völlig
unverständlich ist und er hat nicht mal Kommentare, aus denen man
schließen kann, was du auf welche Weise lösen möchtest.
Versuch doch bitte, den Code mit Kommentaren auszustatten, damit wir
hier nachvollziehen können, was du vorhast, und was du tatsächlich
machst. Wenn du Probleme mit der deutschen Sprache hast, schreib die
Kommentare in Englisch, wenn du das besser kannst. Die Hauptsache ist,
wir verstehen erstmal was da abläuft, aber ohne kommentierten Code kann
ich jedenfalls nur raten und ich möchte mich eigentlich nicht durch
unkommentierten Code durchlesen.
Ralf
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.