delay-Genauigkeit

Gast #2770290
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
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.
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
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.
Oberfranke schrieb:
> Kann ich davon ausgehen, dass die
> delay() Funktion chronografisch sehr genau ist?

Selbst wenn sie das wäre, würde das nichts nützen. Jeder Code braucht 
Zeit für seine Ausführung.
Sobald also zu dem Delay noch anderer Code ausgeführt wird, ist die 
Genauigkeit zum Teufel. Eine Uhr mit Delay muß nachgehen.


Peter

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.