Delay in avr-gcc

Gast #179627
Hallo.

Ich habe mal eine Frage zum Delay. Habe mir die anderen Beiträge auch
schon durchgeschaut aber keine Lösung auf mein Problem gefunden. ich
habe die delay.h eingebunden (in ihr sind 2 Funktionen heissen
irgendwie so _delay_loop_1 und _delay_loop_2. ). Allerdings wenn ich
nun eine dieser Funktionen aufrufe (z.B. mit 10000), dann passiert
überhaupt nix. Muss in in irgendwelchen Headern noch was setzen oder
wie ist das zu erklären?
Gast #179628
_delay_loop_1 ist nicht in der Lage, einen Wert von "10000" zu
verarbeiten, maximal 255.

_delay_loop_2 kann bis 65535.

Die Doku der avr-libc enthält seit neuestem auch ein bißchen Text über
diese beiden Funktionen (ja, sie sind auch in der neuen avr-libc
implementiert und es gibt noch zwei zusätzliche).
Gast #179629
Hmmm,

ich sehe gerade, dass der Zeitraum des delays dort in "Zyklen"
angegeben ist. Gibt es auch eine Möglichkeit, das ganze in ms
anzugeben? Was mache ich denn ich z.B. 1000 ms, also 1 Sekunde, warten
will?
Gast #179631
Ich verweise ja nicht umsonst auf die Doku...

Hättest Du die gelesen, könntest Du diese Frage selber beantworten!

--8<--
zu _delay_loop_1:

Delay loop using an 8-bit counter __count, so up to 256 iterations are
possible. (The value 256 would have to be passed as 0.) The loop
executes three CPU cycles per iteration, not including the overhead the
compiler needs to setup the counter register.

Thus, at a CPU speed of 1 MHz, delays of up to 768 microseconds can be
achieved.
-->8--
Gast #179632
Außerdem: neueste Doku lesen. ;-)

_inline_ void _delay_ms (double __ms)

Perform a delay of __ms milliseconds, using _delay_loop_2().

The macro F_CPU is supposed to be defined to a constant defining the
CPU clock frequency (in Hertz).

The maximal possible delay is 262.14 ms / F_CPU in MHz.
Gast #179633
ja das habe ich mir auch schon durchgelesen....

aber erstens finde ich keine funktion _delay_ms, und zweitens will ich
eventuell zumindest testweise delays von > 1000 ms erreichen.


Gruß Sebastian
Gast #179634
> aber erstens finde ich keine funktion _delay_ms

Vielleicht ist deine Bibliotheksversion zu alt?  Das ist neu in 1.2.x.
Im GCC-Forum von http://www.avrfreaks.net/ gibt's ein Announcment für
eine private Portierung von avr-libc 1.2.1 für WinAVR (zum
Drüberinstallieren).

> zweitens will ich eventuell zumindest testweise delays von > 1000 ms
> erreichen

Dann lies dir bitte zuerst mal die Kommentare dafür durch: spin-loop
delays (also eine Schleife, die einfach nur die CPU beschäftigt) sind
für sehr kurze Verzögerungen geeignet.  Alles andere macht man mit
einem Timer, dafür sind die da.

Danach kannst du es ja immer noch mit Selbst-drüber-Nachdenken
probieren ;-) und einfach noch eine äußere Schleife drumrumwickeln,
wenn du's partout mit einem delay statt einem Timer machen willst.
Gast #179635
Hallo,

Bisher wurde ja immer SYSCLK für die Taktfrequenz verwendet. Ist auch
noch so in dem TWI Beispiel von Jörg. Warum wird nun noch F_CPU
eingeführt?

Gruß
Frank
Gast #179636
SYSCLK war meine private Erfindung, F_CPU schien mir eher der Konsens
vieler Leute zu sein.  Aber du hast Recht, ich sollte das twidemo auch
ändern.  Da ich gerade nicht dazu komme, das sofort zu tun: kannst du
bitte einen Bugreport aufmachen, damit es nicht in Vergessenheit
gerät?

Antwort schreiben

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