Forum: Mikrocontroller und Digitale Elektronik Fuse Bits korrekt setzen


von Christian S. (vivus)


Angehängte Dateien:

Lesenswert?

Hallo,

ich bin etwas eingeschüchtert von den vielen Warnungen beim setzen der 
Fuse Bits.

Ich habe eine Atmega328 und einen externen 16 Mhz quartz. Diesen hab ich 
in Pin 9 und 10 gesteckt und von jedem Pin über einen 22pF Kondensator 
auf Masse.

Im Anhang ein Screenshot aus AtmelStudio.
Den Externen Quarz habe ich bereits gewählt, nur ckdiv8 um nicht durch 8 
zu teilen hab ich noch nicht auf 0 gesetzt.

1. Sind die Fuse Bits so korrekt?

Um zu gucken, ob der Takt auch korrekt ist, wollte ich mit dem Oszi mal 
einen Port einfach high/low setzen in der while schleife hier erhalte 
ich 500 kHz das mit 8 multipliziert ergäbe aber nur 4MHz....

Folgenden Code hab ich dafür auf den uC geladen:
1
#ifndef F_CPU
2
#define F_CPU 16000000UL // 16 MHz clock speed
3
#endif
4
5
#include <avr/io.h>
6
#include <util/delay.h>
7
8
int main(void)
9
{
10
  DDRC = 0xFF;
11
  while(1)
12
  {
13
    PORTC = 0xFF;
14
    PORTC= 0x00;
15
  }
16
}

Gruß

von Felix Pflaum (Gast)


Lesenswert?

CKDIV8 ist aktiviert, also wird der Takt durch 8 geteilt und aus 16 MHz 
werden 2 MHz. Um die 16 MHz zu nutzen, muss der Haken weg.

Einen Port auf High oder Low zu setzen dauert mehr als einen 
Prozessorzyklus, daher wirst du die Clock so nicht genau herausmessen 
können. Mit der CLKOUT-Fuse gäbe es aber die Möglichkeit, die Clock 
direkt auf einen Pin (PB0 denke ich) zu legen.

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.