delay Funktion für Atmega8

OP #1282345
Hallo Forumuser,
Ich programmiere AVR Atmega8 Mikrocontroller und benutze Sisy AVR 
Software.
In meinem C-Programm verwende ich eine delay - Funktion.
Aus dem Fragment meines Quellcodes (siehe unten) müsste die Pause 
betragen 3 sec. mall 1000 = 3000 sec.
In der Praxis jedoch sind es bei mir ca. 97 sec. Warum?

#define     F_CPU 3686400
#define   BAUD   9600
#include    <avr\io.h>
#include    <avr\delay.h>
...........
...........
...........
...........
 for (int i=1; i<=1000; i++)
   {
       _delay_ms(3000);
   }
.............
.............
.............
Ich bitte um Rat.
Christian Paier schrieb:
> Wenn du Falks Ratschlag befolgt hättest und
> http://www.mikrocontroller.net/articles/AVR-GCC-Tu...
> gelesen hättest...
>
> würdest du wissen das die delay-Routinen der delay.h auf ein Maximum in
> Abhängigkeit der MCU-Taktfrequenz begrenzt sind. Kann man sich mit ner
> einfachen Formel errechenen (Als Faustfomel kann man sagen: Nie mehr als
> 20 reinschreiben)

Und wenn du in die delay.h einer etwas neueren libc Distrubution 
geschaut hättest, dann wüsstest du, dass diese Maximalzeit mitlerweile 
bei rund 6.5 Sekunden (unabhängig von der Taktfrequenz) steht.

Edit: Steht aber mitlerweile auch im Tut

Allerdings erhebt sich die Frage, welche Version mit SiSy ausgeliefert 
wird.
Karl heinz Buchegger schrieb:

> Und wenn du in die delay.h einer etwas neueren Distrubution geschaut
> hättest, dann wüsstest du, dass diese Maximalzeit mitlerweile bei rund
> 6.5 Sekunden (unabhängig von der Taktfrequenz) steht.

Aha, Ok dann muss ich mich entschuldigen, da wollt ich wohl mit 
veraltetem wissen glänzen. Tut mit wirklich leid.

Das heißt also man kann mit den neunen Distributionen wirklich 
_delay_ms(3000) schreiben?

Dann ist die nächste logische Frage: Welche Version verwendet P. Imhof ?
Christian Paier schrieb:
> Karl heinz Buchegger schrieb:
>
>> Und wenn du in die delay.h einer etwas neueren Distrubution geschaut
>> hättest, dann wüsstest du, dass diese Maximalzeit mitlerweile bei rund
>> 6.5 Sekunden (unabhängig von der Taktfrequenz) steht.
>
> Aha, Ok dann muss ich mich entschuldigen, da wollt ich wohl mit
> veraltetem wissen glänzen. Tut mit wirklich leid.

Nicht wirklich.
Was wir alle übersehen haben: Er benutzt ja SiSy
Und da erhebt sich die Frage, wie alt die avr-libc dort ist.

> Das heißt also man kann mit den neunen Distributionen wirklich
> _delay_ms(3000) schreiben?

Ja.
Die Genauigkeit nimmt ab. Aber wenn jemand 3 Sekunden per delay wartet, 
ist es in 99% aller Fälle egal ob das dann 3.001 Sekunden sind oder 
2.999
Wers genauer haben will, nimmt sowieso Timer :-)
Gast
hallo,

ich hatte auch so meine schwierigkeiten bei der anwendung der 
warteroutinen aus der delay.h... besonders hat mich immer die _delay_us 
geärgert :-( ich nehme jetzt immer den codewizard von Sisi und lass mir 
dort die gewünschten warteroutinen generieren... damit bin ich dann 
immer gut gefahren... aber auch hier ist die vorraussetzung den 
richtigen takt ausgewählt zu haben

lg
(Firma: codes4web)
Hallo,
ich benutze einen Atmega8 und myAVR.

Die Fuses sind auf internen Takt mit egal welchem Takt gesetzt und mit 
und ohne WatchDog!
Das Problem ist, dass kein delay funktioniert!

Das Programm bricht bei _delay_ms(x) einfach ab und verharrt!
der delay kann auch 1 gesetzt werden und es bricht ab.

included habe ich util/delay und avr/delay (jeweils und nicht gemeinsam) 
und es geht nicht!

Ich teste meine Schaltung auf einem Pollin Funk AVR.

Wer hat einen Tip für mich?

Lg
Tobias
Gast
>Wer hat einen Tip für mich?

Code soweit reduzieren, das der Fehler noch auftritt. Dabei wird 
manchmal schon klar was das Problem ist. Reduzierten Code posten.
Fuses überprüfen.
Erklären woran DU merkst das das Programm hängt.
Takteinstellungen im Compiler, bzw. Code prüfen.


PS. Auch wenn es wie eine Ausrede klingt: Unsere Glaskugeln sind mal 
wieder alle bei der Inspektion.

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.