Einen schönen guten Abend, ich habe in den letzten drei Wochen 25 Datalogger gebaut, die für Langzeitmessungen konzipiert sind. Ein wichtiger Punkt war für mich, dass die Zeit möglichst genau abgebildet wird. Peter Dannegger hat einen schönen Artikel dazu verfasst. Ausgehend davon habe ich mit C# ein Tool gebaut, dass das Zeitstoppen und rumrechnen für mich erledigt. Nichts besonderes, einfach nur für "bequeme" Leute ;) Wollte es dem einen oder anderen aber dennoch nicht vorenthalten. Vielleicht wird es ja genutzt oder es findet sich ein Fehler in der Firmware/PC-Anwendung. Bin für jede Kritik/Fehlermeldung dankbar. Das Programm stellt über eine serielle Schnittstelle eine Verbindung zu einem Mikrocontroller her, der über eine bestimmte Firmware verfügen muss. Diese Firmware wird nur für die Oszillatorkalibrierung benötigt. Das Programm kann eine neue Kalibrierung starten und die aktuell laufende Kalibrierung auswerten. Für eine genaue Messung ist es sinnvoll, nach Start einer neuen Kalibrierung diese für mindestens 24 Stunden laufen zu lassen. Je länger die Dauer, desto genauer ist hinterher das Ergebnis. Für den Start wird die interne Uhr des Mikrocontrollers mit dem PC synchronisiert. Wir gehen davon aus, dass die Uhr auf dem PC “genau” ist. Zu einem beliebigen Zeitpunkt kann eine Auswertung gestartet werden. Der PC holt sich die Informationen über die interne Uhr des Mikrocontrollers und berechnet eine Abweichung. Anhand der Abweichung und der Dauer der Messung wird eine Oszillatorfrequenz vorgeschlagen, die von nun an in der Software des Mikrocontrollers benutzt werden kann. Für eine genaue Messung, kann dieser Vorgang nach Einprogrammierung der neuen Frequenz mehrmals wiederholt werden. Ganz einfach und ohne Rechenaufwand und Zeitstoppen. Für eine genaue Messung sollten die Randbedingungen des Mikrocontrollers möglichst nicht verändert werden, sprich: Nach Start der Messung ist es nicht sinnvoll den Mikrocontroller in den Kühlschrank zu legen und/oder diesen am Nachmittag bei sonnigem Wetter mit in den Park zu nehmen, die Frequenz des Taktgenerators ist nämlich temperaturabhängig. Aktuelle Version: 1.01 Anmerkung: In der Datei OszillatorKalibrierung.h sind bei weitem nicht alle Mikrocontroller aufgelistet. Nach dem in der Datei ersichtlichen Schema können weitere hinzugefügt werden. Ich wäre jedem sehr dankbar, wenn er mir seine modifizierte Header Datei mit neuen Controllern zuschickt. Ich werde die dann nach und nach hinzufügen.
Das klappt aber nur, wenn du die PC-Uhr mittels NTP ziehen lässt. Sonst hast du Abweichungen im Bereich >>>0.1 % drin.
Der PC hat sowas von einer billigen Uhr. Ohne taegliche Synchronisation mit einem server ist da leider gar nichts. Irgend ein RTC zB DS1307 mit einem 32kHz 10ppm Quartz bringt das auch. Ich wuerd mir diese muehe nicht machen mit einem PC zu synchronisieren. Die interne Uhr des AVR ? Soll das der RC Oszillator sein ? Falls ja... gut gemeint, aber leider nicht so toll. Ich hab da mal die Spannungs- und Temperaturabhaengigkeit gemessen... aeh. ja. Wenn man eine Zeit haben moechte, die man Zeit nennen darf, sollte man entweder einen 32kHz Quarz anhaengen, oder eine RTC verwenden. Was man machen kann, ist den internen RC Oszillator auf den 32kHz zu synchronisieren.
Ich nehme sehr gerne die RTC-Chips von Micro Crystal (z.B. bei Reichelt) oder den DS3231 von Maxim. Das spart jede Menge umständliche Software und ist sehr viel genauer als jede Software-RTC.
Ist theoretisch ne nette Idee bzw. Umsetzung, gefällt mir soweit. Die Sache ist jedoch: Wenn es schon um die "genaue" Sekunde geht oder gehen soll, dann müsstest du auch die PC-seitige Programmverarbeitung berücksichtigen sowie die anschließende (serielle) Kommunikation. Die Dauer der Kommunikation/en selbst liese sich hinsichtlich ihrer Laufzeit evtl. ja noch recht eindeutig bestimmen. Bzgl. deiner PC-seitigen SW (hier wohl Windows, C#-Programm) hat du wohl keine garantierten Laufzeiten. Insofern ist die "genaue" Sekunde schon - wenn auch sicherlich nur um wenige ms nachgehend- nicht mehr SO genau.
Wieland schrieb: > Das klappt aber nur, wenn du die PC-Uhr mittels NTP ziehen lässt. Sonst > hast du Abweichungen im Bereich >>>0.1 % drin. Guter Tipp. Daran habe ich auch schon einmal gedacht. Ich habe eben einen neuen Testlauf gestartet, in dem ich vorher die Systemuhr manuell synchronisiert habe. Bei der Auswertung muss ich das vorher nur noch einmal machen. Mal sehen, ob sich da was ändert. ah. schrieb: > Die interne Uhr des AVR ? Soll das der RC Oszillator sein ? Falls ja... > gut gemeint, aber leider nicht so toll. Ich hab da mal die Spannungs- > und Temperaturabhaengigkeit gemessen... aeh. ja. Nene, ich meinte damit die interne "Software-Uhr". Genutzt habe ich mehrere Quartze und Oszillatoren mit unterschiedlichen Frequenzen. > Der PC hat sowas von einer billigen Uhr. Ohne taegliche Synchronisation > mit einem server ist da leider gar nichts. Irgend ein RTC zB DS1307 mit > einem 32kHz 10ppm Quartz bringt das auch. Ich wuerd mir diese muehe > nicht machen mit einem PC zu synchronisieren. Ok, könnte man mit obiger Vorgehensweise eliminieren. Und nocheinmal: Es geht nicht darum, eine Uhr auf dem Controller mit dem PC zu synchronisieren. Es ging mir dabei zunächst einmal um die Bestimmung der Taktfrequenz. Ich weiß nicht, wie gut das mit einem Oszilloskop geht, meins ist leider schon länger defekt. tt4u schrieb: > Ich nehme sehr gerne die RTC-Chips von Micro Crystal (z.B. bei Reichelt) > oder den DS3231 von Maxim. Ich wollte zum einen gerne ohne zusätzliche Bauteile auskommen. Zum anderen wollte ich sehen, wie gut das auch mit dem Quartz/Oszillator geht. Sesk K. schrieb: > Die Sache ist jedoch: Wenn es schon um die "genaue" Sekunde geht oder > gehen soll, dann müsstest du auch die PC-seitige Programmverarbeitung > berücksichtigen sowie die anschließende (serielle) Kommunikation. Damit hast Du wohl recht. Aber wie oben gesagt, ging es mir vielmehr darum, einen genauen Sekundentakt hinzubekommen. Ob die Uhr nun eine Sekunde vor bzw nach geht ist mir erst einmal egal. Wichtig ist mir nur, dass sie nach Möglichkeit auch noch nach einem Monat bloß eine Sekunde vor bzw. nach geht. Die Laufzeiten der Verbindung etc. sind ja konstant. Vom C# Programm eher nicht, aber da sage ich mal, dass die Laufzeitunterschiede einzelner Programmabläufe vernachlässigbar klein sind. Da würde vlt eine Temperaturänderung von 1°C mehr bewirken.
> Wichtig ist mir nur, dass sie nach Möglichkeit auch noch nach einem Monat > bloß eine Sekunde vor bzw. nach geht. Das sind unter 0,4ppm, ein Quarz hat 20-50ppm, die o.g. RTC haben 2-5ppm
@Tarek T. (tarek_t) >synchronisieren. Es ging mir dabei zunächst einmal um die Bestimmung der >Taktfrequenz. Ich weiß nicht, wie gut das mit einem Oszilloskop geht, Nicht gut, denn so ein Oszi hat keine sonderlich genaue Zeitbasis, so um die 100ppm, vielleicht etwas weniger. Man braucht einen guten Frequenzzähler. >Sekunde vor bzw nach geht ist mir erst einmal egal. Wichtig ist mir nur, >dass sie nach Möglichkeit auch noch nach einem Monat bloß eine Sekunde >vor bzw. nach geht. Diese 0,4ppm muss man mit der MEthode erstmal erreichen. NACHWEISLICH! > Die Laufzeiten der Verbindung etc. sind ja konstant. Gewagte Annahme. >Vom C# Programm eher nicht, aber da sage ich mal, dass die >Laufzeitunterschiede einzelner Programmabläufe vernachlässigbar klein >sind. Da würde vlt eine Temperaturänderung von 1°C mehr bewirken. Hast du das mal überschlagen? Und auch REAL nachgemessen? Klingt eher nach Wunschdenken.
Tarek T. schrieb: > ich habe in den letzten drei Wochen 25 Datalogger gebaut, die... ...sich in ihrer Uhrzeit über nen längeren Zeitraum möglichst wenig irren sollen. Dein Anliegen mit irgendwelchen Programmen im PC und sonstwo versteh ich nicht. Wozu bloß dieser Zirkus??? Gib jedem deiner 25 Datenlogger nen ordentlichen TCXO, gleiche die Dinger mit nem ausreichend genauen Frequenzzähler ab und das Problem ist erledigt. Falls das mit dem TCXO dir zu teuer ist, dann miß halt die Frequenz deines Quarzoszllators an dem verbauten uC aus und berücksichtige sie im Programm. Das braucht keine Stunden, sondern ist in ein paar Minuten gemacht. Aber nen TCXO halte ich in jedm Falle für besser. Gibt's bei Ebay für wenig Geld. W.S.
Der ganze Abgleich beruht auf der Annahme, dass der Quarz/Oszillator einen konstanten Fehler hat. Ist das wirklich so? Ich befürchte eher nicht..... Brauchbare TCXO mit 0.5ppm gibts bei Digikey für 5.-, z.B. http://www.digikey.de/product-detail/de/KT2520F16369ACW28TAK/478-4825-1-ND/1833888.
EFA schrieb: > Der ganze Abgleich beruht auf der Annahme, dass der > Quarz/Oszillator > einen konstanten Fehler hat. Ist das wirklich so? Ich befürchte eher > nicht..... Ne das stimmt, da hast Du Recht. Alleine schon Temperaturunterschiede sorgen dafür, dass die Frequenz abweicht. Ich denke auch, dass einige meine ursprüngliche Idee (die durch Fertigungstoleranzen abweichende Frequenz einschätzen zu können) zu kritisch betrachten. Natürlich ist das nicht die perfekte Sekunde! Wie eingangs erwähnt beruht diese Idee auch auf den Artikel AVR - Die genaue Sekunde / RTC, bei dem es auch nicht um die perfekte Sekunde geht. Finde es auch etwas schade, dass die Bereitstellung meiner Idee/Lösung und des Codes/Programms als "Zirkus" bezeichnet wird.
@Tarek (Gast) >Ich denke auch, dass einige meine ursprüngliche Idee (die durch >Fertigungstoleranzen abweichende Frequenz einschätzen zu können) zu >kritisch betrachten. Liegt in der Natur der Sache. So ziemlich jede Idee wir hier erst einmal zerrissen ;-) >Finde es auch etwas schade, dass die Bereitstellung meiner Idee/Lösung >und des Codes/Programms als "Zirkus" bezeichnet wird. Nimm's nicht persönlich, das ist hier normal. Deine Idee ist an sich gut, aber inhaltliche Diskussion und Kritik ist so normal wie notwendig. Das Geplapper rundherum muss man ignorieren. Ich hab mal was ähnlichs gemacht. Automatischer Abgleich des 32k Uhrenquarzes mittels DCF77 über 24h. Dort wurde DCF77 mittels 128 Hz Timer Takt abgetastet, macht über 24h einen maximalen Abtastfehler von 7,8ms / 24h = 0,09ppm, WENN der DCF77 Empfänger keinerlei Fehler reinbringt. Ich tippe real auf vielleicht 0,5-1ppm Fehler. Für den Zweck war es ausreichend. Als Experiment war das sehr interessant, praktisch würde ich einen einfache Frequenzzähler organsisieren und dort einen guten TCXO oder gar OCXO als Referenz dranklemmen. Damit kalibriert man die Quarze in Sekunden.
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.