Zeitmessung in µC oder im PC

Gast #2528912
Lesenswert?

Hallo,

ich will einen Sensor auswerten, der mir, sobald Daten vom µController 
ausgelesen wurden und neue Daten zur Verfügung stehen, ein Interrupt an 
einen µController-Eingang sendet.

Jetzt will ich die Zeit zwischen zwei Messungen erfassen und auf dem PC 
mittels LabView eine Kennlinie aus den gemessenen Daten und der 
gemessenen Zeit darstellen.

Wenn ich die Zeit im µController messe, dann habe ich doch die 
tatsächliche verstrichene Zeit und in LabView hätte ich ja die 
Verzögerungen der Übertragungen einberechnet, oder?

Ist es sinnvoller die Zeiten mittels Input-Capture-Eingang und dem 
erzeugten Interrupt zu messen und diese dann seriell mit an den PC zu 
übertragen, oder nehme ich einfach den Zeitstempel von LabView??
#2528925
Lesenswert?

Martin schrieb:
> und in LabView hätte ich ja die
> Verzögerungen der Übertragungen einberechnet, oder?

Plus die Zeit die Windows vertrödelt bis Labviwe mal wieder Rechenzeit 
kriegt
Plus die Zeit die Labview rumtrödelt bis es sich um die empfangenen 
Daten kümmert
Plus ....
Windows ist KEIN Echtzeitsystem
Serielle Übertragung über Interrupthandler liefern dier kein konstanten 
Zeitversatz

Wenn du die Zeit erfassen willst musst du das auf dem µC tun.
Gast #2530401
Lesenswert?

Die Zeitmessung realisiere ich nun über den µC. Jetzt wird die 
Zeitmessung in der Input-Capture-Interruptroutine durchgeführt und in 
meiner Hauptschleife mittels printf an den PC übertragen.

Das update der Daten vom Sensor erfolgt alle 417µs.

Verliere ich durch die printf-Verwendung zu viel Zeit? Gibt es eine 
bessere Möglichkeit als printf, oder ist der Zeitverlust kaum der Rede 
wert?
#2530427
Lesenswert?

Martin schrieb:
> Verliere ich durch die printf-Verwendung zu viel Zeit? Gibt es eine
> bessere Möglichkeit als printf, oder ist der Zeitverlust kaum der Rede
> wert?

Du kannst die Zeit auch (hängt vom Rest des Protokolls ab) binär zum PC 
übertragen und dort konvertieren. Dort hast du alle Zeit der Welt und 
Rechenpower.
Senden über serielle Schittstelle am besten asynchron mit einem 
Ringpuffer und den Interrupts der seriellen Schnittstelle.
Gast #2549237
Lesenswert?

Habe das Ganze hinbekommen mit der Zeitmessung. Ich bekomme jetzt aber 
immer abwechselnd zwei verschiedene Zeitwerte: 1,66 und 1,24ms (die 
Zeiten wechseln sich zufällig ab - es ist kein System erkennbar).

Sollten die Zeitwerte nicht annähernd gleich sein? Bringt mir die 
Verbindung zum PC diese zwei unterschiedlichen Zeiten zwischen den 
Messungen?

Es sind drei Messwerte, die nacheinander abgefragt werden. Jeder 
Messwert wird nachdem er abgefragt wurde sofort mittels printf an den PC 
übertragen.

also nur nochmal zum Verständnis:

-> 1. Messwert von Sensor einlesen
-> Messwert mittels printf an PC
-> 2. Messwert von Sensor einlesen
-> Messwert mittels printf an PC
-> 3. Messwert von Sensor einlesen
-> Messwert mittels printf an PC

Erst wenn der 3. Messwert aus dem Register gelesen wurde werden die 
Messwerte aktualisiert und damit wird die Zeitmarke mittels ICP 
gespeichert und ebenfalls mit printf übertragen.

