mikrocontroller.net

Forum: Compiler & IDEs Kleinste Wartezeit mit Atmega32


Autor: bastler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Gruss

Autor: bastler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Etwas vergessen.
Ich möchte die neueste Version von WinAvr benutzen.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1/16MHz = 62.5ns

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die 62.5ns gelten natürlich für einen NOP.

Ansonsten siehe Dokumentation zur avrlibc oder probiere es im AVRStudio 
einfach mal aus.... (Dort kann man die Laufzeit in in CPU-Zyklen 
anschauen...)

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Querverweis auf einen Bugfix der neuen delay-Funktionen in avr-libc 
1.7.0 bis zum Erscheinen der Version 1.7.1: 
Beitrag "Re: _delay_ms() läuft 4 Mal schneller als erwartet"

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.