Izbor oscilatora i podešavanje bit osigurača AVR mikrokontrolera

 

slika_oscilatori

Za normalan rad mikrokontrolera i za sinhronizaciju rada mikrokontrolera i njegovih komponenti, neophodno je prisustvo stabilnog takt signala kojeg obezbjeđuje oscilator. U zavisnosti od vrste oscilatora, njegove otpornosti uticaja promjene napona i temperature na izvor takt signala, zavisi stabilnost izvora takt signala. Vrsta oscilatora zavisi od komponenti koje koriste, kao npr. RC oscilatori, oscilatori sa kvarcnim kristalom (wikipedia_kristalni_oscilator ), oscilatori sa keramičkim rezonatorom i slično.

U pisanju ovog članka korišteni su podaci od 8-bitnih atmelovih AVR mikrokontrolera Atmega48/88/168. Analogno važi i za druge 8-bitne atmelove AVR mikrokontrolere, s tim da je prethodno potrebno pregledati oznake i vrijednosti podešavanja bit osigurača korištenog mikrokontrolera.

Atmelovi mikrokontroleri isporučuju se sa unutrašnjim RC oscilatorom maksimalne frekvencije rada od 8 MHz, koji je preko bit osigurača CKDIV8 podešen na frekvenciju rada od 1 MHz. Pomoću bit osigurača (eng. fuse bits) može se podesiti frekvencija rada na 1 MHz i na 8 MHz koristeći unutrašnjiRC oscilator. Ukoliko se koristi vanjski oscilator, tada je potrebno postaviti bit osigurače za primjenu vanjskog oscilatora, kao i za tip vanjskog oscilatora.

Bit osigurači za podešavanje izbora i vrste oscilatora označeni su sa CKSEL3, CKSEL2, CKSEL1 i CKSEL0. U sljedećoj tabeli dat je prikaz vrijednosti ovih bit osigurača u odnosu na primjenu oscilatora:

 Tip oscilatora
 CKSEL3..0
 Kristalni oscilator male potrošnje 1111-1000
 Full swing kristalni oscilator
0111-0110
 Kristalni oscilator niske frekvencije
0101-0100
 Unutrašnji 128 KHz RC oscilator
0011
 Kalibrisani unutrašnji RC oscilator
0010
 Vanjski izvor takt signala
0000
 Rezervisano0001

 

Kao što je već rečeno atmelovi 8-bitni avr mikrokontroleri isporučuje se sa bit osiguračima podešenim za rad sa unutrašnjim RC oscilatorom na frekvenciji od 1 MHz, a vrijednosti bit osigurača su: CKSEL = "0010" i CKDIV8 = "0".

Pored podešavanja bit osigurača za izbor vrste oscilatora, postoje i bit osigurači kojima se podešava vrijeme startovanja rada mikrokontrolera, tj. vrijeme koje je potrebno da se završe svi prelazni režimi u mikrokontroleru kao npr. prelazni režim u generatoru takt signala koji traje od trenutka uključenja do trenutka postizanja stabilnog rada oscilatora (nekoliko oscilacija). Ovo vrijeme zavisi od vrste oscilatora, a podešava se pomoću bit osigurača SUT1 i SUT0. Da bi oscilator bio stabilan, a samim tim i rad mikrokontrolera, potrebno je da bude prisutan napon ne manji od neke definisane vrijednosti Vcc koja je navedena u karakteristikama odgovarajućeg mikrokontrolera. Zbog toga mikrokontroler ima unutrašnji reset koji se poziva nakon završetka reseta od strane drugih izvora reseta u mikrokontroleru , a koji obezbjeđuje vremensko kašnjenje t_out, u toku kojeg se postigne vrijednost napona od Vcc (vrijeme koje je potrebno za promjenu napona od   0 do Vcc). Vremensko kašnjenje t_out ostvareno je primjenom watchdog oscilatora, a trajanje se podešava bit osiguračima CKSEL0, SUT1 i SUT0.

