Taktversorgung des PIC


zurück zu PIC-Prozessoren , Elektronik , Homepage

Vorab
Ich empfehle die Verwendung von Keramikschwingern (Keramikresonatoren mit internen Kondensatoren, Typenbezeichnung: CST ...).  Die sind unproblematisch, billig und recht genau in der Frequenz (0,5%).  Bis 4 MHz ist dann beim Brennen des PIC der Oszillatortyp XT einzustellen, bei höheren Frequenzen HS.

Wer mehr Details will, kann weiterlesen.



Allgemeines zur Taktversorgung
Der Oszillator
Quarz und Resonator (LP, XT, HS)
externe Taktquelle (LP, XT, HS, EC)
Der RC-Oszillator (RC)
externer Widerstand (ER)
interner RC-Takt (INTRC)
nanoWatt-Technologie (interner Oszillator Block)
Frequenzvervierfacher (HSPLL)
Frequenzvervierfacher mit internem Oszillator (PLL IN INTOSC)
USB-Takterzeugung

Allgemeines zur Taktversorgung

Der PIC braucht wie jeder Mikrocontroller einen Arbeitstakt. Den kann er

Dabei bietet nicht jeder PIC-Typ alle Möglichkeiten an. Auf welche Art und Weise der PIC nun zu seinem Takt kommt, wird beim Brennen des PIC festgelegt . Die Configuration kann aber schon im ASM-File definiert werden.

Man unterscheidet folgende Betriebsarten:
 
Abkürzung Bezeichnung Frequenzbereich Beschreibung
LP low power crystal/resonator min ... 200 kHz Quarz, Resonator oder externer Takt
minimaler Stromverbrauch
XT crystal/resonator 100kHz ... 4 MHz Quarz, Resonator oder externer Takt
HS high speed crystal/resonator 4 MHz ... max. Quarz, Resonator oder externer Takt
höchste Geschwindigkeit
RC Widerstand-Kondensator 30 kHz ... 4 MHz externer Widerstand und Kondensator
ER externer Widerstand 10 kHz ... 8 MHz nur 1 externer Widerstand (garantiert bis 4 MHz)
INTRC intern 4 MHz ohne externe Bauelemente (ca. 8% Toleranz)
INTOSC intern 4 MHz ohne ext. Bauelemente (max. 2% Toleranz)
EC external clock min ... max. externer Takt, kein Taktausgang

 wobei aber nicht jeder PIC alle Betriebsarten unterstützt:
 
PIC-Typ
LP
XT
HS
RC
ER
INTRC
INTOSC
EC
16F84(A)
X
X
X
X
 
 
 
 
16F87x
X
X
X
X
 
 
 
 
16F7x
 X
 
 
 
 
16F62x
X
X
X
 
X
X
 
X
12F6xx
16F630/676
X
X
X
X
   
X
X

nach oben

Der Oszillator (LP, XT, HS)
Nebenstehendes Bild zeigt den prinzipiellen Aufbau der Oszillatorschaltung eines PIC für die Modes LP, XT und HS.

Ein am OSC1-Pin eingespeistes Signal wird durch U1 verstärkt (auf TTL-Pegel) und an die internen Schaltungen des PIC weitergeleitet. Das Signal steht invertiert und verstärkt auch am Pin OSC2 wieder zur Verfügung.

Steht ein externer Takt zur Verfügung (z.B. von einem Quarzoszillator) wird dieser einfach an OSC1 eingespeist, und OSC2 bleibt unbenutzt.

Mit der Rückkopplung über U2 lässt sich aber auch ein Oszillator aufbauen. Dazu muss ein schwingfähiges Bauelement (Quarz oder Keramikschwinger) zwischen die Pins OSC1 und OSC2 angeschlossen werden. Durch die Rückkopplung über U2 wird dieser Resonanzschwinger zum Schwingen angeregt. Die Schwingung wird über U1 verstärkt, und an die internen PIC-Schaltungen weitergeleitet.

Der interne Widerstand Rf dient der Gegenkopplung des Inverters, um ihn je nach Taktfrequenz im stabilen Arbeitsbereich zu halten. Rf kann nicht für 10kHz und 20MHz den gleichen Wert haben. Vielmehr gibt es drei Festwerte, mit denen man sich für einen Frequenzbereich entscheidet: LP, XT und HS.

