Kleinste Wartezeit mit Atmega32

Gast #1799697
Lesenswert?
• ▲
▼
bastler schrieb:
> Hallo, wie niedrig ist die kleinste delay-zeit bei einem Atmega32 mit
> 16mhz mit : _delay_us bei Winavr-C ?
> Kann man auch feste Realzahlen übergeben?
> Gibt es einen Höchstwert, den man nicht übeschreiten darf bei der
> Übergabe?

Alle, wirklich alle, Antworten auf diese Fragen, und noch viel mehr, 
finden sich in der Dokumentation zur avrlibc.

Eine deutsche Zusammenfassung dazu noch im avr-gcc-turorial, zu finden 
hier oben links im Menu.

Oliver
Moderator Persönliche Seite #1799717
Lesenswert?
• ▲
▼
Peter schrieb:
> Die 62.5ns gelten natürlich für einen NOP.

...den _delay_us() selbst nicht erzeugen kann, denn es ist eine
fest vorgegebene Schleife.  Die macht mindestens einen Durchlauf
mit 2 Takten (der 3. entfällt, da der branch zurück ja nicht
ausgeführt wird), braucht aber außerdem noch Zeit dafür, dass das
Zählregister initialisiert wird.  Je nachdem, ob ein entsprechender
Initialisierungswert bereits in einem Register liegt oder nicht,
braucht das also einen weiteren Takt (Register-Register-Kopie) oder
zwei (zusätzlich noch ein LDI Rx, N).

Der AVR-GCC im neuesten WinAVR enthält einen Patch, der die Funktion
__builtin_avr_delay_cycles() bereitstellt; diese Funktion kann eine
zyklengenaue Verzögerung implementieren, da der Compiler das nötige
Wissen besitzt herauszufinden, ob er beispielsweise den Wert erst
noch in ein Register laden muss oder nicht.  Dafür kann diese
Funktion natürlich nur ganzzahlige Werte übernehmen, die Umrechnung
mittels F_CPU muss man hier also wieder selbst machen.

In der aktuellen avr-libc (1.7.0) benutzen _delay_us() und _delay_ms()
automatisch die Funktion __builtin_avr_delay_cycles(), allerdings
runden sie derzeit meines Wissens immer nach unten bei der Berechnung
des Arguments.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.