Forum: Mikrocontroller und Digitale Elektronik Wie lange kann ein _delay_ms(); maximal sein?


von Sebastian D. (--sebi--) Benutzerseite


Lesenswert?

Wie lange kann ein _delay_ms();(AVR-GCC) maximal sein? Oder gibt es da 
keine Obergrenze?

von Thomas (Gast)


Lesenswert?


von Matthias (Gast)


Lesenswert?

So viel ich weiss genausolange wie das maximum des übergabewertes ist, 
ich glaube double.

Ich glaube nur die ungenauigkeit nimmt mit steigenden Wertes zu, jedoch 
liegt sie im nicht relevanten prozentualen Bereich bei sehr großen 
Werten.

Wir hatten das mal mit 20s getestet, das hat sehr genau funktioniert, 
gemessen wurde das mit einem oszilloskop auf 5s triggerung.

von Matthias (Gast)


Lesenswert?

The maximal possible delay is 262.14 ms / F_CPU in MHz.

komisch! Bei mir hat das damals sehr gut funktioniert?

von Serieller (Gast)


Lesenswert?

Selbstverständlich gibt es da eine Obergrenze, sogar "mehrere" :)

Das Argument ist ein double Wert, daher gibt als maximale Obergrenze, 
was mit double noch darstellbar ist. Dabei muss man beachten, wie double 
beim AVR-GCC implementiert ist.

Praktisch gibt es eine weitere Obergrenze für die Genauigkeit, die 
oberhalb einer gewissen Schwelle erreicht wird:
http://www.nongnu.org/avr-libc/user-manual/group__util__delay.html

Und das ist wiederum von der Versionsnummer der avr-libc abhängig. Also 
aufpassen, wenn eine ältere Version verwendet wird.

von Justus S. (jussa)


Lesenswert?

Matthias schrieb:
> The maximal possible delay is 262.14 ms / F_CPU in MHz.
>
> komisch! Bei mir hat das damals sehr gut funktioniert?

nächste Zeile lesen...

von Sebastian D. (--sebi--) Benutzerseite


Lesenswert?

Die Genauigkeit ist kein Problem, da würde ich eh Timer nehmen. Also 
kann ich ruhig mehrere Sekunden machen. Gut.

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
Noch kein Account? Hier anmelden.