Der Oszillator des PIC

nach oben

Quarz und Resonator (LP, XT, HS)
Als frequenzbestimmende Rückkoppelelemente lassen sich Quarze oder Keramik-Resonatoren einsetzen. 

Ein Quarz muss an beiden Enden mit einem Kondensator an Masse angeschlossen sein.

Der Wert der Kondensatoren sollte ab Taktfrequenzen von 2 MHz etwa 15pF ... 33pF betragen. Bei Frequenzen im Kiloherz-Bereich kann man sie auf bis zu 100 pF erhöhen.

Falls (wofür auch immer) der Takt noch für andere Bausteine benutzt werden soll (z.B. für einen zweiten PIC), dann kann er am Pin OSC2 abgegriffen werden. An OSC1 dürfen dagegen keine weiteren Verbraucher angeschlossen werden.

Wird als Kondensator an OSC1 ein Keramiktrimmer eingesetzt, so lässt sich durch Verstellen des Trimmers die Quarzfrequenz ein wenig verändern (ziehen). Dadurch lassen sich sehr präzise Takte einstellen.

Quarze mit hohen Frequenzen (>> 20 MHz) sind oft Oberwellenquarze, die auch gern auf ihrer viel niedrigeren Grundfrequenz schwingen. So ist es schon passiert, das ein 48-MHz-Quarz (3. Oberwelle) am PIC nur mit 16 MHz schwang. So etwas bemerkt man nicht auf den ersten Blick. Um solchen Problemen aus dem Wege zu gehen, und im Interesse der elektromagnetischen Verträglichkeit, sollte man auf Quarzfrequenzen über 20 MHz verzichten.

Anschluß eines Quarzes am PIC
Besonders interessant sind Keramikresonatoren mit integrierten Kondensatoren. Die besitzen 3 Anschlusspins. Der mittlere wird an Masse angeschlossen, während die beiden äußeren jeweils an OSC1 und OSC2 angeschlossen werden. Die beiden separaten Kondensatoren (wie sie beim Quarz nötig waren) entfallen.

Leider sind diese praktischen Bauteile für Frequenzen oberhalb 12 MHz nur schwer aufzutreiben.

Je nach Anbieter heißen diese 3-beinigen Schwinger
Schwinger mit integrierten Kondensatoren oder Keramikresonator. Meist haben sie ein blaues Gehäuse (manchmal auch ein hellbraunes) und eine Typenbezeichnung der Form 'CST x.00' wobei x für die Frequenz in MHz steht.

Keramikresonatoren können in ihrer Frequenz um 0,5% vom aufgedruckten Sollwert abweichen, was für 99% der Anwendungen genau genug ist.

Anschluß eines Keramikresonators am PIC

Der invertierende Verstärker U2 muss in einem extrem weiten Frequenzbereich das Schwingen erlauben. Um einen 20 MHz Resonator zu erregen, sind größere Ströme nötig (geringer Ausgangswiderstand) als z.B. für 32 kHz. Im low-power Mode mit 32kHz wäre dagegen die Stromaufnahme eines niederohmigen U2 reine Stromverschwendung. Deshalb gibt es für den Oszillator drei verschiedene Einstellungen, die für bestimmte Frequenzbereiche optimiert sind.

LP - low power
Im LP Mode kann U2 keine 'großen' Ströme erzeugen, er muss es auch nicht, da dieser Mode nur für Takte bis zu 200 kHz gedacht ist. Der LP-Mode ist auf niedrigen Stromverbrauch hin optimiert. Typischerweise nutzt man dann einen 32-kHz-Uhrenquarz.

XT - normal
Im XT-Mode geht U2 schon etwas stärker an die Arbeit. Der Ausgangswiderstand ist niedrig genug, um Schwingungen bis zu 4 MHz sicher zu erzeugen.

HS - high speed
Um Frequenzen oberhalb von 4 MHz zu erzeugen, wird U2 niederohmig eingestellt. Das ist zwar gut für die Verarbeitungsgeschwindigkeit des PIC, hebt aber auch den Stromverbrauch des Oszillators um einige Milliampere an (typabhängig).
 