Ich benutze Ubuntu mit VirtualBox und in der VirtualBox ein Windows 7 
mit Terminalprogramm. Sollte ich für eine genauere Zeitmessung lieber 
direkt mit Windows 7 arbeiten? Oder lieber ein Terminalprogramm im 
Ubuntu nutzen?
Gast #2549244
Lesenswert?

Achso noch eine Ergänzung:

Die Zeitwerte 1,66 und 1,24ms beziehen sich auf die Zeiten zwischen 
einer Messwert-Reihe

also

1.Messwert 2.Messwert 3.Messwert Zeit

1,24ms

1.Messwert 2.Messwert 3.Messwert Zeit

1,24ms

1.Messwert 2.Messwert 3.Messwert Zeit

1,24ms

1.Messwert 2.Messwert 3.Messwert Zeit

1,66ms

1.Messwert 2.Messwert 3.Messwert Zeit

1,66ms

1.Messwert 2.Messwert 3.Messwert Zeit

1,24ms

...
Gast #2549256
Lesenswert?

Martin schrieb:
> ..., es sollte schon genau sein:-)

Die Genauigkeit sagt nicht über die Anforderungen an den Jitter der 
Zeitnahme. Es kommt auch ganz entscheidend drauf an, wie lang deine zu 
messenden Intervalle sind. Wenn du es auf Nanosekunden genau wissen 
möchtest, kommst du wohl auch mit einem µC kaum hin und wirst 
zusätzliche Hardware bemühen müssen.

Martin schrieb:
> Habe das Ganze hinbekommen mit der Zeitmessung. Ich bekomme jetzt aber
> immer abwechselnd zwei verschiedene Zeitwerte: 1,66 und 1,24ms (die
> Zeiten wechseln sich zufällig ab - es ist kein System erkennbar).

Läuft's nun, oder nicht. Wenn nur die beiden Werte auftreten, hast du 
entweder einen Sensor, der nur diese beiden Intervalle liefert oder mit 
deiner Zeiterfassung stimmt irgendetwas nicht. Egal wie du das auf dem 
PC empfängst, sollten die Meßwerte nur von deinem Sensor abhängen ;-)
Gast #2549279
Lesenswert?

Martin schrieb:
> Die Zeitwerte 1,66 und 1,24ms beziehen sich auf die Zeiten zwischen
> einer Messwert-Reihe

Dann guck die mit dem Oszi deine Daten vom Sensor und die auf der 
seriellen Schnittstelle vom µC an. Vielleicht geht es per USB zum PC und 
da packt noch irgendjemand Pakete. Who knows?
#2549317
Lesenswert?

Hi,

misst Du jetzt also die Zeiten mit dem PC? Es wurde doch gesagt daß Du 
das vergessen kannst.
Ich tippe mal, daß die Serielle Schnittstelle nur etwa alle 0,42ms 
gepollt wird und somit sind die Werte zufällig beim 3. oder 4. Polling 
da.
Über längere Zeit dürften die Zeiten gemittelt aber stimmen, wenn Du 
weißt, daß das regelmässig ist.

Gruß,
Norbert
Gast #2549342
Lesenswert?

[Problem gelöst]

> also nur nochmal zum Verständnis:

> -> 1. Messwert von Sensor einlesen
> -> Messwert mittels printf an PC
> -> 2. Messwert von Sensor einlesen
> -> Messwert mittels printf an PC
> -> 3. Messwert von Sensor einlesen
> -> Messwert mittels printf an PC

Ich habe das Programm jetzt nochmal umgeschrieben:

-> 1. Messwert von Sensor einlesen
-> speichern in tempX
-> 2. Messwert von Sensor einlesen
-> speichern in tempY
-> 3. Messwert von Sensor einlesen
-> speichern in tempZ
-> alle drei Messwerte + Zeit senden mittels printf

Jetzt habe ich konstant 1,47ms.

Danke an alle für eure Antworten und eure Mühe:-)

Gruß Martin

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