Gast
#6045168
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