Es werden spezielle low-power-Versionen von PIC-Prozessoren angeboten, die man am "L" in der Typenbezeichnung erkennt (z.B. PIC16LF628-04). Diese Spezialtypen erlauben durch die Absenkung der Betriebsspannung (meist auf 2V) und den LP-Mode den Betrieb mit wenigen Mikroampere. Einige dieser Typen unterstützen dafür aber nicht den schnellen HS-Mode.

nach oben

externe Taktquelle (LP, XT, HS, EC)
Steht ein externes Takt-Signal zur Verfügung, so wird es im Mode LP, XT oder HS direkt an das Pin OSC1 angeschlossen (CLKIN). Der Inverter U1 speist dieses Signal dann in den PIC ein, während der Ausgang OSC2 unbenutzt bleibt. An ihm ließe sich aber bei Bedarf der Takt abgreifen (CLKOUT).

Als externe Taktquellen eignen sich z.B. Quarzoszillatoren.

Einige Typen (16F62x) unterstützen den EC (external clock)-Mode. Auch in diesem Mode kann ein externer Takt direkt an OSC1 angelegt werden. Das OSC2-Pin wird dann allerdings nicht als Taktausgang (CLKOUT) verwendet, sondern kann als I/O-Pin genutzt werden.

externer Takt

nach oben

Der RC-Oszillator (RC)
Wer bei den Kosten auf die Pfennige schauen will, und mit einem unstabilen Takt leben kann, kann auch den RC-Mode benutzen. 

Ein Kondensator C wird über einen Widerstand R aufgeladen. Erreicht die Ladespannung am Kondensator die obere Schaltschwelle des Schmitt-Triggers (ST) am Pin OSC1, so aktiviert dieser den FET, der den Kondensator wider entlädt. Fällt daraufhin die Kondensatorspannung unter die untere Schaltschwelle des Schmitt-Triggers, dann sperrt der FET wieder, und ein neuer Ladezyklus beginnt. Die Schwingfrequenz hängt dabei von den Werten des Widerstands, des Kondensators sowie dem ST und dem FET ab.

Alle Werte unterliegen naturgemäß großen Toleranzen und Driften. Mit einer Taktabweichung von 25% muss man rechnen.

Das OSC2-Pin wird dabei auf die Funktion CLKOUT umgeschaltet. In dieser Funktion stellt es den Zyklustakt des PIC bereit, der 1/4 des Oszillatortaktes beträgt.

RC-Oszillator

Der Wert des Kondensators sollte 20pF nicht unterschreiten, ansonsten wirken sich Exemplarstreuungen und Gehäusevariante des PIC stärker auf die Taktfrequenz aus als der Kondensator. (Prinzipiell funktioniert der RC-Mode aber auch ohne Kondensator mit einem Widerstand von z.B. 100kOhm mit einer Frequenz von ca. 1MHz.)
Der Widerstand sollte zwischen 5 kOhm und 100 kOhm liegen. Die Frequenz lässt sich zwischen ca. 30 kHz und 4 MHz einstellen. Folgende Formel kann zur näherungsweisen Berechnung der Frequenz benutzt werden:

Bei der Berechnung bitte beachten, dass das k in Kiloohm für den Faktor 1000 und das p in Pikofarad für den Faktor 0,000000000001 steht.

Die folgende Tabelle zeigt mögliche RC-Kombinationen und zugehörige typische Frequenzen bei 5V Betriebsspannung und 25°C Temperatur.
 

5 kOhm 10 kOhm 100 kOhm
20 pF 3,5 ...6 MHz 2 ... 3,3 MHz 200... 430 kHz
100 pF 1 ...1,6 MHz 600 ...900 kHz 60 ...100 kHz
300 pF 370 ...500 kHz 200 ...300 kHz 20 ...30kHz
Man kann im RC-Mode den externen Kondensator auch ganz weglassen (in dem Fall wirkt nur noch die Kapazität des PIC-Pins) und als Widerstand einen 100-kOhm-Typ einsetzen. Dann schwingt der Oszillator etwa mit 500 kHz .. 1 MHz.

Mit der Temperatur driftet die Frequenz um ca. 0,2 %/K, wobei die Frequenz mit steigender Temperatur abnimmt. Auch die Betriebsspannung wirkt sich auf den Takt aus. Änderungen im Bereich von 3V bis 6V können den Takt zusätzlich um etwa 10% verändern. Im Spannungsbereich von 2V..3V kann der Takt um zusätzliche 30% abweichen.

++ACHTUNG++
Ist der Oszillator im RC-Mode, darf er nicht mit einem externen Takt gespeist werden. Man kann an der Schaltung leicht erkennen, dass der ST ständig versuchen würde den High-Teil des Taktes mit Hilfe des FET kurzzuschließen!! Das kann zur Beschädigung des PIC wie auch der Taktquelle führen.

nach oben

externer Widerstand (z.B. 16F62x) (ER)
Eine Billiglösung, die man verwenden kann, wenn es nicht auf Präzision ankommt, ist der ER-Mode. Ein Widerstand von OSC1 nach Masse stellt die Frequenz eines internen RC-Oszillators ein.
Microchip garantiert den Betrieb mit Widerständen von 38 kOhm bis zu 1 MOhm. Empfohlen wird maximal 4MHz. 

Im laufenden Betrieb kann per Software auf einen festen 37 kHz-Takt (unabhängig vom Wert des externen Widerstands) umgeschaltet werden. 

Das OSC2-Pin wird auf die Funktion CLKOUT umgeschaltet. In dieser Funktion stellt es den Zyklustakt des PIC bereit, der 1/4 des Oszillatortaktes beträgt. Es ist auch möglich, das OSC2-Pin von der CLKOUT-Funktion zu entbinden, und es als normales IO-Pin zu benutzen.

externer Widerstand

nach oben

interner Oszillator (z.B. 16F62x  16F62xA  12F6xx und andere) (INTRC bzw. INTOSC)

Im INTRC-Mode wird ein interner 4-MHz-Oszillator verwendet, der leider nicht sehr stabil ist (3,65 ... 4,28 MHz). Dafür benötigt er keinerlei externe Bauelemente, und die OSC-Pins können als I/O-Pins verwendet werden.
Bei einigen PICs (16F62xA) kann im laufenden Betrieb kann per Software auf einen festen Takt (je nach Typ und Revision 37kHz bzw. 48kHz) umgeschaltet werden.

Der INTOSC-Mode des 12F6xx/16F630/16F676 ist eigentlich das gleiche wie INTRC. Der interne 4-MHz-Oszillator dieser PICs läuft aber stabiler. Erreicht wird das durch einen exemplarabhängigen Korrekturwert (OSCCAL), den man per Software in ein spezielles Register schreiben kann. Der Korrekturwert wird beim Hersteller für jeden einzelnen PIC ausgemessen und in die letzte Speicherzelle des Programmspeichers geschrieben. Damit beträgt die Frequenz 3,92 ... 4,08 MHz (Vdd = 5V).

Achtung:
Falls gleichzeitig mit dem internen Oszillator das MCLR-Pin als I/O-Pin benutzt werden soll, droht die INTOSC&MCLR-Falle.
 

nach oben

nanoWatt-Technologie (z.B. 16F7x7  12F635/68316F636/684/68816F87/8816F818/819)
 
Einige PICs verfügen über nanoWatt-Technologie. Dahinter verbirgt sich ein interner Taktgenerator, dessen Frequenz im Betrieb per Software umgeschaltet werden kann. Dadurch lässt sich der Stromverbrauch des PIC optimieren.

Eigentlich sind es sogar 2 interne Oszillatoren:

  • ein kalibrierter 8 MHz-Oszillator (1%)
  • ein unkalibrierter ~31 kHz-Oszillator
Dem 8-MHz-Oszillator ist noch ein Frequenzteiler nachgeschaltet, der Frequenzen  von 125 kHz bis 4 MHz erzeugt. Der interne Takt wird benutzt, wenn in der Konfiguration der interne Oszillator ausgewählt wurde (INTOSC, INTOSCIO) oder das Bit SCS (Register OSCCON) im laufenden Betrieb gesetzt wird. (Die PIC16F818/819 haben kein SCS-Bit.)
Welche der Frequenzen benutzt wird entscheidet man durch die Bits IRCF2, IRCF1 und IRCF0 (Register OSCCON). 

