Bin sehr gespannt wann du selber auf den Trichter kommst, dass jeden Pendelausschlag zu loggen die bessere Methode ist.
Das wäre nur sinnvoll, wenn man den Zeitpunkt des Pendeldurchgangs 300 mal so genau messen könnte.
|
Anzeige
|
Datenlogger Pendeluhr
Das wäre nur sinnvoll, wenn man den Zeitpunkt des Pendeldurchgangs 300 mal so genau messen könnte.
Die Frage ist, wann die Knalltüte auf den Trichter kommt, daß sie nichts zum Thema beiträgt. Die Daten dieser Nacht: Aktuell ist noch ein recht konstanter Nachgang von Muss ich mal besser regulieren. Das ist bei so einer Pendeluhr nicht ganz einfach. Grüße Bernd :
Bearbeitet durch User
gegen 01:10 Uhr ist der Counter für die Mikrosekunden übergelaufen. :
Bearbeitet durch User
Wo kommt dieser merkwürdiger Wert her, bei dem der Zähler überläuft? Ich denke, das wird vom Systemzähler der Mikrosekunden zählt abgeleitet sein. Und der läuft irgendwann über. In Micropython gibt es dafür die Funktion time.ticks_diff(t1, t2) welche die Differenz auch dann richtig ausrechnet, wenn der Zähler übergelaufen ist. Ich verstehe nichts von Arduino-Sprech (C++) und weiss nicht, ob es das da auch gibt. https://docs.micropython.org/en/latest/library/time.html#time.ticks_diff :
Bearbeitet durch User
Ein Mikrosekundenzähler kann es nicht sein, der da überläuft. Dieser Überlauf muss durch die Software entstehen. Ein binärer Zähler läuft nicht bei 1.000.000 über.
Ich sehe aus den Daten zwischen 19h und 4h, d.h. in dem Bereich mit konstantem Gang, einen zehnfach kleineren Gangfehler von 4,3 Tausenstel Sekunden in 5 Minuten (also 5,1cs/h oder 1,23s/d). :
Bearbeitet durch User
Ein Systemzähler (also Hardware) kann sehr wohl überlaufen. 1 Mio ist natürlich zu wenig für Mikrosekunden, deswegen schrieb ich ja auch "abgeleitet", also vermutlich eine Differenz zwischen 2 Systemticks.
Was ist an dem Überlauf so schwer zu verstehen? Da wird der Abstand zwischen 1PPS Impuls und dem Pendeldurchgang berechnet, der kann maximal 1 Sekunde groß sein. Ein kurzer Blick in den Source Code genügt. Wenn die Pendelschwingung nicht exakt zum 1PPS Impuls passt gibt es einen Über-/Unterlauf.
Natürlich kann der Überlaufen, aber nicht bei 1.000.000.
Einen Überlauf bei einer Differenz korrekt zu berücksichtigen, ist nun wirklich kein Hexenwerk. Bei echten Überläufen von Binärzählern müsste man sogar genau gar nicht eingreifen, um korrekte Differenzen zu erhalten.
Es ist also gar kein Zählerüberlauf - gut beobachtet. :
Bearbeitet durch User
Im Sourcecode finde ich folgende Zeilen:
und micros() ist eine Systemzeit, die überlaufen kann.
micros() Gibt die Anzahl der Mikrosekunden zurück, die seit dem Start des aktuellen Programms auf dem Arduino-Board vergangen sind. Dieser Wert läuft nach etwa 70 Minuten über (springt zurück auf null). Diese Zeitfunktion bietet verschiedene Auflösungen, die mit unterschiedlichen Arduino-Produktfamilien kompatibel sind. Syntax Du kannst ja sogar abschreiben und einen Übersetzer bedienen: TOLL! :
Bearbeitet durch User
Bitte nicht aufregen. Das Endergebnis meiner Bemühungen sieht später so aus: Grüße Bernd
Du kannst aufhören, zu suchen. :
Bearbeitet durch User
Der Datenlogger hat den Sekundenimpuls über seinen eingebauten In der Zwischenzeit wird wohl auf eine interne Uhr zurückgegriffen. Grüße Bernd
Eben - und die interne Uhr ist bestenfalls nur so genau, wie der Quarz bzw. der Resonator auf dem µC-Board, hat aber bestimmt nicht Atomuhrgenauigkeit, wie der 1PPS-Puls des GPS.
Damit werde ich leben müssen. Es geht ja eigentlich um Messungen über Wochen/ Monate. Messungen in kurzen Intervallen sind für gewisse Einstell- Grüße Bernd :
Bearbeitet durch User
Und da kommt ein Sprung von nahezu 1.000.000 Mikrosekunden vor, also 1 Sekunde? Schau Dir mal die Werte und die Grafik an https://www.mikrocontroller.net/attachment/706866/DATENLOG_13.10.txt die Micros beginnen um 17:17 Uhr bei 598086, diese steigen kontinuierlich nahzu linear auf nahe zu 10^6 an und fallen um ca 01:10 Uhr auf nahezu 0, wie ist denn das erklärbar? Da muss ein Überlauf o.ä. die Ursache sein zumal Arduino in seiner Spezifikation selbst angibt, dass micros() überlaufen kann. :
Bearbeitet durch User
Nu mecker nich', dass stammt von einer KI. Da muss es so richtig sein. ;-) Hätte man elegant im µC lösen können, so muss man in der Nachbearbeitung auf die jeweilige Differenz zum Vorwert schauen. Ist sie größer als 500ms, dann eine 1e6µs subtrahieren. Und da es ja auch um den 0 Wert fluktuieren kann, dann auch noch den anderen Fall testen und gegebenenfalls 1e6µs addieren. Ganz einfach und gradlinig. Ich bin doch "nur" der Mechaniker. Das Teil macht das, was ich brauche. Eine bessere Version ist Grüße Bernd
Ne, ne, lass mal. Ich baue das morgen in die Import Routine ein.
Ja, in einer Sekunde tickt der Mikrosekundenzähler des Arduino etwas 1.000.000 mal.
Schrieb ich doch oben.
Dass die Wert kontinuierlich steigen, liegt daran, dass die Uhr von Bernd aktuell noch etwas zu langsam läuft, eben um die besagten 4ms pro 5 Minuten.
Nein, der Sprung in den Mikrosekunden-Messdaten tritt immer dann auf, wenn der 1PPS-Puls das Pendel überholt, d.h. wenn zwischen zwei Pendeldurchgängen zwei 1PPS-Pulse liegen. Mit der micros()-Funktion hat das nichts zu tun.
Nein, das ist falsch. Du weißt gar nicht, wieviel Mikrosekunden-Ticks innerhalb einer Sekunde kommen. Alles, was man ohne Messung weiß, ist, dass es im Rahmen der Quarz-/Resonatorgenauigkeit UNGEFÄHR 1E6 sind. Wenn du stur 1e6µs subtrahierst, erzeugst du einen Ausreißer, weil du die genaue Zahl nicht kennst. @Bernd Oder man ignoriert den Wert einfach. Für die Statistik spielt ein einzelner Wert keine Rolle. :
Bearbeitet durch User
Ich rede von der Differenz. Die ist 0 wenn die Uhr präzise geht. Ansonsten eine geringe µs Abweichung im positiven oder negativen Bereich. Wenn also die Differenz mehr als +/-500ms pro Sekunde beträgt, darf man getrost von einem wrap around ausgehen. :
Bearbeitet durch User
Die Uhr geht aber nicht präzise, sondern zu langsam. Deshalb liegt zwischen zwei Pendeldurchgängen mehr als eine Sekunde, so dass sich die 1PPS-Pulse gegenüber dem Durchgang verschieben. Dadurch kann es vorkommen, dass zwischen zwei Pendeldurchgängen mehr als ein 1PPS-Puls liegt. Das ist gegen 01:10 der Fall.
Da wrapt nichts around. Es wird einfach die zeitliche Differenz zum falschen 1PPS-Puls gemessen. Die Anzahl der Mikrosekunden-Ticks zwischen zwei 1PPS-Pulsen kennt man leider nur ungefähr, so das eine Korrektur um 1000000 Ticks etwas willkürlich wäre. :
Bearbeitet durch User
Ja Rainer, das ist schon seltsam. Denn hier funktioniert es bereits.
Was findest du seltsam und was ist "es"? :
Bearbeitet durch User
Antwort schreiben |
Anzeige
|