PLL

Z MAM wiki

Přejít na: navigace, hledání

PLL v ATtiny45 násobí kmitočet vnitřního RC oscilátoru osmi a umožňuje tak použít pro periferie až 64MHz hodinový kmitočet. Z tohoto kmitočtu lze také dále odvodit třeba 16MHz hodiny pro MCU. Toto není možné u ATmega88, tento procesor PLL nemá. Zde musíme pro vyšší rychlosti použít externí krystal, nebo lze RC oscilátor 'překalibrovat' z 8MHz až asi na 12MHz či snad i 14MHz (tím se ovšem dostaneme mimo doporučenou odchylku max. 10% a periferie teoreticky nemusejí pracovat zcela správně).

PLL měl už procesor ATtiny15, 6.4MHz RC oscilátor bylo pro periferie násobeno čtyřmi na 25.6MHz.

ATtiny45 má režim kompatibility s ATtiny15, ve kterém PLL funguje stejně. Normálně je ale 8MHz násobeno osmi na 64MHz. Pokud RC oscilátor nastavíme na více než 8MHz, zvyšuje se násobená frekvence jen asi do 85MHz - dále už neroste a signály přestanou být synchronizované.

Režim PLL ovlivňují v prvé řadě fuses CKSEL[3:0]:

  • 0001 ... PLL zapnuto, z něj tvořeny 16MHz hodiny procesoru (a 64MHz pro čítač 1)
  • 0010 ... PLL vypnuto, vnitřní oscilátor řídí hodiny procesoru bez násobení frekvence (takto je nastaven nový procesor]
  • 0011 ... PLL zapnuto, ale jen pro vytvoření 25.6MHz pro periferie (tato volba zapíná režim kompatibility s ATtiny15)

Pro vysoké frekvence nejlépe rovnou nastavíme pomocí fuses i Brown-out detection level na 4.3V (BODLEVEL=100), protože jinak by procesor mohl havarovat dříve, než naběhne napájecí napětí. Volbu režimu PLL je třeba provést při programování součástky, program sám už nemůže změnit volbu danou CKSEL[3:0] (tedy například nemůže přepnout na 16MHz hodiny s PLL). Program může PLL zapnout alespoň pro periferie (pro řízení svého běhu už ne) bitem PLLE v registru PLLCSR a také může bitem LSM stejného registru zvolit pro periferie jen 32MHz místo 64MHz.

Nezávisle na všech ostatních možnostech je posledním blokem v cestě hodin k procesoru dělička ovládaná bity CLKPS v registru CLKPR. Běžící program může svou rychlost měnit jedině touto děličkou (a případně kalibrací RC oscilátoru).

Celkově vede od RC oscilátoru k procesoru (k části vykonávající instrukce) cesta přes teoreticky až tři děličky a jednu násobičku kmitočtu, v pořadí 8MHz /2 *8 /4 /N, ale některé části lze vynechat (ty v závorkách): 8MHz [ [/2] *8 /4 ] /N a použité konfigurace jsou jen některé. Základní je 8MHz /N (1MHz s N=8) a lze ji programem přepnout na rychlejších 8MHz s N=1. Pokud pomocí fuses zapneme PLL (a třeba rovnou i nastavíme N=1), dostaneme: 8MHz *8 /4 /1 = 16MHz.

Čítače 0 a 1 můžou být řízeny stejnými hodinami, jako procesor (včetně dělení N). Čítač 1 ale může být řízen i přímo výstupem PLL. V tom případě je řízen frekvencí 8MHz *8 = 64MHz. Pokud procesor PLL nepoužívá, je možno před PLL zařadit dělení dvěma a čítač 1 řídit frekvencí 8MHz /2 *8 = 32MHz (toto lze přepínat za běhu bitem LSM).

V režimu kompatibility s ATtiny15 je procesor řízen frekvencí 6.4MHz /4 = 1.6MHz a čítač 1 může být řízen frekvencí 6.4MHz /2 *8 = 25.6MHz.


Celkově shrnuto, 'turbo režim' s nejrychlejšími hodinami procesoru (bez vnějšího krystalu, s ním by to šlo ještě rychleji) a nejrychlejším PWM pomocí čítače 1 nastavíme pomocí fuses CKSEL[3:0]=0001, BODLEVEL=100 a CKDIV8=off.

Osobní nástroje