Das Umschalten der Frequenz erfolgt also im laufenden Betrieb. Der nicht benötigte  Oszillator wird jeweils abgeschaltet, und muss bei einer Frequenzumschaltung eventuell erst wieder anschwingen. Wenn man von 31 kHz auf eine andere Frequenz umschaltet (oder von einer anderen Frequenz auf 31 kHz) dauert es deswegen ca. 10µs, bis nach dem Setzen der IRCF-Bits der neue Takt wirklich anliegt.

Nach Reset oder Power-up steht der Frequenzwahlschalter auf 4 MHz und SCS=0. Falls der interne Oszillator in der Config ausgewählt wurde, startet der PIC also mit 4 MHz, ansonsten mit dem externen Takt.

interner Oszillator der nanoWatt-PICs

Der 8-MHz-Oszillator (HFINTOSC) ist ab Werk kalibriert, und hat einen typischen Frequenzfehler von 1%  (2% bei bei 2,5V..5,5V 0°C..85°C) (5% bei bei 2V..5,5V -40°C..125°C). Er lässt sich aber im Betrieb um bis zu 12% von seinem Sollwert nach oben und unten verstimmen. Dazu wird in des Register OSCTUNE ein Wert eingeschrieben. In die niederwertigen 4 Bit (Bit 3..0) des Registers wird die Stärke der Verstimmung als 4-Bit -Zahl eingegeben. Dabei entspricht 0000 einer Verstimmung um 0% und 1111 einer Verstimmung um 12%.
In das Bit 4 des Registers trägt man die Richtung der Verstimmung ein. Eine 0 in diesem Bit sorgt für eine Verstimmung zu höheren Frequenzen, eine 1 macht den Oszillator langsamer. Um die kalibrierte Sollfrequenz zu nutzen, lässt man das Register also auf 0x00.

Achtung:
Falls gleichzeitig mit dem internen Oszillator das MCLR-Pin als I/O-Pin benutzt werden soll, droht die INTOSC&MCLR-Falle.

Two Speed Clock Start Mode (nanoWatt) (nicht beim 16F818/819)
Das ist ein weiterer Stromspartrick, für Programme, in denen der PIC meistens im SLEEP-Mode verharrt, und nur für kurze Zeit aufwacht. Ist der LP, XT oder HS-Mode ausgewählt, dann wartet der PIC nach dem Ende des Sleep (oder nach Power-up) normalerweise einige 10 Millisekunden, damit der externe Oszillator anschwingen kann. Während dieser Zeit wird schon Strom verbraucht, obwohl der PIC nichts tut.
Mit dem Two-Speed-Start-Up-Mode wird diese Zeit überbrückt.  Der PIC benutzt anfangs einfach den internen Oszillator, und fängt damit schon mal an zu arbeiten. Nach der üblichen Verzögerungszeit schaltet er dann auf den (inzwischen angeschwungenen) externen Takt um.
Damit das Funktioniert, muss in der Config das Bit  IESO auf 1 gesetzt sein und SCS auf 0 stehen. Außerdem muss natürlich einer der Modes LP, XT oder HS ausgewählt sein. Diese Funktion ist aus dem oben abgebildeten Blockschaltbild nicht ersichtlich.

nach oben

Der Oszillator mit Frequenzvervierfachung (HS-PLL) (z.B. 18Fxxx)
Mit der Taktfrequenz steigen auch die Probleme der elektromagnetischen Interferenz (EMI). Höhere Frequenzen können leicht als Radiosignale abgestrahlt werden, und verursachen so Störungen.
Quarze mit hohen Frequenzen (>> 20 MHz) sind außerdem oft Oberwellenquarze, die am PIC auch gern auf ihrer viel niedrigeren Grundfrequenz schwingen, was man nicht sofort bemerkt. 

Die 40-MHz-PICs der Serien 18Fxxx besitzen deshalb einen internen Frequenzvervierfacher (auf Basis einer PLL). Das erlaubt es intern einen 40-MHz-Takt zu erzeugen, wenn der externe Takt nur 10 MHz beträgt. (Das machen PC-Prozessoren ja auch so.)

Da es sich um ein Feature für hohe Taktfrequenzen handelt, kann es auch  nur aktiviert werden, wenn der HS-Mode ausgewählt wird.

