UART lange Antwortzeit

Gast #4933971
Lesenswert?

Hallo zusammen

Ich möchte über LabView Daten eines uC auslesen. Dazu öffne ich einen 
ComPort mit einem FTDI chip (https://www.sparkfun.com/products/9873), 
Baudrate 115200. Die Datenübertragung funktioniert einwandfrei, jedoch 
kriege ich nur ca 4Hz raus.

Um dies zu debuggen habe ich ein kurzes LabView VI (siehe Bilder) 
geschrieben, dass einen Befehl (A0) schickt und dann die Antwort 
ausliesst (versionsNr). UART TX und RX lese ich auf dem Scope aus (siehe 
Bilder). Die Antwort scheint wenn sie mal auf dem UART ist schnell 
zurück zu kommen. Also schliesse ich daraus, dass das Problem beim 
FTDI-Chip oder auf PC seite liegt. Hier komme ich jedoch nicht mehr 
weiter.


Hat jemand eine Ahnung an was dies liegen könnte? Vielen Dank für eure 
Hilfe.

Gruss Christian
Angehängte Dateien:
Gast #4933986
Lesenswert?

USB arbeitet Blockweise. Ich sehe leider nicht wie du die Daten 
überträgst. Wenn du 1 Zeichen sendet und dann auch 1 Zeichen wartest 
dann wird das niemals schnell werden.

Du musst dafür sorgen, das viele Daten in einem Rutsch übertragen 
werden.
Gast #4933995
Lesenswert?

Danke dir für deine Antwort, ich sende die ASCI zeichen "A0" und erwarte 
10 Byte zurück. CR bedeutet das Ende der Übertragung.

Es war mir bewusst, dass ich so den USB nicht gerade optimal ausnütze, 
hätte jedoch erwartet, dass ich 20Hz rauskriege um ein flüssiges Bild 
darstellen zu können. 4 Hz dünkt mich doch ein wenig sehr tief?
Moderator (Firma: Titel) Persönliche Seite #4934028
Lesenswert?

Christian schrieb:
> jedoch kriege ich nur ca 4Hz raus.
Also irgendwas mit 250ms Timeout.

> Also schliesse ich daraus, dass das Problem beim FTDI-Chip oder auf PC
> seite liegt.
Such mal nach einer Flush-Funktion oder programmiere die Latency um:
http://www.ftdichip.com/Support/Documents/ProgramGuides/D2XX_Programmer's_Guide(FT_000071).pdf
#4934034
Lesenswert?

@Christian (Gast)

>Bilder). Die Antwort scheint wenn sie mal auf dem UART ist schnell
>zurück zu kommen. Also schliesse ich daraus, dass das Problem beim
>FTDI-Chip

Nicht wirklich.

>oder auf PC seite liegt.

Dort schon eher. LabVIEW ist nicht gerade ein Sprinter.

>Hat jemand eine Ahnung an was dies liegen könnte?

Man muss man schauen, ob man ein paar Einstellungen im LabVIEW 
verstellen kann. Bzw. muss man prüfen, ob diverse andere Abläufe 
(Anzeige des Strings etc.) dein LabVIEW Programm ausbremsen.
Gast #4934037
Lesenswert?

Du kannst im Gerätemanager in den Einstellungen des COM-Ports das 
Timeout einstellen, das kannst du bis auf 1ms runterstellen.
Reiter "Anschlusseinstellungen" -> Erweitert -> BM Einstellungen -> 
Wartezeit auf 1ms einstellen.
Die Timeouts kannst du auch gleich mal auf 0ms setzen falls die anderes 
eingestellt sein sollten.
#4934049
Lesenswert?

Christian schrieb:
> Also schliesse ich daraus, dass das Problem beim
> FTDI-Chip oder auf PC seite liegt. Hier komme ich jedoch nicht mehr
> weiter.

Den Timeout müsste man in der LabView Komponente für den seriellen Port 
parametrisieren können. Ich verwende hier auch FTDI Chips (aber ohne 
Labview), da kommen die Daten fast augenblicklich (<10ms) raus.

In seriellen Komponenten sind manchmal relativ lange Timeouts drin, um 
einzeln gesentete Bytes zu kompletten Messages zusammenfassen zu können.
Gast #4934092
Lesenswert?

Christian schrieb:
> Ich habe es im Terminalprogramm "HTERM" ausprobiert und kriege
> vergleichbare Taktzeiten. Auf die Anregung von Chris habe ich die
> Einstellungen des Com Ports verändert (siehe Anhang), leider sind die
> Ergebnisse gleich.
>
> Christian

Sieht bis auf die Puffergrößen bei mir gleich aus, dort habe ich jeweils 
4096 Bytes drin.
(Firma: Vescomp) #4934143
Lesenswert?

Christian schrieb:
> Da habe ich auch beides probiert. Ich habe gehofft dass das Problem zu
> grosse Pakete sind (wo ich doch sehr kleine verwende).

 Hoffen, anstatt auszuprobieren.

 Menschen reden miteinander schneller als 4Hz.
 FTDI hat bestimmt nicht solche Verzögerungen.

Falk B. schrieb:
> Muss er nicht, die ist um Größenordnungen geringer. Der Fehler liegt
> wahrscheinlich im LabVIEW und dessem Treiber.

 Aber du kannst natürlich den Fehler weiter in Paketgröße suchen...
Gast #4934194
Lesenswert?

