(14.12.2013 16:00 )monoceros84 schrieb: 1MS/s je Kanal, 100ms messen. Das heißt, es müssen je Kanal 1MS/s * 100ms = 100kS übertragen werden. Da ich jedes mal nur 4000 Samples in den Puffer schreiben kann, größer ist er nun mal nicht, sind das 100000/4000 = 25 Schreibzyklen in den 100ms. Das heißt, es müssen alle 4ms die kompletten Arrays für beide Kanäle in der Software bereit gestellt und der Schreiben-Befehl aufgerufen werden - alles noch vor und unabhängig vom USB. Der, der das auf einer Windows-Maschine hinbekommt (erstmal ganz abgesehen von allen nebenbei laufenden Überwachungsroutinen) möge sich bitte melden. Allein schon 10ms werden für Schleifendurchläufe auf Nicht-RT-Systemen sportlich...
Du mußt keineswegs in 25 Schreibzyklen jedesmal den Kartenpuffer voll schreiben. Der Datentransport zur Karte funktioniert ganz anders als Du es beschreibst, und zwar schneller und intelligenter. Windows-Interrups werden den Transport nicht stören, und die Größe des Kartenpuffers muss Dich überhaupt nicht interessieren.
Und zwar so: Es wird ein zweiter Puffer auf dem PC angelegt. Der kann recht groß sein, so dass Du z.B die Samples für den gesamten Zyklus mit einem Mal reinschreiben könntest. Der Datentransport zur Karte findet über DMA statt, die "windowsinterrupt-gefährdete" CPU hat damit nichts mehr zu tun. Beim Datentransport zur Karte findet ein Handshaking derart statt, dass der interne Kartenpuffer immer möglichst gefüllt bleibt. Dieses Handshaking, sowie die Konvertierung der parallelen Daten zu USB-Seriell, werden von untergeordneten, in "Echtzeit" arbeitenden Intelligenzen erledigt, die CPU hat damit ebenfalls nichts zu tun.
Fazit: Wenn Die USB-Schnittstelle den Datendurchsatz schafft, dann müsste es funktionieren. Bedenken, dass es an irgendwelchen zu langsamen Schleifendurchläufen im Programm scheitert, oder daß Window-Interrupts alles verderben, muss man nicht haben.
@Jens:
Zitat:Das Teil an einem USB 1.1 Ausgang zu betreiben ist wie mit einem Ferrari auf einer Schotterpiste zu fahren. Big Grin
Wenn es nach mir ginge: Es ist strafwürdig. Zwar sehe ich ich, soweit ich blicken kann, bei allen Benutzern "Verwarnungslevel = 0". Aber hier könnte man doch endlich mal ein ordentliches Exempel statuieren.