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?
Du solltest zuerst einmal die Doku zu _delay_ms lesen. Ich kann dir versprechen, dass sich deine Frage damit erledigt.
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?
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.
Diese CompileZeit Konstanten wären dann z.B. das? #define F_CPU 4000000UL für 4 MHz? Geht auch? #define F_CPU 4.00
Das feige Arschloch ist wieder unterwegs. Der Beitrag von 9:00 ist nicht von mir -> Thread "Identitätsdiebstahl" im Bereich "Webseite".
@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); [..]
Achso, und mit dem Link ist der hier gemeint: http://www.mikrocontroller.net/forum/read-5-174767.html
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?
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.
#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.
@ 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.