Atmega32 takt nicht richtig eingestellt

#2039857
Lesenswert?

Moin,

ich habe das Pollin Atmel Evaluations-Board Version 2.0.1.
Der Mega32 hat da einen 16Mhz Quarz drauf. Ich glaube aber dass der 
kaputt ist. Ich habe diesen Code geschrieben, um Leds an und aus 
zumachen.
1
#include <stdlib.h>
2
#include <stdint.h>
3
#include <avr/io.h>
4

5
#include <util/delay.h>
6

7
//#undef F_CPU 
8
#define F_CPU 8000000
9

10
void delay_ms(int delay) {
11
    for (int i=0;i<delay;i++) {
12
      _delay_ms(1);
13
   }
14
}
15

16

17
int main(void)
18
{
19
  DDRD = 0xff;
20
  while(1)
21
  {
22
    PORTD = 0xff;
23
    delay_ms(1000);
24
    PORTD = 0x00;
25
    delay_ms(1000);
26
  }
27
  return 0;
28
}[\code]
29

30
Aber die Led blinken ungefähr doppelt so schnell.
31
Mit Avr Studio habe ich die Fuses auf das gesetzt:
32
[code]Ext. RC Osc. 8.0 MHz - 12.0 MHz; Start-up time: 18 CK + 64 ms[\code]
33

34
Ich habe dann versucht den externen Quarz zu benutzten. Ich habe in den Fuses mehrere Einstellungen versucht, und alle Megas lassen sich nicht mehr ansprechen.
35
[code]Ext. Low-Freq. Crystal; Start-up time: 32K CK + 64 ms
1
Ext. Crystal/Resonator Low Freq.; Start-up time: 16K CK + 64 ms}

Habe ich die falschen Fuses gesetzt, oder warum geht das nicht?

Mfg
Philipp
Persönliche Seite #2039896
Lesenswert?

> ich habe das Pollin Atmel Evaluations-Board Version 2.0.1.
> Der Mega32 hat da einen 16Mhz Quarz drauf.

> #include <util/delay.h>
> #define F_CPU 8000000

Falsch: F_CPU vor dem Include definieren
Falsch: 8 MHz != 16 MHz

> Ext. RC Osc. 8.0 MHz - 12.0 MHz; Start-up time: 18 CK + 64 ms

Falsch: Ext. RC Osc. != Ext. Crystal

> Ext. Low-Freq. Crystal; Start-up time: 32K CK + 64 ms

Falsch: Ext. Low-Freq. Crystal != Ext. Crystal 16 MHz

> Ext. Crystal/Resonator Low Freq.; Start-up time: 16K CK + 64 ms}

Falsch: Low Freq. != 16 MHz

AVR Fuses
#2040298
Lesenswert?

Philipp Maricek schrieb:
> Als internen Quarz habe ich 8Mhz gesetzt, weil der externe irgentwie
>
> nicht geht. Zumindest nicht, wenn ich die fuses einstelle.

Gar nichts hast du eingestellt, sondern nur wild herumgespielt. Kannst 
froh sein, daß das Teil überhaupt noch läuft.

Philipp Maricek schrieb:
> Habe ich die falschen Fuses gesetzt

Na was denn sonst!

1. Wenn du den internen RC-Oszilator, das ist kein Quarz, benutzen 
willst, mußt du auch internen Oszillator 8 MHz einstellen und nicht 
"Ext. RC Osc. 8.0 MHz - 12.0 MHz".

2. Bei der Einstellung "Ext. RC Osc. 8.0 MHz - 12.0 MHz" muß da auch ein 
externer RC dran sein.

3. Die Einstellung für externen QUARZ ist "Ext. Crystal Osz." oder 
besser
   "Ext. Full-Swing Crystal"

Dann läuft dein kaputter Quarz auch wieder.

>#define F_CPU 8000000

Das gehört da so auch nicht hin. Das stellt man unter "Project >> 
Configuration Options" ein.

Für den Fall, daß man das mal vergessen hat schreibt man dann:

#ifndef F_CPU
  #define F_CPU xxx
#endif

Im übrigem wird damit nichts am Controller eingestellt, sondern dem 
Compiler mitgeteilt, mit welchem Takt die Hardware läuft. Z.B. um die 
Delays richtig zu berechnen. Oder woher soll der das sonst wissen?


mfg.
Gast #2040318
Lesenswert?

Hallo,
an der Stelle eine Frage, wenn ich im Makefile (WinAVR, Notepad)
"F_CPU 80000000" einstelle dann brauche ich nicht mehr in "main.c"

#ifndef F_CPU
  #define F_CPU xxx
#endif

bzw. #define F_CPU 8000000

definieren oder?

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