ATmega328P - Fuses ändern

AVR Neuling

Mitglied
31. Juli 2013
38
0
6
Sprachen
Ich möchte eine Schaltung mit einem (unbenutzten) 328P bauen. Hierzu möchte ich einen externen Resonator gekauft: http://www.reichelt.de/CSTCE-16-0/3...6&ARTICLE=89705&artnr=CSTCE+16,0&SEARCH=16mhz

Nun versuche ich zu verstehen, wie genau die Fuses dafür gesetzt werden müssen. http://www.engbedded.com/fusecalc
Da scheitere ich aber schon wieder an der ersten Zeile, da ich nicht verstehe, wie ich das nun einstellen soll. Der ATmega soll im Prinzip die Grundeinstellungen ohne Besonderheiten beibehalten. Er soll lediglich über den externen 16Mhz Resonator betrieben werden.

Welche der Einstellungen müsste ich dazu wählen?
 
Einen Resonator? aus welchen Grund setzt man denn unbedingt einen Resonator ein?
...
Mit welcher Entwicklungsumgebung?
Für einen Resonator stellst Du im Prinzip einen externen Crystal ein (nicht den Low Frequency). Also entweder Full Swing Crystal, oder bei weniger als 2,7V Versorgungsspannung (oder wenn Du extrem mit der Stromaufnahme knausern mußt) den Low Power Crystal. (CKSEL sollte also zur Kontrolle größer 0101bin sein).
Bei einem Resonator scheint Atmel keine Vorschläge zu den zu verwendenden Bürdekapazitäten zu machen, man soll sich an den empfohlenen Werten des Resonators halten.
Ext. Full Swing Crystal (Oszillator)- wenn der Startup nicht zeitkritisch ist, überall maximale Zeiten.
Mußt Du den Low-Power nehmen (wie oben geschrieben), kommts noch auf die Taktfrequenz an. Bei Dir also 16MHz:
Ext Crystal (Low Power Oszillator) Frequency 8MHz-... - auch hier möglichst mit maximalem Startupzeiten...
(wahrscheinlich wird man trotzdem meist mit dem lowPower hinkommen...)

Das mit dem Oszillator ist etwas irreführend - gemeint ist der interne(!) Oszillator, der einen externen(!) Quarz/Resonator treibt.
Davon gibt es beim 328 salopp gesagt drei Stück:
  • den low frequency für 32,...kHz (Uhrenquarze)
  • den low Power Crystal Oszillator
  • den Full-Swing Crystal Oszillator ("stärker" als der low Power, aber höhere Stromaufnahme)
Wenn ein Externer(!) Oszillator(!) verwendet werden soll, ist external Clock zu wählen. (ebenso, wenn man den Takt irgendwie anders erzeugt, zB durch einen anderen Controller etc... also eine Rechteckspannung anliegt)

Außerdem besitzt der Mega328 noch zwei interne(!) RC-Oszillatoren, die ohne externe Bauteile auskommen:
  • den internen 8MHz-RC-Oszillator (default, allerdings mit MainClockPrescalervon 8 was effektiv 1MHz bedeutet (->CKDIV8))
  • den internen 128kHz-RC-Oszillator (der auch für den Watchdog verwendet wird)

Noch Fragen offen?
 
Zuletzt bearbeitet:
Hallo,

der gewählte Resonator hat bereits eingebaute Bürdekondensatoren (Lastkondensatoren). Also nur entsprechend mit XTAL1, XTAL2 und GND verbinden. Die Dinger hab ich hier wegen der geringeren Beschaltung und Größe auch rumfliegen.
Kann man als normale Quarze einstellen. Hab ich bisher keine Probleme mit gehabt.

Gruß
Dino
 
@LotadaC: Vielen Dank für die sehr ausführliche Antwort. Ich habe den Resonator gewählt, weil der in irgendeiner Schaltung mal empfohlen wurde. Da er sehr kompakt ist und die Kondensatoren schon intern verbaut sind, dachte ich, dass man ihn grundsätzlich zum Betrieb des 328P nehmen könnte. Rein optisch sieht der "Quarz" auf einem Arduino Nano (Clone) genau so aus. Die Schaltung muss beim Strom nicht knausern. Daher habe ich die Einstellungen gewählt, die im Anhang zu sehen sind. Ist das so okay?

Die Einstellung für "external Clock" habe ich nicht gefunden.
Da ich damit bisher klar komme, nutze ich für die Programmierung und die Übertragung auf den ATmega die Arduino IDE mit entsprechender Erweiterung für den ATmega und für die Fuses nehme ich AVR8 Burn-O-Mat. Das Ganze läuft unter Ubuntu.

@Dino: Danke für die Info. Ich hatte schon befürchtet, dass ich die Platine neu machen muss. Ist es bei den "Dingern" eigentlich egal, wie herum sie eingebaut werden?
 

