Forum: Mikrocontroller und Digitale Elektronik Zeitmessung in µC oder im PC


von Martin (Gast)


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??

von Karl H. (kbuchegg)


Lesenswert?

Wenn du schon mal gesehen hast, wie Windows teilweise 10 bis 15 Sekunden 
lang nicht bedienbar ist, weil es entschieden hat erst mal den 
Hauptspeicher ein wenig aufzuräumen, dann erübrigt sich wohl die Frage.

von Εrnst B. (ernst)


Lesenswert?

Hängt davon ab, was du erreichen willst.

Überspitzt ausgedrückt:
Wenn du nur wissen willst, ob die Messung alle 15 Minuten oder jede 
Stunde fertig wird, nimm den PC, wenn du es auf die Nanosekunde genau 
brauchst, den µC.

von Udo S. (urschmitt)


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.

von Martin (Gast)


Lesenswert?

Ok danke euch beiden:-) Ihr habt recht, es sollte schon genau sein:-)

von Udo S. (urschmitt)


Lesenswert?

Εrnst B✶ schrieb:
> wenn du es auf die Nanosekunde genau
> brauchst
Na ja Faktor 100 daneben aber im Prinzip richtig, wie schon gesagt.

von Martin (Gast)


Lesenswert?

Danke Udo!! :-)

von Martin (Gast)


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?

von Karl H. (kbuchegg)


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?

Natürlich verlierst du Zeit. Der Löwenanteil wird aber wahrscheinlich 
durch die Übertragung selbst verursacht. Die geht nun mal nicht in 
0-Zeit.

von Udo S. (urschmitt)


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.

von Martin (Gast)


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?

von Karl H. (kbuchegg)


Lesenswert?

Martin schrieb:

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

Wenn du das µC Programm richtig geschrieben hast nicht.

Also überprüf mal deine Mess-Funktionalität im µC. Irgendwo da wirst du 
einen Denkfehler haben.

von Martin (Gast)


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

...

von Peter R. (peterfido)


Lesenswert?

Evtl. liegt es an der Anzahl stellen der Werte. Mehr Stellen benötigen 
mehr Zeit für die Übertragung.

von Wolfgang (Gast)


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 ;-)

von Matthias (Gast)


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?

von Norbert S. (norberts)


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

von Martin (Gast)


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

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.