Forum: PC-Programmierung LabView/C# - FTDI FT232H - Hohe Datenrate


von Hartmuth (Gast)


Lesenswert?

Hallo,

ich möchte ein LabView-Programm schreiben, mit dem ich große Datenmengen 
wegspeichern kann.
Ich empfange über einen FTDI-Chip (FT232H) große Datenmengen (2 MBaud 
und mehr)
Nun möchte ich die Daten die ich empfange möglichst schnell wegspeichern 
(am einfachsten wäre erst einmal in eine Textdatei). Ich habe dies 
bereits versucht mit dem Realterm. Wenn dieser aber die Daten 
wegspeichern soll, halbiert sich aber die Datenrate, weil der Realterm 
scheinbar nicht hinterher kommt.

Nun frage ich mich, ob das mit VISA möglich ist. Es gibt ja auch von 
FTDI direkt die FTD2xx.dll . Ich habe aber im Internet gelesen, dass 
diese Library keine Geschwindigkeitsvorteile gegenüber einem normalen 
VCP liefert.
Stimmt das?

Hat vielleicht jemand ein Beispiel zur FTD2xx-Library, mit dem man große 
Datenmengen empfangen kann. (Ich habe die Beispiele von der FTDI-Seite 
schon heruntergeladen, aber hier geht es ja eher um geringere 
Datenraten).

Ich hätte auch kein Problem mit Beispielen in C# oder C++

von Peter II (Gast)


Lesenswert?

>  Ich habe dies
> bereits versucht mit dem Realterm. Wenn dieser aber die Daten
> wegspeichern soll, halbiert sich aber die Datenrate, weil der Realterm
> scheinbar nicht hinterher kommt.
arbeitest du denn mit einer Flusskontrolle? Denn wie sollte denn sonst 
Realterm der gegenstelle mitteilen das es hinter hinterher kommt?

2Mbaut sollte eigentlich überhaupt kein Problem sein. Das sind noch nur 
200kb/s - also nichts für einen aktuellen PC.

Schreibe doch einfach selber mal ein Programm, sind in c# vermutlich 
weniger also 10zeilen. schnittstelle öffnen, datei öffen, beim 
datenevent daten wegschreiben fertig.

Oder teste mal mit

type comX > out.txt

von Hartmuth (Gast)


Lesenswert?

Also ich habe einwenig rumprobiert und da ist mir noch was aufgefallen.
Ich habe mit LabView eine Anwendung geschrieben die VISA nutzt und ein 
Byte sendet. Jetzt ist zwischen den einzelnen Bytes aber immer ein 
großes Delay so dass ich rechnerisch garnicht auf 2MBaud komme.
Dann habe ich dasselbe Programm mit C# geschrieben wobei ich hier die 
D2xx Lib nutze. Ähnliches Bild auf dem Oszi.
Dann habe ich zum Vergleich noch ein Programm für einen Mikrocontroller 
geschrieben, der dann auch 1 Byte mit 2MBaud schickt und hier ist die 
Latenz zwischen den einzelnen Bytes deutlich geringer.
Woran kann das liegen?
Ich habe gesehen, dass es bei der D2xx Lib eine Funktion zum setzen der 
Latenz gibt. Diese ist normalerweise auf 16ms eingestellt. Ich habde 
diese dann sowohl auf den Minimalwert von 2ms gesetzt und auf den 
Maximalwert von 255ms. Aber ich konnte keine Änderung feststellen.
Hat das eventuell irgendwas mit Windows zu tun?

von Peter II (Gast)


Lesenswert?

Hartmuth schrieb:
> Woran kann das liegen?

das liegt mehr oder weniger am USB. Du wirst niemals mit einzelen byte 
die Leitung sinnvoll ausnutzen können. Selbste ohne USB wird es maximal 
die hälfte werden. Denn in der Zeit wo du 1 byte sendest, sendet ja die 
gegenstelle nicht.  (kann man zwar ändern, ist aber oft so)

Warum kannst du nicht viele bytes auf einmal übertragen?

von Christian R. (supachris)


Lesenswert?

Richtig, am PC erreichst du bei eigentlich allen Schnittstellen nur die 
volle Datenrate, wenn du viele Daten am Stück schickst, das hat nicht 
mal was mit USB zu tun.

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
Noch kein Account? Hier anmelden.