Go Down

Topic: millis() genau genug für eine uhr? (Read 5995 times) previous topic - next topic

foo_mep

hallo,

ich beschäftige mich jetzt das erste mal mit dem arduino und habe ein frage.
ich habe ein uhr, bzw. nur den motor (nebenuhr). die würde ich gerne mit einem rechecksignal jede minute für 600ms versorgen.
dafür habe ich ein kleines programm geschrieben und nutze millis() um die minute zu errechnen.
da auf dem arduino uno board ein quartz drauf ist, dachte ich dass der tackt schon stimmt. leider geht die uhr jetzt nach 19h schon 97s nach.

sind die millis() so genau, dass man sie für eine uhr verwenden kann (vlt is was in meinem code falsch) oder sollte ich einen externen taktgeber nutzen?

stundenblume

Hi Thomas,

ich würde diese Library verwenden. Dort gibt es als Beispiel eine "Software Realt Time Clock".


Gruß

Sebastian
Libraries:
  - multiCameraIrControl [V1.6]
  -

foo_mep

das würde aber heißen, ich bräuchte noch etwas extra.
kann ich mich also auf den takt, den der arduino gibt nicht verlassen?

stundenblume

Hi,

nein, Du benötigst nichts extra. Es ist ja eine Softwarelösung. Nur diese Library einbinden und und die Soft RTC benutzen.


Sebastian
Libraries:
  - multiCameraIrControl [V1.6]
  -

foo_mep

ahh ok danke.
leider habe ich vom arduino und programmieren nicht so viel ahnung. ich habe mir auch nin kumpel ran geholt der davon mehr weiß. vlt gehe ich mit ihm das mit der biblothek nochmal durch.
aber was macht denn die biblothek? die kann doch auch nur den takt über millis() nutzen oder?
na ich versuche da jetzt erstmal durch zu steigen. melde mich bestimmt wieder ;)

Webmeister

Quote
ich würde diese Library verwenden. Dort gibt es als Beispiel eine "Software Realt Time Clock".

@stundenblume
dieses erwähnte Beispiel scheint aber nicht in der erwähnten Bibliothek zu sein.  =(
Ich befasse mich auch gerade mit dem Thema und wollte meine Library aktualisieren.

Webmeister

Nachtrag
Die erwähnte Software Real Time Clock benötigt zusätzlich die Time-Library.
http://www.arduino.cc/playground/Code/Time

Lösung mit der Time Library:
Quote
The main advantages of software only clock is no hardware to buy or integrate, everything runs on the Arduino.

stundenblume

Quote
dieses erwähnte Beispiel scheint aber nicht in der erwähnten Bibliothek zu sein.


mmmh, bei mir war das softRTC Beispiel bei der RTC Library mit drin...
Libraries:
  - multiCameraIrControl [V1.6]
  -

bytzmaster


ahh ok danke.
leider habe ich vom arduino und programmieren nicht so viel ahnung. ich habe mir auch nin kumpel ran geholt der davon mehr weiß. vlt gehe ich mit ihm das mit der biblothek nochmal durch.
aber was macht denn die biblothek? die kann doch auch nur den takt über millis() nutzen oder?
na ich versuche da jetzt erstmal durch zu steigen. melde mich bestimmt wieder ;)


Die Biliothek holst du im Code über

Code: [Select]


#include <DS1307.h>


und die dazugehörige Time-Lib über

Code: [Select]
#include <Time.h>

das Ganze schreibste über die

Code: [Select]
void setup()  {}

foo_mep

ok. habe mir jetzt das ganze auf http://www.arduino.cc/playground/Code/Time mal angeschaut.
das is ja alles gut. doch ich brauche ja eigentlich gar nicht so viel. nur halt jede minute ein takt.
basiert denn die time bibliothek nicht auch auf millis()?
warum geht denn die uhr mit meinem code so nach?
na wenns gar nicht anders geht, werde ich wohl die biblo nehmen

stundenblume


ok. habe mir jetzt das ganze auf http://www.arduino.cc/playground/Code/Time mal angeschaut.
das is ja alles gut. doch ich brauche ja eigentlich gar nicht so viel. nur halt jede minute ein takt.
basiert denn die time bibliothek nicht auch auf millis()?
warum geht denn die uhr mit meinem code so nach?
na wenns gar nicht anders geht, werde ich wohl die biblo nehmen


Weil die Bibliothek nunmal anders arbeitet als Du es tust. Sie arbeitet genauer, verliert keine Zeit bei der Berechnung. Natürlich auch auf Basis des selben Quarzes.
Libraries:
  - multiCameraIrControl [V1.6]
  -

foo_mep

ok. ich will das ja nur verstehen.
wenn wir, sagen wir mal millis() 60000 erreicht hat, ich berechne und dann meinen impulse raus schicke.
dann warten und wenn millis() dann 120000 erreicht hat ich wieder einen los schicke. dann dürfe sich doch kein fehler addieren und so die zeit eingehalten werden, oder?

Webmeister

@foo_mep
Versuche doch beide Lösungen. So kannst du vergleichen wie die Genauigkeit ist und auch den nötigen Aufwand für die Realisierung.

foo_mep

naja. scheint ja schon was dran zu sein. weil bei meine lösung geht ja die uhr nach.
aber ich glaube ich habe jetzt ne lösung gefunden. wollte ja gerne meinen code nicht so stark ändern. von daher hat mir second() nicht so gut gefallen. aber now() ist sehr gut :)
werde jetzt mal meine code umbauen, und die uhr nin tag laufen lassen. mal sehen ob sich was ändert. resultat folgt...

stundenblume

Ansonsten zeig doch bitte mal den Code, mit dem Du den Takt erzeugst. Dann kann man vielleicht mehr sagen.

Sebastian
Libraries:
  - multiCameraIrControl [V1.6]
  -

Go Up