Pages: 1 [2] 3   Go Down
Author Topic: Nahezu gleiche zeitungenauigkeit auf zwei verschiedenen Arduinos  (Read 2349 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 1
Posts: 99
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

na also parts-per-million hätt ich schon gewusst, nur was das mit ner Uhr zu tun hat, war mir nicht klar. Normalerweise wird dieser Ausdruck zum Messen von Konzentrationen benutzt.

Und nun zu deinem Denkfehler: Du hast keine Zeitmesseinrichtung mit ausreichender Genauigkeit - Der Systemtakt ist nicht für Echtzeitaufgaben zu gebrauchen, da (und ich wiederhole mich) verschiedene Faktoren eine Verzögerung der Programmausführung zur folge haben.

hm... ok... dann versuch ich mich mal weiter daran und werde gegebenenfalls noch versuchen mit korrekturwerten zu arbeiten

und ppm wird eben nicht nur im chemielabor genutzt smiley-wink
Logged

Offline Offline
God Member
*****
Karma: 9
Posts: 721
42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Also gut  smiley-razz - wenn du stur auf eine RTC verzichten willst, musst du deine Uhr eichen.

Dazu benötigst du eine externe Quelle, die über eine Echtzeituhr verfügt - wie etwa einen Computer.

Wenn du einen Button benutzt, um per knopfdruck eine Verbindung zwischen Computer und Arduino herzustellen, kannst du die (Arduino-)Systemzeit mit der Echtzeit abgleichen und hast deann den Kompensationsfaktor. Eigentlich ähnlich wie in deinem Processingsketch. Diese Eichung musst du allerdings mehrmals über einen bestimmten Zeitraum machen um eine Schnittmenge zu bekommen.

Diese Zahl würde ich anschließend im EEPROM des Arduinos ablegen um bei bedarf darauf zurückzugreifen.
Logged


Offline Offline
Jr. Member
**
Karma: 1
Posts: 99
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ja, die idee hatte ich auch schon und werde das wohl auch so verfolgen... das mit der statistik bekomme ich schon hin, das physikstudium soll ja auch nicht ganz für umsonst gewesen sein smiley-wink
Logged

Bavaria Germany
Offline Offline
Full Member
***
Karma: 0
Posts: 121
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wie MarcusW bereits deutlich ausgedrückt hat, wirst Du so nie zu einer sauberen Lösung kommen.

Selbst wenn Du durch softwaremässige Korrekturen eine ausreichende Genauigkeit erreichen solltest, sind diese spätestens bei späteren Programmerweiterungen bzw. Änderungen schnell wieder hinfällig, die Ungenauigkeit nimmt wieder zu.

Hardwaremässig würde der Atmega168/328 für solche Aufgaben den Anschluß eines zweiten Quarzes vorsehen, was vom Arduino aber nicht unterstützt wird. Deshalb ist auch die Lösung, einen Uhren- bzw. dcf77-Baustein zu verwenden, eigentlich unvermeidlich - selbst wenn man voraussetzen kann, daß die verwendete Timerbibliothek bereits optimal programmiert ist.

Glaub' uns - diese Erfahrung wirst Du früher oder später machen. smiley-wink

Gruß. mmi.
Logged

Offline Offline
Sr. Member
****
Karma: 1
Posts: 260
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Vielleicht ein genaueres Quarz an einen Arduino-Pin hängen und den mit einem Interrupt versehen?
Logged

Offline Offline
Jr. Member
**
Karma: 1
Posts: 99
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Vielleicht ein genaueres Quarz an einen Arduino-Pin hängen und den mit einem Interrupt versehen?

es scheint ja nicht an der genauigkeit des quarz selbst zu hängen, aber ja, ein zweiter quarz wäre natürlich ein traum, hat jemand einen kurzen workaround wie sich das bewerkstelligen ließe?
Logged

Bavaria Germany
Offline Offline
Full Member
***
Karma: 0
Posts: 121
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Die hardwaremässige Erweiterung mit dem Quarz (und 2x C) ist relativ einfach, die Problematik liegt bei der Software, insbesondere der Nutzung eines der atmega-spezifischen Hardwaretimer, um das normale processing nicht mit übermässig vielen Interrupts auszubremsen. Dazu kommen aber evtl. Konflikte mit anderen Arduino libs, die diese timer benötigen, etc.

Das Fazit bleibt: Eine saubere und effiziente Lösung ist ein RTC Modul. smiley-wink
Logged

Peoples Republic of Cantabrigia
Offline Offline
God Member
*****
Karma: 6
Posts: 691
Arduino happiness
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Auf eine RTC fuer einen Uhr-gebrauch zu verzichten, ist mir nicht verstaendlich. Die Kosten fuer eine DS3231 sind so niedrig und die DS3231 ist so genau... und vergleichsweise preiswerte Module wie die Chronodot, unter anderen, machen das Tuefteln einfach.

Aber fuer diese Anwendung ist es vielleicht noch wichtiger, dass die DS3231 einen programmierbaren SQW output hat, mit dem die Zeit-ablauefe zwischen zwei Arduinos genaustens geeicht werden koennen (per interrupt, z.B.). Ich benutzte meine DS3231 z.B. um zwei Arduinos fuer Strom-messungen zu koordinieren. Funktionierte perfekt.

Aber gut, jeder muss seine Zeit / Geld Entscheidungen selber machen...
« Last Edit: March 30, 2012, 09:42:36 am by Constantin » Logged

0
Offline Offline
Faraday Member
**
Karma: 19
Posts: 3420
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
ich halte es aber eigentlich für sinnlos eine zweite zeitmessvorrichtung zu integrieren, wenn ich eigentlich schon eine, in form des verbauten quarzes (mit für mich ausreichender genauigkeit) habe und das ganze einfach nur genau eine uhr darstellen soll.

Markus W hat mit seinen Anmerkungen schon recht. Wenn Du Pech hast liegst Du mal locker 100ppm nebendran. Weiterhin ist die Abweichung in der Regel auch nicht stabil sondern hängt auch von der Temperatur ab. RTCs sind in der Regel temperaturkompensiert.

Dann ist da noch das Problem, daß Du unter Umständen auch mal Interrupts sperrt und dann hauen millis() und andere eingebaute Funktionen immer nebendran. Die Erkenntnis ist:

Entweder man kennt sich ganz außerordentlich gut aus (dann muß man aber nicht mehr hier fragen), oder man nimmt einen RTC. Wenn man sich super auskennt und nicht gerade für eine Serie entwickelt, dann nimmt man auch einen RTC. Ohne RTC arbeitet man eigentlich nur dann wenn man so gut wie gar keine Genauigkeit braucht oder wenn man so hohe Stückzahlen produziert, daß sich der zusätzliche Entwicklungsaufwand lohnt.
« Last Edit: April 02, 2012, 10:27:30 am by Udo Klein » Logged

Check out my experiments http://blog.blinkenlight.net

Deutschland, Ruhrpott
Offline Offline
Jr. Member
**
Karma: 1
Posts: 78
Arduino rocks Amiga rocks RC Truck rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

kann mich meinen Vorrednern nur anschließen was auch noch zu erwähnen wäre . Bei Temperaturschwankungen wird es zusätzlich auch noch Abweichungen ohne Ende geben. Deshalb wäre noch zu erwähnen das die DS3231 zusätzlich über eine Temperatur Compensation verfügt.
Logged

Gruesse
big-maec

Peoples Republic of Cantabrigia
Offline Offline
God Member
*****
Karma: 6
Posts: 691
Arduino happiness
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bei Temperaturschwankungen wird es zusätzlich auch noch Abweichungen ohne Ende geben. Deshalb wäre noch zu erwähnen das die DS3231 zusätzlich über eine Temperatur Compensation verfügt.

Sehr richtig, und auch einer der Gruende, warum ich mittlerweile nur die DS3231 auf meinen Platinen fuer Zeitaufgaben einsetze. Auch schoen ist, wie einfach die DS321 zu programmieren ist. Nur zwei Leitungen werden  fuer den I2C bus gebraucht, dazu kommen noch zwei 2k2 Wiederstaende und ein 0.1uF Kondensator, und das Ding laeuft.
Logged

0
Offline Offline
Faraday Member
**
Karma: 19
Posts: 3420
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Nachtrag: oft braucht man nicht wirklich so hohe Genauigkeit wie man meint zu brauchen. Also immer erst nachdenken. Auf der anderen Seite will man oft hohe Genauigkeit nicht weil man sie braucht sondern weil man das einfach ***haben will***.

Wenn sehr genau ausreicht, dann ist DS3231 eine sehr gute Wahl.

Wenn ***haben will*** der Punkt ist, dann ist meine Empfehlung "Trimble Thunderbolt" smiley-wink Die Dinger sind bei Ebay gebraucht sehr günstig zu bekommen. Wem das nicht reicht, der hat ein echtes Problem smiley-wink
Logged

Check out my experiments http://blog.blinkenlight.net

Offline Offline
Jr. Member
**
Karma: 1
Posts: 99
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

also zum einen: genauigkeit und "haben will" ist so ne sache, wenn meine uhr in einem tag um mintuen gestellt werden muss dann ist für diesen anwendungsfall eindeutig zu ungenau smiley-wink. was die temperaturabweichungen angeht: man bekommt bei bekannten elektronikversandhäusern quarze, die mit +-30ppm ungenauigkeit +-30ppm thermische ungenauigkeit spezifiziert sind, diese liegen bei mir auch rum, was mich zum anderen führt: nachdem ich durch softwareseitige kompensation auf eine ungenauigkeit von unter 40ppm gekommen bin (das macht unter 4 sekunden pro tag) habe ich das ganze zu weiteren testzwecken komplett aufs breadboard übertragen, also mit batteriebetriebenem ATmega-chip, eigener quarz (16MHz +-30ppm +-30ppm thermisch) etc. und siehe da, es läuft in etwa um die softwareseitig kompensierte zeit zu schnell, sprich: es würde ohne diese exakt (im rahmen von noch zu bestimmenden ungenauigkeiten) laufen, sofern man von exaktheit reden kann, naja, immerhin um größenordnungen genauer als die "original"-arduinos

korrigiert mich wenn ich falsch liege, aber das lässt doch vermuten das einfach nur die quarz-frequenz meiner beiden arduinos einen gehörigen offset hat. ist eigentlich irgendwo dokumentiert, was für bauteile in da italien verwendet werden?
Logged

0
Offline Offline
Faraday Member
**
Karma: 19
Posts: 3420
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Nein ist nicht dokumentiert. Und die spezifizierten Toleranzen gelten nur wenn Du auch die passenden Kapazitäten verwendest. Da dort aber von Picofarad ausgegangen wird musst Du auch die Kapazitäten von Platinen / Breadboards / Pins mit berücksichtigen. Und ich würde wetten, daß Deine Softwarekompensation keine Temperaturkompensation beinhaltet. Früher oder später landen alle bei RTCs. Mal sehen wie lange Du dafür brauchst smiley-wink
Logged

Check out my experiments http://blog.blinkenlight.net

Offline Offline
Jr. Member
**
Karma: 1
Posts: 99
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

also aus reinem eigeninteresse werde ich (vermutlich erst nächsten monat) mal die temperaturabweichung nachmessen, aber ich vertraue da der herstellerangabe erstmal... ansonsten halte ich es für... naja... unnötig genau eine temperaturkompensation (die sicher mit etwas messaufwand auch softwareseitig machbar wäre) für eine zimmeruhr anzustreben, die 99% ihrer zeit bei zimmertemperatur betrieben wird... für spätere projekte behalte ich das klar im hinterkopf, aber bei diesem projekt, was einfach nur eine uhr mit sich selbst als selbstzweck sein soll, halte ich es immernoch für unpassend... und da ich gerne etwas rumtüftele und die zeit nicht so arg drängt sind ein paar kompensationsrechnungen für mich nicht so das problem... auf dauer würde mich nur interessieren ob es nicht einfach wirklich an dem arduino-quarz liegt... bei gelegenheit werde ich den vielleicht mal auslöten und ersetzen


Nein ist nicht dokumentiert. Und die spezifizierten Toleranzen gelten nur wenn Du auch die passenden Kapazitäten verwendest. Da dort aber von Picofarad ausgegangen wird musst Du auch die Kapazitäten von Platinen / Breadboards / Pins mit berücksichtigen. Und ich würde wetten, daß Deine Softwarekompensation keine Temperaturkompensation beinhaltet. Früher oder später landen alle bei RTCs. Mal sehen wie lange Du dafür brauchst smiley-wink
Logged

Pages: 1 [2] 3   Go Up
Jump to: