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
Oberfranke schrieb: > Oder lässt sich das einfacher realisieren? > Timer? ja, denn eine dalay verlängert sich um die zeiten der ISR. Das delay ist also nur genau wenn du die interupts sperrst.
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
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.