Anhänge

  • 328P Fuses.png
    328P Fuses.png
    127,8 KB · Aufrufe: 10
Ich hatte immer noch im Hinterkopf, daß Resonatoren ungenauer sind als Quarze, und stärker altern - aber das scheint sich langsam anzugleichen. Demgegenüber sind sie eben kleiner, insbesondere wenn die Kerkos schon drin sind...
Eigentlich sollten die keine Polarität haben, vom Gnd abgesehen.

Die External Clock findest Du in der von Dir verlinkten Webseite in der Liste ganz oben. CKSEL=0000binär. ABER Achtung: wenn die eingestellt ist, muß auch ein externer Takt anliegen, auch zum verändern der Clocksettings (damit kann man sich also programmiertechnisch aussperren, wenn man keine Möglichkeit hat, so'nen Takt auch wirklich anzulegen...)

Weitere Fallen sind das umschalten des /Reset zu einem I/O (RSTDISBL) oder das deaktivieren der ISP via SPI (SPIEN).
Für jeden Programmiervorgang - auch die Fuses - (abgesehen vom Bootloader und äquivalenten Flash-Schreibvorgangen) muß der Controller im Reset gehalten werden. Wenn der Reset zum I/O geschaltet wurde, geht das nur noch mit HighVoltageProgramming, was sowohl Programmer, IDE und Hardware (Schaltung) erstmal unterstützen müssen.
Wenn Programming via SPI disabled ist, kann logischerweise nicht darüber programmiert werden, klar. Diese Fuse läßt sich über SPI allerdings gar nicht erst verändern.
Und dann gibts noch das debugWire - dabei wird die ganze Kommunikation über den Resetpin abgewickelt. Folglich ist der also bei aktiviertem DWEN (debugwire enabled) nicht mehr als Reset nutzbar, mit den oben genannten Folgen. Zurücksetzen kann man DWEN dann über das debugwire selbst, WENN der verwendete Programmer debugwire unterstützt.

CKDIV8 bewirkt, daß der Main Clock Prescaler beim StartUp des Controllers mit "8" geladen wird. Effektiv läuft Dein Controller dann also mit 16MHz/8=2MHz.
(Siehe Datenblatt Seite 27ff)

Zur Arduino-IDE und dem burnOmaten kann ich nichts sagen, ich verwende das AtmelStudio in Assembler. Dort kann man die Fuses ähnlich der verlinkten Webseite zusammenstellen, auch nach der Funktion (ohne auf die eigentlichen Bits eingehen zu müssen).
 
Zuletzt bearbeitet:
Hi,

Ich hatte immer noch im Hinterkopf, daß Resonatoren ungenauer sind als Quarze, und stärker altern - aber das scheint sich langsam anzugleichen. Demgegenüber sind sie eben kleiner, insbesondere wenn die Kerkos schon drin sind...
Eigentlich sollten die keine Polarität haben, vom Gnd abgesehen.

Für ne serielle Schnittstelle (statt dem internen RC-Oszillator) reichen die Resonatoren allemal. Ne Uhr sollte man nicht unbedingt damit bauen :D Sie sind auch nicht so temperaturstabil. Soll heißen größere Drift bei Temperaturänderungen. Alterung weiß ich jetzt so nicht. Es gibt zwar schon sehr kleine Quarze aber mit den Resonatoren kommen die bei eingebauten Kondensatoren in der Größe nicht mit.

Der GND ist normalerweise immer in der Mitte. Der Rest ist nach meiner Meinung egal (also symmetrisch). Aber wie immer kann man ja mal schnell ins Datenblatt sehen. Selbst bei den normalen Resonatoren mit Anschlußdrähten ist der GND bis jetzt bei mir immer in der Mitte gewesen.

Bei den großen (mit Drähten) Resonatoren gibt es auch welche mit 400kHz oder ich glaube sogar 350kHz. Damit kann man den Atmel dann so richtig langsam stromsparend betreiben wenn man nicht grad bis auf 32kHz (Uhrenquarz) runter will. :D Wobei ein sehr schneller Takt und dann schlafenlegen wenn er fertig ist glaube ich noch stromsparender ist.

Gruß
Dino
 
Wobei ein sehr schneller Takt und dann schlafenlegen wenn er fertig ist glaube ich noch stromsparender ist.
Ja, oder man reduziert den effektiven Takt durch den MainPrescaler, wenn man das Tempo nicht braucht, aber auch nicht schlafen lassen kann. Interessant in der Hinsicht sind die AVR mit dem "neuen" Clockmodul, wo man zur Laufzeit die Clocksource wechseln kann. Da kannste dann zB auf die Watchdog-Clock umschalten - beim Tiny441/841 kann die dann auf 32kHz eingestellt werden.
Jetzt noch den MainClockPrescaler auf 256 - dann haste 'n effektiven Takt von 125Hz.
Wenn Leistung gefordert ist, schmeißte halt wieder den externen Quarz an ->16MHz
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)