www.mikrocontroller.net

Forum: Compiler & IDEs Delay in avr-gcc


Autor: Sebastian Schabbach (Gast)
Datum:

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

Autor: OldBug (Gast)
Datum:

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

Autor: Sebastian Schabbach (Gast)
Datum:

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

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vorher ausrechnen, wieviele Zyklen eine Millisekunde sind. Das hängt vom
Prozessortakt ab.

Alternative: Timer verwenden.

Autor: OldBug (Gast)
Datum:

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

Autor: Jörg Wunsch (Gast)
Datum:

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

Autor: Sebastian Schabbach (Gast)
Datum:

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

Autor: Jörg Wunsch (Gast)
Datum:

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

Autor: Frank Jonischkies (Gast)
Datum:

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

Autor: Jörg Wunsch (Gast)
Datum:

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

Autor: Frank Jonischkies (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Done, ItemID  #11817

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.