Forum: Compiler & IDEs Delay


von Maddin (Gast)


Lesenswert?

Hallo,
ich habe einen ATmega8 in einer Schaltung mit einem externen 4 MHz
Oszillator aufgebaut und die Fuse Bits entsprechend gesetzt. Jetzt
meine Frage zur  _delay_ms(..);  Funktion. Welchen  Wert muss ich
übergeben, damit ich eine Sekunde oder eine halbe Sekunde Wartezeit
habe?

von Chris (Gast)


Lesenswert?

Du solltest zuerst einmal die Doku zu _delay_ms lesen.

Ich kann dir versprechen, dass sich deine Frage damit erledigt.

von Maddin (Gast)


Lesenswert?

Hi,
nein tut sie leider nicht. Wegen der Doku bin ich ja überhaupt erst auf
die Frage gekommen. Was bedeutet das ...   "The maximal possible delay
is 262.14 ms / F_CPU in MHz."
Bedeutet das, dass bei 4MHz die maximale Wartezeit bei einem 4MHz-Takt
ist 65,535 ms (262,14 / 4)?
Falls ja, kann ich die Zeit steigern, indem ich die Funktion mehrmals
aufrufe?

von OldBug (Gast)


Lesenswert?

Ja!

Bedenke aber, daß Du Compile-Zeit-Konstanten benötigst, damit das Delay
auch stimmt! Besser Lösung: benutze Timer und Timeouts für's
'warten', dann wird nur ein Bruchteil der Rechenzeit verschwendet.

von Maddin (Gast)


Lesenswert?

Diese CompileZeit Konstanten wären dann z.B. das?
#define F_CPU 4000000UL
für 4 MHz?

Geht auch?
#define F_CPU 4.00

von Rufus T. Firefly (Gast)


Lesenswert?

Das feige Arschloch ist wieder unterwegs.
Der Beitrag von 9:00 ist nicht von mir -> Thread
"Identitätsdiebstahl" im Bereich "Webseite".

von Maddin (Gast)


Lesenswert?

Was war denn das?

von OldBug (Gast)


Lesenswert?

@Maddin:

Nein, '#define F_CPU 4.00' ist bei weitem nicht das Gleiche wie
'#define F_CPU 4000000UL'! Das eine ist "4,0" in float, das Andere
4.000.000 in unsigned long. Aber ja: das wären
Compile-Zeit-Konstanten.

#define TIM_DELAY 200

[..]
  _delay_ms(TIM_DELAY);
[..]

von OldBug (Gast)


Lesenswert?

Achso, und mit dem Link ist der hier gemeint:

  http://www.mikrocontroller.net/forum/read-5-174767.html

von Maddin (Gast)


Lesenswert?

Ok gut. Aber zu folgendem:

"Bedeutet das, dass bei 4MHz die maximale Wartezeit bei einem
4MHz-Takt
ist 65,535 ms (262,14 / 4)?"

In der Doku steht für die Funktion _delay_ms(..) , dass die maximale
Wartezeit 262.14 / F_CPU in MHz ist. Stimmt dann obige Berechnung?

von Rufus T. Firefly (Gast)


Lesenswert?

Danke, Oldbug. Genau das Thema meinte ich.

Dasselbe ist heute vormittag auch in mindestens einem anderen Thread
aufgetaucht; offensichtlich hat da jemand wirklich massive
Persönlichkeitsprobleme.

von Jörg Wunsch (Gast)


Lesenswert?

#define F_CPU 4.00E6 wäre allerdings in diesem Kontext zulässig.
Die Gleitkommaoperationen werden vom Compiler abgedrückt, solange
alles zur Compilezeit bekannt ist.

Persönlich bevorzuge ich aber 4000000UL, da man das einfacher auch
an anderen Stellen (Baudratenberechnung etc.) benutzen kann.

von Maddin (Gast)


Lesenswert?

Ok danke euch.

von Daniel (Gast)


Lesenswert?

@ RTF : Hat die Diskussion um Namensdiebstähle eigentlich was im
GCC-Forum zu suchen ?

Ich finde es auch schade, wenn Sarkasmus durch Idiotie ersetzt wird,
aber warum hier diskutieren ? ;-) Bringt IMHO eh nix.

MfG, Daniel.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.