Forum: Mikrocontroller und Digitale Elektronik define F_CPU in AVR Studio 5, nur wo?


von Matthias H. (maethes26)


Lesenswert?

Hallo,

wo im AVR Menü kann ich bitte die CPU Geschwindigkeit festlegen?

dies direkt in der IDe zu tun soll eine gute Möglichkeit sein,

eine weitere ist wohl dies ganz zu allererst am Afang der Main Datei zu 
tun, noch bevor irgendwelche anderen #includes aufgerufen werden

Unter Project--> Properties..  (Toolchain vielleicht?? und dann?)


ich habe die Einstellung nicht gefunden.

IM AVR STudio4 gab es eine Stelle, nur wo ist die bitte hier.



Vielen Dank für den Tipp im voraus.

Viele Grüße,

Matthias.

von Cecky (Gast)


Lesenswert?

Habe ich kürzlich auch gesucht. Habe grade nicht die Möglichkeit im 
Studio5 nach zu sehen, aber unter "properties" gibt es irgendwo die 
Möglichkeit "symbols" festzulegen.
Da dann einfach einen neuen Eintrag mit z.B. "F_CPU = 8000000" 
erstellen.

von Jannis C. (kabelwurm)


Lesenswert?

Hallo,
Wie währe mit
1
#ifndef F_CPU
2
#define F_CPU xxxxxxxxxxxUL
3
#endif
Im Code? Mache ich immer so.
Gruß Jannis

von Matthias (Gast)


Lesenswert?

Jannis C. schrieb:
> Hallo,
> Wie währe mit#ifndef F_CPU
> #define F_CPU xxxxxxxxxxxUL
> #endif
> Im Code? Mache ich immer so.
> Gruß Jannis

Hi,

ja, so geht es auch.

Ich wollte auch noch herausfinden wo man es in der Umgebung einstellen 
kann.

Bei dem Studio 4 ging es ja auch sehr einfach.

Weiß sonst noch jemand bescheid und würde es mir mitteilen?

Viele Grüße,

Matthias.

von Daniel K. (epyx)


Lesenswert?

Projekteigenschaften -> AVR/GNU C Compiler -> Symbols

auf das Plus klicken F_CPU=xxx eingeben und fertig.

Aufpassen, dass das auch für die jeweilige Konfiguration definiert ist ( 
Debug oder Release )

von Jurij H. (kebabfreund)


Lesenswert?

Und die Endung nicht vergessen
also z.B. 16000000UL (unsigned long)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Matthias schrieb:
>> Im Code? Mache ich immer so.
> ja, so geht es auch.
Aber dann muß man es in jeder Datei, in der delay.h eingebunden wird 
oder F_CPU gebraucht wird extra einfügen. Und wehe, man vergisst dann 
mal eine von 13 Dateien...  :-o

Cecky schrieb:
> Da dann einfach einen neuen Eintrag mit z.B. "F_CPU = 8000000"
> erstellen.
Aber ohne Leerzeichen und mit dem bereits erwähnten UL...

von Matthias H. (maethes26)


Angehängte Dateien:

Lesenswert?

Lothar Miller schrieb:
> Matthias schrieb:
>>> Im Code? Mache ich immer so.
>> ja, so geht es auch.
> Aber dann muß man es in jeder Datei, in der delay.h eingebunden wird
> oder F_CPU gebraucht wird extra einfügen. Und wehe, man vergisst dann
> mal eine von 13 Dateien...  :-o
>
> Cecky schrieb:
>> Da dann einfach einen neuen Eintrag mit z.B. "F_CPU = 8000000"
>> erstellen.
> Aber ohne Leerzeichen und mit dem bereits erwähnten UL...

Hallo zusammen,

Euch allen vielen Dank für die Hilfe F_CPU zu definieren.

Woher wißt ihr das alles? Ich habe in der AVR Hilfe nichts gefunden und 
auch Google bot auf Anhieb nichts.
Ich habe keine Schritt für Schritt Anleitung für AVR Studio5.


anbei ein Bild wie ich es definiert habe- Habe die Wirkung auf All 
Configuration gesetzt. Werde es aber im nächsten Projekt nochmal prüfen, 
ob es dann auhc tatsächlich aktiviert ist. F_CPU=4 MHZ.

Im Code habe ihc extra einen FEhler provoziert, um mir die WArnungen 
angezeigt zu bekommen.

Könnt ihr mir bitte sagen aus welchem Grund ist die delay Fehlermeldung 
habe???

Herzlichsten Dank im voraus,

Matthias.

hier der Code




#ifndef F_CPU   //angelegt zum Test, ob die Symboldefinition auch 
arbeitet, es kam keine Warnung, siehe Bild, also akzeptiert, zusätzlich 
mit dem Oszi ausgemessen, 100ms=LED an, aber 10ms abweichung
#warning "F_CPU not defined"
#endif


#include <util/delay.h>
#include <avr/io.h>


int main(void)
{

DDRD =0b11111111; // PB0 an PORTB als Ausgang setzen
// PORTD=0b11111111;   high

    while(1)
    {

   PORTD ^= ( 1 << PD 7 );     // Toggle PB0 z.B. angeschlossene LED 
//extra Fehler PD 7 eingebaut, um die Warnungen angezeigt zu bekommen
      _delay_ms(100);       // Eine Sekunde +/-1/10000 Sekunde warten...

    }
}

von Matthias H. (maethes26)


Lesenswert?

habe den fEhler für die delayfunktion gefunden.

Optimization level stand auf none

habe diesen jetzt auf size gestellt und die Hinweismeldung mit dem Delay 
ist verschwunden.

Muss man die optimierung denn unbedingt für delay einschalten?

Soll ich die Optimierung standardmäßig auf size stellen?

Viele GRüße,

Matthias.

von Matthias H. (maethes26)


Lesenswert?

die Delayfunktion arbeitet nach dem verschwinden der im Bild gezeigten 
Hinweisfunktion auhc genauer. ich habe jetzt eine Flanke von genau 100ms 
am PORTausgang gemessen. vorher waren es 111ms.

Aber warum muss der Compiler auf optimierung stehen, damit die Funktion 
genauer arbeitet?

Viele GRüße,

Matthias.

von Michael (Gast)


Lesenswert?

Matthias H. schrieb:
> Muss man die optimierung denn unbedingt für delay einschalten?

Darum steht in der delay.h
"\note In order for these functions to work as intended, compiler 
optimizations must be enabled, and the delay time must be an 
expression that is a known constant at compile-time.  If these 
requirements are not met, the resulting delay will be much longer (and 
basically unpredictable), and applications that otherwise do not use 
floating-point calculations will experience severe code bloat by the 
floating-point library routines linked into the application."

von Matthias H. (maethes26)


Lesenswert?

Michael schrieb:
> Matthias H. schrieb:
>> Muss man die optimierung denn unbedingt für delay einschalten?
>
> Darum steht in der delay.h
> "\note In order for these functions to work as intended, compiler
> optimizations must be enabled, and the delay time must be an
> expression that is a known constant at compile-time.  If these
> requirements are not met, the resulting delay will be much longer (and
> basically unpredictable), and applications that otherwise do not use
> floating-point calculations will experience severe code bloat by the
> floating-point library routines linked into the application."


Hi,

dake für die Info. Ich habe daraus gelernt mir die Infos in den 
Funktionen(z.B. delay.h) durchzulesen, denn da steht ja einiges 
wichtiges drin.

Viele Grüße und noch einen schönen Abend wünscht Matthias.

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.