Inhaltsverzeichnis

AVR Clock Source

Jeder Mikrocontroller oder Prozessor braucht einen Takt. Das ist auch bei den AVR Mikrocontrollern von Atmel nicht anders. Es gibt jedoch verschiedene Möglichkeiten wie der Controller zu seinem Takt kommt. Wie das gemacht wird und was zu beachten ist soll hier beschrieben werden.

Interner RC-Oszillator

Alle AVR Controller der neueren Generationen (ATtiny, ATmega) und einige wenige der ersten Generation (AT90S) besitzen einen internen RC-Oszillator. Bei einem fabrikneuen Controller ist dieser RC-Oszillator aktiviert und so eingestellt das der Controller mit 1MHz läuft. In diesem Fall ist für den Betrieb keine externe Taktschaltung notwendig.

Externer Oszillator

Ein externer Oszillator („external clock“) unterscheidet sich von einem Quarz äußerlich dadurch, dass er zwei zusätzliche Pins für Masse und Versorgungsspannung hat. Hat dein Bauteil nur zwei Pins, so hast du einen Quarz!

Ein Quarzoszillator ist eine recht unkomplizierte Taktquelle, sie wird mit dem Ausgang an XTAL1 angeschlossen, die CKSEL Fuse wird auf 0000 gesetzt und alles sollte funktionieren.

Im Allgemeinen sind Quarzoszillatoren teurer als Quarze, benötigen mehr Platz auf der Platine und haben einen höheren Stromverbrauch als ein vergleichbarer vom µC angeschwungener Quarz.

Externer Quarz

Ein Quarz („crystal oscillator“ oder „external crystal/ceramic resonator“) wird zwischen XTAL1 und XTAL2 geschaltet, außerdem platziert man bei CKOPT=1 von jedem Pin noch je einen 22pF-Kondensator gegen Masse.

Die genauen Angaben, wie die Fuses bei welcher Frequenz zu programmieren sind, stehen im Datenblatt des µC (PDF-Suchfunktion mit obigen englischen Begriffen verwenden).

CKSEL falsch gesetzt

Wenn man bei der Programmierung der Fuses etwas falsch macht kommt man oft bei CKSEL=0000 heraus, d.h. der µC erwartet eine externe Taktquelle, die meist nicht da ist. Man kommt gar nicht mehr an den Controller, kann also auch nicht einfach die Fuse zurücksetzen.

Hier hilft entweder ein echter Oszillator oder aber ein weiterer AVR, der so programmiert ist, dass er ständig einen Pin ein und ausschaltet. Diesen Pin an XTAL1 des nicht mehr reagierenden Controllers sollte als Taktquelle reichen, um die Fuses neu und richtiger programmieren zu können.

Generell sollte man darauf achten, erst die bestehenden Fuses aus dem µC zu lesen, diese zu verändern und dann zu schreiben. Die Standardeinstellungen, die man ansonsten hineinschreibt, sind selten sinnvoll (z.B. alles 0 oder alles 1).