Glavni cilj ovog vremenskog kašnjenja je da se AVR mikrokontroler drži u stanju reseta sve dok se ne postigne vrijednost napona od minimalno Vcc. Očigledno je da se na ovaj način obezbjeđuje samo vremensko kašnjenje, a ne i kontrola vrijdnosti napona Vcc, što zanči da će se pojaviti problem ako se ne postigne vrijednost od Vcc za vrijeme vremenskog kašnjenja. Drugi sigurniji način za obezbjeđenje postizanja vrijednosti napona od Vcc je korištenje unutrašnjeg ili vanjskog Brown-Out detektora kojim se kontroliše vrijednost napona i mikrokontroler drži u stanju reseta sve dok se ne postigne minimalna vrijednost napona od Vcc. U slučaju korištenja Brown-out detektora, vremensko kašnjenje t_out nije potrebno.

Kao što je već ranije rečeno i oscilator ima prelazni režim prije nego što postigne stabilno stanje. U toku ovog prelaznog režima unutrašnji reset je takođe aktivan, tj. mikrokontroler se drži u stanju reseta dok traje prelazni režim u oscilatoru. Vremensko kašnjenje u kojem se završava prelazni režim oscilatora zavisi od frekvencije rada oscilatora, a preporučuje se 6 ciklusa za primjenu vanjskog izvora takt signala do 32000 ciklusa za kristalni oscilator male potrošnje.

Prema tome ukupno kašnjenje sastoji se od vremenskog kašnjenja porasta napona do Vcc plus vrijeme potrebno da oscilator postigne stabilan rad.
Ovdje će biti pokazano podešavanje rada mikrokontrolera koristeći full swing kristalni oscilator, zbog posjedovanja dobrih karakterisika i otpornosit rada je u „zagađenoj sredini“, a može se koristiti i za rad drugih izvora takt signala. Potrošnja je veća u odnosu na primjenu rada kristalnog oscilatora male potrošnje, a potreban napon za rad kreće se od 2.7 – 5.5 volti.

Na pinove XTAL1 i XTAL2 povezuje se kvarcni oscilator i kondenzatori C1 i C2, kao što je prikazano na slici.

slika_kristal_osc

 

Vrijednost kondeznatora je ista za oba kondenzatora, a kreće se u rasponu  12-22 pF, za raspon frekvencije 0.4-20. Bit osigurači su podešeni na CKSEL3..1 = „011“ .

Vrijeme startovanja se podešava prema sljedećoj tabeli:

Vrsta oscilatora / Brzina porasta napona

Kašnjenje za power-down i za power-save

Dodatno kašnjenje od trenutka reseta (Vcc=5V)

CKSEL0SUT1..0
Keramički rezonator, brzi porast napona
 258 CK
 14CK + 4.1 ms
 0
 00
Keramički rezonator, spori porast napona
 258 CK
 14CK + 65 ms
 0
 01
Keramički rezonator, BOD detektor omogućen
 1K CK
 14CK 0 10
Keramički rezonator, brzi porast napona
 1K CK
 14CK + 4.1 ms
 0 11
Keramički reznoator, spori porast napona
 1K CK
 14CK + 65 ms
 1 00
Kristalni oscilator, BOD detektor omogućen 16K CK
 14CK 1 01
Kristalni oscilator, brzi porast napona
 16K CK  14CK + 4.1 ms
 1 10
Kristalni oscilator, spori porast napona  16K CK
 14CK + 65 ms
 1 11

 

Potrebno je obratiti pažnju da je CKDIV8 = „0“, što znači da je radna frekvencija mikrokontrolera jednaka frekvencija kristalnog oscilatora podijeljena sa 8. Ako je potrebno da je frekvencija rada mikrokontrolera jednaka frekvenciji kristalnog oscilatora, tada se bit osigurač CKDIV8 mora postaviti na 1.

Analogno se vriši podešavanje bit osigurača za bilo koju drugu vrstu oscilatora. Za vrijednosti bit osigurača potrebno je pogledati karakteristike korištenog mikrokontrolera.

Na sljedećoj slici prikazan je takt generator i njegova veza sa pojedinim komponentama u mikrokontroleru:

slika_takt_generator

(klikni na sliku da uvećaš)

Svi izlazi iz takt generatora ne moraju biti aktivni u isto vrijeme. Zbog toga, u cilju smanjenja potrošnje, moguće je izlaze koji se ne koriste zaustaviti koristeći neki od sleep modova.

Clk-cpu takt signal služi za rad komponenti potrebnih AVR jezgru, kao što su status registar, registri opšten namjene, memorija za čuvanje stekpointera i slično. Zaustavljanjem generisanja ovog signala onemogućava se izvršavanje opštih operacija i numeričkih operacija od strane procesora.

Clk-io koristi se za rad IO modula kao što su Timer-counter, SPI, USART i slično

Clk-flash za rad sa fleš memorijom, obično je istovremeno aktivna kad i clk-cpu takt signal.

Clk-asy takt signal koristi asinhroni brojač (eng. timer)

Clk-adc takt signal služi za rad A/D konvertora. Na ovaj način moguće je zaustaviti CPU i IO module u cilju smanjenja uticaja šuma na rad A/D konvertora, pri čemu se dobija tačnija vrijednost A/D konverzije.

Frekvencija takt signala može se mijenjati u odnosu na frekvenciju oscilatora podešavanjem vrijednosti registra CLKPR (clock prescale register, djelilac frekvencije - preskaler). Registar CLKPR prikazan je na sljedećoj slici:

 

slika_registra

(klikni na sliku da uvećaš)

U tabeli su prikazane vrijednosti registra i koeficijenti dijeljenja frekvencije glavnog oscilatora:

 CLKPS3 
 CLKPS2 
 CLKPS1   CLKPS0   Koeficijent dijeljenja
 0 0
 0
 0 1
 0 0 0 1 2
 0 0 1 0 4
 0 0 1 1 8
 0 1 0 0 16
 0 1 0 1 64
 0 1 1 0 128
 0 1 1 1 256
 1 0 0 0 Rezervisano
 1 0 0 1 Rezervisano
 1 0 1 0 Rezervisano
 1 0 1 1 Rezervisano
 1 1 0 0 Rezervisano
 1 1 0 1 Rezervisano
 1 1 1 0 Rezervisano
 1 1 1 1 Rezervisano


Bit osigurač CKDIV8 postavlja početnu vrijednost ovog registra. Ako je CKDIV8=0, tada je početna vrijednost registra CLPK 0011 pa je koeficijent dijeljenja frekvencije oscilatora 8, a ako je CKDIV8=1, tada je CLPK 0000 i koeficijent je 1. Potrebno je obratiti pažnju da se može upisati bilo koja vrijednost u CLKPR registar bez obzira na vrijednost CKDIV8.

Ukoliko se u toku rada želi promjeniti frekvencija rada takt signala tada je potrebno prvo upisati logičku jedinicu u CLKPCE a zatim postaviti vrijednosti CLKPS bitova da bi se dobio željeni koeficijent dijeljenja frekvencije. Postavljanje na logičku nulu bita CLKPCE  vrši se automatski putem hardvera nakon 4 ciklusa ili nakon upisivanja vrijednosti u CLKPS bitove.

Programiranja, odonosno podešavanje bit osigurača je jednostavno. Ukoliko se koristi AVR studio i AVR Dragon, podešavanja se vrše preko prozora prikazanog na sljedećoj slici:

slika_izbor

(klikni na sliku da uvećaš)

Ukoliko se koristi programator opisn ovdje, tada se priključenjem programatora i pokretanjem programa avrsp mogu očitati i postaviti odgovarajući bit osigurači. Naredbom >>avrsp –fr očitava se trenutna vrijednost bit osigurača. Postavljanje osigurača vrši se naredbom avrsp –fl  za postavljanje bit osigurača koji pripadaju nižem bajtu, a avrsp –fh za postavljanje bit osigurača koji pripadaju višem bajtu. Na slici je prikazan primjer očitavanja bit osigurača iz mikrokontrolera:

slika_read_fuse

(klikni na sliku da uvećaš)