Forum: Mikrocontroller und Digitale Elektronik Anfänger versucht Fusebits für Atmega168 4MHz Quarzoszillator einzustellen


von Ch S. (spelli)


Lesenswert?

Hallo,

gerne würde ich hier auch die Fusebits für einen ATmega168, ext. 
Quarzoszillator 4 MHz erfahren...

...ich möchte es natürlich zukünftig auch selbst können. Muss ich jede 
Fuse im Datenblatt raussuchen?

Wenn ich hier schaue:

http://www.engbedded.com/fusecalc "ATmega168" und "ext. Clock ... 0 ms 
..."

Was meint da z. B. die Zeitangabe? Möchte mich nicht (schon wieder) 
aussperren. Ich bekomme einen uC nicht gleich um die Ecke...

Mein Gedanke nach einer Tabelle für die Fusebits ist ja quatsch, da eben 
entsprechend viele Möglichkeiten durch die ganzen Frequenzen...

Muss denn alles so kompliziert sein?

Danke und Gruß
Christoph

von Helmut (Gast)


Lesenswert?

Du hättest mit angeben können mit was du programierst.

Die Zeit in mS bedeutet eine Verzögerungszeit bis der Oszilator sicher 
schwingt.

Du solltest aufpassen, externer Clock bedeutet ein separater 
Quarzozilator an dem einen Taktpin und keinen Quarz an beiden 
Anschlüssen.

Es gibt drei Taktmöglichkeiten. Interner Oszilator, meist voreingestellt 
bei neuem Atmega oder Atiny. Quarzbetrieb mit Quarz und Kondensatoren an 
die Taktanschlüsse Xtal1 und Xtal2. Externer Clock, ist meist ein 
Quarzoszilator der einen Takt liefert und an nur einen Takteingang Xtal1 
vom MC angeschlossen wird.

Ein Controller lässt sich ohne Quarzoszilator nicht mehr so einfach 
brennen, wenn externer Clock gefuset wurde und kein externer Clock 
anliegt.

von Ch S. (spelli)


Lesenswert?

Ich einen externen Quarzoszillator wie im Tutorial beschrieben (an 
XTAL1). Ich schreibe mit Bascom.

Entsprechende dem Fuse-Calculator habe ich den obersten Eintrag mit 0 ms 
genommen und entsprechend die Fuses gesetzt.

Ich habe aber den Eindruck, dass der Takt nicht stimmt. Wie kann ich den 
Takt überprüfen - ich habe eine LED 2 Sek. lang blinken lassen und das 
waren keine 2 Sek. - ich glaube dass ich da alles richtig gemacht 
hatte...

Zum ATmega168 - ich hatte mir mal am Anfang 3 unterschiedliche uCs 
gekauft. Einen 8er habe ich bereits verbaut und der andere ist ein 
ATtiny13...

von Karl H. (kbuchegg)


Lesenswert?

Ch Sp schrieb:

> Ich habe aber den Eindruck, dass der Takt nicht stimmt. Wie kann ich den
> Takt überprüfen - ich habe eine LED 2 Sek. lang blinken lassen und das
> waren keine 2 Sek. - ich glaube dass ich da alles richtig gemacht
> hatte...


2 Möglichkeiten
* Fehler im Programm
* oder das Setzen der Fusebits hat nicht geklappt.


Fuses auslesen und mit dem vergleichen was eigentlich drinn stehen 
sollte.
Programm kontrollieren.


Der Ansatz mit dem Blinken einer LED war an sich schon in Ordnung.

von ... (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> 2 Möglichkeiten
> * Fehler im Programm
> * oder das Setzen der Fusebits hat nicht geklappt.

3. Möglichkeit: CKDIV8 Fuse vergessen zurückzusetzen

von Karl H. (kbuchegg)


Lesenswert?

... schrieb:
> Karl Heinz Buchegger schrieb:
>> 2 Möglichkeiten
>> * Fehler im Programm
>> * oder das Setzen der Fusebits hat nicht geklappt.
>
> 3. Möglichkeit: CKDIV8 Fuse vergessen zurückzusetzen

Guter Einwand!
(warum vergess ich immer auf die CKDIV8?)

von Anja (Gast)


Lesenswert?

Ch Sp schrieb:
> Muss denn alles so kompliziert sein?

Tja leider macht es Atmel einem da nicht ganz einfach.
Statt alles mit ein paar Beispielen an zentraler Stelle zu erläutern
sind die ganzen Infos quer durchs Datenblatt gestreut. Noch dazu weiß 
man nie genau was "unprogrammed" jetzt genau heißen soll:

ich würde für erste Versuche bei 2-4 MHz und 5V beim Mega168 folgende 
Fuses setzen:

FUSEE = 0xFF
unused       = 1111
unused       = 1
BOOTSZ1..0   = 11     (11 = minimum boot size)
BOOTRST      = 1      (unprogrammed: reset is 0x0000)

FUSEH = 0xDC
RSTDISBL     = 1      (unprogrammed: reset is reset pin)
DWEN         =  1     (unprogrammed: debug wire disabled)
SPIEN        =   0    (SPI programming enabled)
WDTON        =    1   (unprogrammed: WDT off)
EESAVE       = 1      (unprogrammed: chip erase deletes eeprom)
BODLEVEL2..0 =  100   (4.1..4.5V)

FUSEL = 0xF7
CKDIV8    = 1      (unprogrammed)
CKOUT     =  1     (unprogrammed)
SUT 1..0  =   11   (slow rising power)
CKSEL3..0 = 0111   (1.8/3.6 MHz full swing)


bei FUSEL und Low-Power-Anwendung würde auch FUSEL = 0xFD gehen.

Gruß Anja

von Ch S. (spelli)


Lesenswert?

Hallo,

danke für die Antworten - ich lerne und lerne... Es war das CKDIV8-Bit. 
Miste!

Dabei ist das CKDIV8-Bit auch gut erklärt....

Aber gut, dass ich nicht der einzige bin, der das mit den Fuses etwas 
unübersichtlich findet. Naja, aber dann hat das Setzen bei mir ja erst 
einmal geklappt!

Danke!

@Anja: Danke für deine Ausführungen!

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.