Forum: PC Hard- und Software Digitaleingang Zustandswechsel mit niedriger Latenz/Jitter auf PC


von Timo (Gast)


Lesenswert?

Hallo zusammen,

ich möchte einen Zustandswechsel eines Digitalausgangs von einem 
Mikrocontroller mit möglichst geringer Latenz und Jitter auf meinem PC 
verarbeiten können. Der Mikrocontroller wird in meinem Aufbau primär 
dafür genutzt, um eine (Zeilen-)Kamera zu triggern und den dafür 
notwendigen Zeilentakt von 40 kHz zu generieren und an die Kamera über 
einen Digitalausgang zu schicken. Die Zeilen werden im PC als Frames mit 
jeweils 32 Zeilen empfangen. Ich möchte nun zu einem späteren/beliebigen 
Zeitpunkt in Software und unabhängig vom Bildeinzug, die gerade aktuell 
vom Mikrocontroller getriggerte Zeilennummer erfragen können. Wichtig 
ist hierbei, dass die Abfrage des Zeilennummer wenig CPU Zeit kostet, 
d.h.  kontinuierliches Polling auf der CPU kann ich mir nicht leisten.
Da ich leider kein RTOS verwenden kann (wegen spezieller Treiber), ist 
mir ein Polling mithilfe eines (kurzen <= 1ms) Softwaretimers ohnehin 
"suspekt".

Die Frage ist, wie ich mit möglichst geringer Latenz/Jitter, aber 
gleichzeitig niedriger Rechenauslastung auf der CPU an den gewünschten 
Zeilenzähler komme. Für den Zeilenzähler habe ich 64-Bit angedacht, so 
dass ich nicht nicht zur Laufzeit mit Überläufen beschäftigen muss. D.h. 
rechnerisch muss ich 320 Kbit/s vom Mikrocontroller zum PC bei 40 kHz 
übertragen. Gibt es hierfür eine einfache und robuste Schnittstelle, 
zwischen Mikrocontroller und PC, die ihr empfehlen könnt?

Für die Verbindung zwischen Mikrocontroller und PC habe ich derzeit nur 
UART per RS232 verfügbar ;) Ich hatte angedacht USB3 zu nutzen, da bei 
anständigen Treibern die Latenz auf USB3 gut sein soll:

https://stackoverflow.com/questions/13831008/what-is-the-minimum-latency-of-usb-3-0

https://www.cypress.com/documentation/development-kitsboards/cyusb3kit-003-ez-usb-fx3-superspeed-explorer-kit


Die Frage ist, wie schnell bei einem Zustandswechsel auf dem Eingang die 
Software per Interrupt geweckt werden kann und in welchen Abständen. Ich 
schätze mal, dass ich 25 us hiermit nicht hinbekomme, weiß es aber nicht 
wirklich. Mein Ziel wäre es im Schnitt alle 250 us einen Wert für den 
Zeilenzähler zu bekommen, was ich natürlich in einem Dauertest messen 
werde.

Findet ihr den Ansatz über USB3 sinnvoll oder könnt ihr eine andere 
Schnittstelle empfehlen?


Viele Grüße
Timo

: Verschoben durch Moderator
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Timo schrieb:
> auf meinem PC verarbeiten
Welches Betriebssystem mit welcher Echtzeitextension?

> Mein Ziel wäre es im Schnitt alle 250 us einen Wert für den Zeilenzähler
> zu bekommen
Und wie lange darf da die längste Pause sein, weil Windows wieder mal 
irgendwas unheimlich Wichtiges zu erledigen hat oder der USB wegen einer 
EMV Störung grad wieder mal rumzickt?

Sieh dir an, wie andere Geräte funktionieren, die in diesen 
Zeitbereichen unterwegs sind: die haben eigene "Intelligenz", die Daten 
aufbereitet, mit Zeitstempeln versieht und dann bei nächster Gelegenheit 
(was bei einem "normalen" Windows schon mal ein paar ms später sein 
kann) zur Verarbeitung zum PC schickt.

Timo schrieb:
> Die Frage ist, wie schnell bei einem Zustandswechsel auf dem Eingang die
> Software per Interrupt geweckt werden kann und in welchen Abständen.
Irgendwie stellst du dir das ein wenig abstrakt vor. Irgendein Interrupt 
ist schon ewige Zeiten Geschichte, bis letztlich dann der Thread/Task in 
deiner Software angetriggert wird. Du musst dir diesen Verarbeitungspfad 
ausdrücklich zu Gemüte führen.

von Clemens L. (c_l)


Lesenswert?

Timo schrieb:
> Findet ihr den Ansatz über USB3 sinnvoll oder könnt ihr eine andere
> Schnittstelle empfehlen?

Es gibt noch Mainboards mit einem COM-Port-Header.

von Georg (Gast)


Lesenswert?

Timo schrieb:
> Findet ihr den Ansatz über USB3 sinnvoll oder könnt ihr eine andere
> Schnittstelle empfehlen?

Solange du Standard-Windows oder Linux benutzt ist die Hardware 
weitgehend egal, die bestimmt nicht die Antwortzeiten.

Georg

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.