Der Takt wird wie im normalen HS-Mode erzeugt. (Nicht in der Abbildung eingezeichnet.) Ob dazu ein Quarz, ein Resonator oder eine externe Taktquelle benutzt wird spielt keine Rolle. Durch Wahl des Modes HSPLL wird die PLL-Schaltung aktiviert,  und der interne Takt des PIC beträgt das 4-fache des Takts an OSC1.
Da die PLL beim Einschalten der Betriebsspannung etwas Zeit braucht, um auf den Eingangstakt einzurasten, startet der PIC bei aktiviertem HSPLL-Mode um 2 ms verzögert mit der Programmabarbeitung.

HS-Oszillator mit PLL-Frequenzvervierfacher
 
Der interne Oszillator mit Frequenzvervierfachung PLL IN INTOSC
Einige PIC18Fxxxx-Typen,  z.B.

mit Nanowatt-Technik können die im Nanowatt-Modul intern erzeugten 8 MHz oder 4 MHz (8 MHz geteilt durch 2) mit dem Eingang des PLL-Frequenzvervierfachers verbinden. Dadurch können 32 MHz (8 MHz x 4) bzw. 16 MHz (4 MHz x 4) ohne externe Bauteile erzeugt werden.

Folgende PIC18F-Typen unterstützen diesen Mode z.B. nicht:

nach oben

USB-Takterzeugung (z.B. 18F2550)

Die 16-Bit-Kern-PICs mit USB-Interface unterstützen 2 verschiedene  USB-Geschwindigkeiten (low-speed / high-speed), für die die USB-Hardware unterschiedliche Takte (6 MHz / 48 MHz) benötigt. Da dieser  Takt vom Takt des Prozessors unabhängig sein soll, verkompliziert sich für diese PIC-Typen der Taktgenerator erheblich.

Grundsätzlich besitzen diese PICs eine nanoWatt-Takterzeugung (siehe oben), die aber nicht die USB-Hardware versorgen kann. Der Quarz/Resonator-Oszillator dieser Takterzeugung ist allerdings nicht der primäre Oszillator (Pins OSC1&OSC2) sondern der sekundäre Oszillator der Timers1 (Pins T1OSO & T1OSI). Da dieser Oszillator für 32kHz optimiert ist, bietet dieser Teil der Takterzeugung nur PIC-Takte bis zu 8 MHz. (Modes: INTHS, INTXT, INTCKO, INTIO)

Daneben gibt es eine separate USB-Takterzeugung, die vom primären Oszillator (Pins OSC1 & OSC2) gespeist wird. Dieser Oszillator kann mit einem Quarz/Resonator bestückt werden, der eine der folgenden Frequenzen hat: 48, 40, 24, 20, 16, 12, 8 oder 4 MHz. Aus all diesen Eingangsfrequenzen kann die USB-Takterzeugung beide USB-Takte (also 48 MHz und 6 MHz) erzeugen.

Die USB-Takterzeugung kann aber zusätzlich auch den PIC-Takt erzeugen. Wenn man mehr als 8 MHz PIC-Takt haben möchte, ist man sogar darauf angewiesen.
Zum einen kann die durch 1, 2, 3 oder 4 geteilte Frequenz des primären Oszillators als PIC-Takt benutzt werden. (Modes: XT, HS, EC, ECIO)
Zum anderen, kann (bei jedem der oben angegebenen Quarz-Werte für den primären Oszillator) eine Frequenz von 48, 32, 24 oder 16 MHz für den PIC "abgezweigt" werden. Einschränkung: Falls low-speed-USB verwendet wird, stehen von diesen 4 Werten nur die 24 MHz zur Verfügung. (Modes: HSPLL, ECPLL, XTPLL, ECPIO)

Quarze mit hohen Frequenzen (>> 20 MHz) sind oft Oberwellenquarze, die auch gern auf ihrer viel niedrigeren Grundfrequenz schwingen. So ist es schon passiert, das ein 48-MHz-Quarz (3. Oberwelle) am PIC nur mit 16 MHz schwang. So etwas bemerkt man nicht auf den ersten Blick. Um solchen Problemen aus dem Wege zu gehen, und im Interesse der elektromagnetischen Verträglichkeit, sollte man auf Quarzfrequenzen über 20 MHz verzichten.
nach oben

zurück zu PIC-Prozessoren , Elektronik , Homepage

Autor: sprut
erstellt am: 18.06.2002
letzte Änderung: 14.03.2007