Welchen Quarz beim Mega2561?

OP #4854622
Lesenswert?

Hallo zusammen,

ich habe mir ein Board mit einem ATMEGA2561 gekauft. Im Lieferumfang war 
ein Quarz mit 7.37280 MHz mit dabei. Im Programm, in welchen ich einen 
Pin mit einem angeschlossenen LED toggle, definiere ich den Quarz so:

#define F_CPU 737280UL


Zwischen dem Blinken habe ich ein delay mit 500ms festgelegt.

Kann es sein, dass die 500ms aufgrund des Quarzes keine echten 500ms 
sind? Wenn es so ist, wie bekomme ich es hin, dass aus den falschen 
500ms echte 500ms werden? Benötige ich einen Quarz mit 16 MHz?

Vielen Dank für eure Hilfe.

Grüße

Datatom
OP #4855635
Lesenswert?

Mein Programm:

#include <avr/io.h>

#define F_CPU 7372800UL  // 7,3728 MHz
#include <util/delay.h>

int main(void)
{
  DDRB |= (1<<DDB5);

  while (1)
  {
    PINB |= (1<<PINB5);
    _delay_ms(500);
  }
}

Ich habe, wie empfohlen, noch eine 0 an dem #define F_CPU angefügt. Die 
LED schaltet nun ca. alle 4 Sekunden um.

Wenn ich eine 0 wegnehme, ist das Blinken schneller. 5x an und 5x aus 
dauern ca. 6 Sekunden. Aber die 500ms sind damit auch keine echten 
500ms.

Was ist falsch?
#4856623
Lesenswert?

Ob das nun im Makefile steht, und damit dem Cpp beim Kompilieren 
übergeben wird, oder in einer projektweiten Header-Datei oder sonst wo, 
ist vollkommen egal. Das ist eher eine Frage, wie man sein Projekt bzw. 
die Korrespondenz zwischen SW und HW organisiert. Wichtig ist nur, dass 
alle (!) beteiligten Übersetzungseinheiten dieselbe (!) Definition von 
F_CPU sehen.
#4857410
Lesenswert?

Wilhelm M. schrieb:
> Pete K. schrieb:
>> Wilhelm M. schrieb:
>>> Wichtig ist nur, dass
>>> alle (!) beteiligten Übersetzungseinheiten dieselbe (!) Definition von
>>> F_CPU sehen.
>>
>> Genau deswegen macht man das im Makefile. Oder in dem entsprechenden
>> Eintrag in der jeweiligen IDE.
>
> Eben nicht notwendigerweise!

ACK, ein Headerfile, das in allen Sourcen eingebunden wird, tut es auch 
sehr gut.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren