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??
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.
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.
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.
Ok danke euch beiden:-) Ihr habt recht, es sollte schon genau sein:-)
Εrnst B✶ schrieb: > wenn du es auf die Nanosekunde genau > brauchst Na ja Faktor 100 daneben aber im Prinzip richtig, wie schon gesagt.
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?
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.
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.
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?
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.
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 ...
Evtl. liegt es an der Anzahl stellen der Werte. Mehr Stellen benötigen mehr Zeit für die Übertragung.
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 ;-)
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?
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
[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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.