Forum: Mikrocontroller und Digitale Elektronik Atmega32 takt nicht richtig eingestellt


von Philipp M. (lord-maricek)


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

von Peter (Gast)


Lesenswert?

Philipp Maricek schrieb:
> #define F_CPU 8000000

und warum schreibst du 8Mhz wenn der Amtel einen 16MHz läuft.

von Philipp M. (lord-maricek)


Lesenswert?

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

von Floh (Gast)


Lesenswert?

Philipp Maricek schrieb:
> irgentwie

Das würdest du merken. Sobald nämlich der Takt nicht mehr funktioniert, 
kannst du weder programmieren noch fuses setzen.

von Stefan B. (stefan) Benutzerseite


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

von Thomas E. (thomase)


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.

von Martin (Gast)


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?

von Thomas E. (thomase)


Lesenswert?

Martin schrieb:
> bzw. #define F_CPU 8000000
>
>
>
> definieren oder?

Richtig!

mfg.

von Justus S. (jussa)


Lesenswert?

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

falls das ein C&P war, ändere deine Einstellung..einen 80MHz Mega32 gibt 
es afaik nicht...

von Philipp M. (lord-maricek)


Lesenswert?

Ok, danke für die Tipps, aber was muss ich jetzt in die Fuses schreiben?
Aus dem Tutorial werde ich auch nicht ganz schlüssig.
Im avr Studio gibts unter Crystal/Resonator, Low, Medium und High.
Ich werde daraus noch nicht so richtig schlau.

MfG
Philipp

von Thomas E. (thomase)


Lesenswert?

Philipp Maricek schrieb:
> Im avr Studio gibts unter Crystal/Resonator, Low, Medium und High.
>
> Ich werde daraus noch nicht so richtig schlau.

Ext. Crystal/Resonator High Frequ.

mfg.

von Philipp M. (lord-maricek)


Lesenswert?

Ok danke, jetzt gehts, manchmal stell ich mich auch doof an.

MfG
Philipp

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.