mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik FT4232 zu langsam


Autor: Sabine Mühller (zizo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Sabine Mühller (zizo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Sabine Mühller (zizo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verwende die FT4232H mini Module,
hat jemand Erfahrung damit?

Autor: Sabine Mühller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kan mir bitte jemand helfen? ich finde den Fehler nicht.

S.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Sabine Mühller (zizo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Sabine Mühller (zizo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe USB-Kabel ausgetaucht, es hat nix gebracht.
hat jemand eine Idee?
hat es diese Module schon bei jemanden funktioniert?

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Sabine Mühller (zizo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Sabine Mühller (zizo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fehler gefunden
sumx = 2 +sumx


Danke
S.

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.