Ich betreibe meinen AT90USB162 mit einem 8MHz Quarz.
Kann mir jemand erklären, weshalb der Code
while(1)
{
PORTB_INV(0); // blinke PB.0
_delay_ms(500);
}
im Sekundentakt blinkt (wie erwartet), wenn ich F_CPU nicht definiere,
aber wenn ich
#ifndef F_CPU
#define F_CPU 8000000UL /* Quarz mit 8.0000 Mhz */
#endif
verwende, blinkt er im 8-Sekundentakt. Wäre umgekehrt nicht logischer?
Daniel schrieb: > wenn ich F_CPU nicht definiere, dann müsstest du eine Fehlermeldung bekommen. Sicher das es nicht woanders noch definiert ist?
> wenn ich F_CPU nicht definiere Das führt zu einer Warnung die Du lesen solltest [0] > Wäre umgekehrt nicht logischer? Nein. Dein F_CPU stimmt nicht mit der vermuteten Realität überein -> nochmals die Fuses prüfen. [0] Entgegen landläufiger Meinung sind Warnungen nicht dazu da, um ignoriert zu werden.
Die Warnung ist mir schon bewusst, da es aber nur ohne F_CPU definieren korrekt läuft, benutze ich das momentan halt so. Aber weshalb es so ist, wäre schon mal interessant ... Mit Fuses habe ich mich noch nicht befasst, da kenne ich mich noch nicht aus. Bedeutet das nun, dass die angelegte Frequenz nicht der tatsächliche Systemtakt ist? So grob über den Daumen gerechnet hiesse das dann, dass intern nur ein Takt von 1MHz benutzt wird...
Hi >Bedeutet das nun, dass die angelegte Frequenz nicht der tatsächliche >Systemtakt ist? So grob über den Daumen gerechnet hiesse das dann, dass >intern nur ein Takt von 1MHz benutzt wird... Wahrscheinlich. Ist der Auslieferungszustand der meisten AVRs. Du solltest mal anfangen das Datenblatt zu lesen. MfG Spess
mit F_CPU veränderst du nicht, wie schnell die CPU läuft. du teilst dem Compiler dadurch nur mit, welcher CPU-Takt durch deine Hardware, Fuses, Quarz usw. vorgegeben wird. Per default, solange man nix verstellt sind das ~1MHz aus dem internen Oszillator. also: #define F_CPU 1000000ul /* Kein Quarz */ einsetzen.
Daniel schrieb: > #ifndef F_CPU Oh, und lass dieses #ifndef Weg. Wenn du F-CPU zweimal (ggfs. sogar noch abweichend) definierst ist das ein Fehler. Es ist GUT, wenn der Compiler Fehler für dich findet, weil du sie dann nicht mehr selber suchen musst. mit dem #ifndef außenherum kann der Compiler den Fehler nicht mehr finden, du stellst dir damit also selber ein Bein.
Fuse schrieb: > mit F_CPU veränderst du nicht, wie schnell die CPU läuft. > > du teilst dem Compiler dadurch nur mit, welcher CPU-Takt durch deine > Hardware, Fuses, Quarz usw. vorgegeben wird. Das war mir soweit bereits klar. Ich wusste nur folgendes nicht: Fuse schrieb: > Per default, solange man nix verstellt sind das ~1MHz aus dem internen > Oszillator. Danke für den Hinweis!
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.