Kleine _delay_ms() und _delay_us() Verständnissfrage

Gast #1318985
Hallo,

ich nutze einen ATmega32 mit 16 MHz Quarz.

Ich habe mir die Beschreibung zu den Funktionen _delay_ms() und 
_delay_us() in der Reference angeguckt.
http://www.nongnu.org/avr-libc/user-manual/group__util__delay.html

Verstehe ich das nun richtig das ich bei _delay_ms() einen Wert von 
maximal 262.14 ms / F_CPU in MHz = 16,38375 aufrufen soll. Wenn ich 
einen höheren nehme dann beträgt die Genauigkeit "nurnoch" 1/10 ms. Also 
wäre ein Aufruf von _delay_ms(1000) (oder 500 oder 250 etc.) kein 
Problem.

Bei _delay_us() sollte der Wert maximal 768 us / F_CPU in MHz = 48 
betrage, ansonsten wird _delay_ms() genutzt. Sollte ich daher aus 
_delay_us(50) dann lieber
1
_delay_us(25);
2
_delay_us(25);
machen und aus _delay_us(60) dann halt
1
_delay_us(25);
2
_delay_us(25);
3
_delay_us(10);
machen?

Oder wie baue ich am Besten eine Wartezeit (in der nichts Anderes 
abgearbeitet werden muss) mit "hohen" Zeiten?
Gast #1319008
Danke @ Alex

Würde denn auch _delay_us(100) funktionieren, da dies ja auch den 
Maximalwert überschreitet? Oder muss ich das dann wirklich aufbröseln in 
mehrere _delay_us() Aufrufe mit maximal 48?
#1319018
In der Avr-libc-doku (dein Link) steht, dass:
1) _delay_us() auf _delay_ms() ausweicht, wenn du länger als 768/F_CPU 
[Mhz] µs warten willst.
2) _delay_ms() nur noch auf 0,1ms aufgelöst wird, wenn du länger als 
262,14/ F_CPU [MHz] ms warten willst.
Da 2) bei dir nicht der Fall ist, gibt's doch kein Problem.

hth, Jörg
#1319298
@Martin (Gast)

>Wie genau das Ganze wirklich sein muss weiß ich nicht.

Aha, aber Terror machen . . .

> Sind die
>Delayfunktionen denn nicht wirklich genau?

Sie sind so genau wie angegeben. Die _delay_us() und delay_ms() arbeiten 
prinzipbedingt auf ~3 CPU Takte genau. _delay_ms() bei grossen Werten 
halt auf 0,1ms genau.

MFG
Falk

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 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.