Wie gesagt, habe ich beides PROBIERT, nicht nur GEHOFFT :D
und wie gesagt, ich habe es nicht nur im LabView ausprobiert sondern 
auch in einem Terminalprogramm. Also wird der Fehler höchst 
wahrscheinlich nicht in LabView liegen.
Hast du sonst noch eine Idee?
Gast #4934256
Lesenswert?

Sehe ich gleich, dass es der FTDI Chip nicht sein wird. Ich tippe auf 
Windows bzw Treiber. Nur hilft mir dies nicht viel weiter.
Ein weiterer Punkt; ich kriege 4 Übertragungen raus, egal ob ich jetzt 1 
Byte oder 20 Byte schicke --> nicht FTDI.
Gast #4934552
Lesenswert?

Christian schrieb:
> Sehe ich gleich, dass es der FTDI Chip nicht sein wird. Ich tippe auf
> Windows bzw Treiber. Nur hilft mir dies nicht viel weiter.

Fang doch um himmelswillen systematisch an!

Also zu allererst ein logischer Kurzschluß direkt auf der seriellen 
Seite des FTDI, also TxD an RxD. Dann probierst du aus, wie schnell 
deine ganze Strecke von der Applikation über's OS zum FTDI und wieder 
zurück ist.

Normalerweise geht das ruckzuck, die Latenzzeit zwischen einzelnen 
Datenblöcken auf den USB liegt so bei 1 ms. Du solltest also beim 
Terminalprogramm beim Tippen keinerlei Verzögerungen spüren.

Die nächste Sache ist dann das Programm, was auf deinem µC läuft. Wenn 
sich das zu dämlich anstellt, dann wird das Ganze eben langsam. Und 
genau das vermute ich.

W.S.
Gast #4934637
Lesenswert?

Ich habe schon eine Menge mit unterschiedlichen USB-UART Adaptern 
gemahct, nur nicht mit dem FT232 Chip. In allen Fällen lagen die 
Latenzzeiten ohne besondere Konfiguration im Bereich um 1ms.

250ms ist nicht in Ordnung.

Teste den Adapter mit Hterm in einer Schleife, also ohne weitere 
Hardware und ohne Matlab.
Gast #4935171
Lesenswert?

Der Logische Kurzschluss von TX-RX habe ich durchgeführt. Antwort kommt 
ohne spürbare Verzögerung. Getestet habe ich in Hterm. Nur auch hier 
vergehen bis 250ms bis er eine erneute Meldung sendet, wenn ich den 
Befehl aus Hterm in einer schleife ohne Verzögerung schicke.
#4935227
Lesenswert?

@Christian (Gast)

>Der Logische Kurzschluss von TX-RX habe ich durchgeführt.
>Antwort kommt
>ohne spürbare Verzögerung. Getestet habe ich in Hterm. Nur auch hier
>vergehen bis 250ms bis er eine erneute Meldung sendet, wenn ich den
>Befehl aus Hterm in einer schleife ohne Verzögerung schicke.

Und was schließen wir daraus?
#4935634
Lesenswert?

@Christian (Gast)

>Das ist eine gute Frage.
>Ich habe das USB-Kabel getauscht und es sieht immer noch gleich aus.

Ich glaube du macht grundlegend was falsch. Was auch immer.
Aus dem FTDI darf in den Pausen kein Break (=LOW) rauskommen. Entweder 
hast du einen total vermurksten Treiber, andere Software, die auf die 
COM-Ports mit zugreift oder irgendwo anders einen elementaren Fehler.
Gast #4935703
Lesenswert?

Ich habe es herausgefunden :D

Das Problem ist der CLR Befehl den ich im Labview eingebaut habe. Dieser 
braucht ca 250ms. Wenn ich diesen weg lasse kriege ich ca 600Hz raus 
(Bild Timing im Anhang). Warum ich auf die gleichen Ergebnisse mit HTerm 
komme weiss ich nicht.

Vielen Dank an alle die geholfen haben eine Lösung zu finden.


Gruss Christian
Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #4935709
Lesenswert?

Christian schrieb:
> Das Problem ist der CLR Befehl den ich im Labview eingebaut habe.
Ein klassisches Layer 8 Problem...

> Dieser braucht ca 250ms
Man fasst es nicht. In dieser Zeit zählt ein heutiger Bolide eine 
Endlosschleife 3 mal komplett durch...

> Warum ich auf die gleichen Ergebnisse mit HTerm komme weiss ich nicht.
Aber es wäre doch interessant, oder nicht?
#4935726
Lesenswert?

@Lothar Miller (lkmiller) (Moderator)


>> Warum ich auf die gleichen Ergebnisse mit HTerm komme weiss ich nicht.
>Aber es wäre doch interessant, oder nicht?

Möglicherweise hat LabVIEW einen eigenen Treiber für die COM-Ports 
installiert, auf den auch HTERM zugreift.
Gast #4935780
Lesenswert?

Dann müsste HTerm ja jetzt nach der Korrektur auch schneler sein. Ist 
das der Fall?

> Der Logische Kurzschluss von TX-RX habe ich durchgeführt.

Haben wir alle verstanden. Richtig heisst es: Loop-Back, nicht 
Kurzschluss.
Gast #4935783
Lesenswert?

Das wäre eine Möglichkeit. Ich bin auch ziemlich überrascht. Ich habe 
eine Programmlaufzeit (ohne Kommunikation) von ca 150us, da fallen 250ms 
doch ziemlich ins Gewicht ;D.
Ich nehme an, dass es einen schnelleren Weg geben wird den Buffer zu 
lehren.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren