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
Gast
#1871612
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
Ich verwende die FT4232H mini Module, hat jemand Erfahrung damit?
Gast
#1874212
Kan mir bitte jemand helfen? ich finde den Fehler nicht. S.
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?
Gast
#1874955
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
Fehler gefunden sumx = 2 +sumx Danke S.
Gast
#1875296
> 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
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.