delay-Genauigkeit

Gast #2770290
Lesenswert?

Hallo,

ich arbeite zurzeit in dieser Arduino IDE mitsamt Arduino und habe da 
eine Frage zur delay() Funktion. Kann ich davon ausgehen, dass die 
delay() Funktion chronografisch sehr genau ist? Wenn der Mikrocontroller 
seinen Takt durch einen Quarz bekommt, müsste es doch 
mikrosekunden-genau sein, oder?
 Mir geht es jetzt nicht um eine kleine Zeitspanne, sondern ich brauche 
für eine Projekt immer einen ziemlich langen, aber zeitlich exakten 
Ablauf des Programmes. Kann ich mich darauf verlassen, wenn ich als 
Parameter z.B. 50 Minuten eingebe, er den Programmablauf um 50 Minuten 
+/- 0.5 Sekunden unterbricht?
Oder lässt sich das einfacher realisieren? Timer?
Aber habt Geduld, bin noch ziemlich am Anfang ;)

Oberfranke
#2770312
Lesenswert?

Sowas macht man mit Timern. Bei so großen Zeitkonsten würde es sich 
sogar anbieten einen asynchronen Timer mit Uhrenquarz dran zu nehmen. Du 
zählst dann einfach in der Intterupt-Routine deine Sekunden und Minuten 
hoch und wenn >= 50 Minuten erreicht ist setzt du ein globales Flag und 
startest in deiner Hauptschleife eben deine Dinge die getan werden 
sollen. Und dann geht der Spaß von vorne los.
Selbst wenn Delay recht genau arbeitet (sofern die Interrupts aus sind), 
so kannst du während des Wartens ja nichts anderes machen als zu warten. 
Ist also ziemlich verschwendete Rechenzeit, vorallem bei so einer 
Zeitkonstante.
Wenn du mit dem Asynchronen Timer arbeitest, kannst du deinen µC auch 
solange schlafen legen bis z.B. 1s vergangen ist, dann wacht er kurz auf 
zählt seine Sekunden und Minuten hoch und geht dann wieder pennen.
#2770329
Lesenswert?

Oberfranke schrieb:

> Parameter z.B. 50 Minuten eingebe, er den Programmablauf um 50 Minuten
> +/- 0.5 Sekunden unterbricht?
> Oder lässt sich das einfacher realisieren?

Die in heutigen (Analog-) Quarzuhren verbauten Oszillatoren sind
selbst bei Billiguhren erstaunlich genau. Ausserdem kann man die
leicht überprüfen, wenn man die Uhren einige Tage laufen lässt
und z.B. mit einer Funkuhr vergleicht. Wenn Du dann die Elektronik-
platine aus einer solchen Uhr ausbaust, hast Du einen billigen und
genauen Taktgeber mit 1s-Impulsen. Diese Impulse kannst Du dann mit
einem CMOS-IC beliebig runterteilen und so die von Dir gewünschte
Genauigkeit spielend erreichen. Da dies aber ein µP-Forum ist,
sind solche Einfachlösungen hier eher unerwünscht.
Gruss
Harald
#2770378
Lesenswert?

Oberfranke schrieb:
> Hallo,
>
> ich arbeite zurzeit in dieser Arduino IDE mitsamt Arduino und habe da
> eine Frage zur delay() Funktion. Kann ich davon ausgehen, dass die
> delay() Funktion chronografisch sehr genau ist?

Was du dir angewöhnen musst:
Streiche die delay Funktion aus deinem Wortschatz.
Es gibt ein paar wenige Fälle, in denen delay sinnvoll sind. Die sind 
aber allesamt kurze Zeiten und die 2-te Nebenbedingung ist, dass es 
nichts ausmachen darf, wenn die Zeit auch schon mal (im Rahmen) länger 
wird als vorgesehen.

Ansonsten ist delay() nicht die Lösung sondern meistens das Problem in 
einem Programm.

Zeitsteuerungen führen IMMER über einen Timer.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren