AVR mikrovaldiklių taktinio generatoriaus nustatymas

Tikriausiai nemažai pradedančiųjų AVR programuotojų susidūrė su AVR mikrovaldiklių „fuse“ bitų nustatymo pinklėmis. Labai dažna frazė pastaruoju metu yra: „Užprogramavau Atmega8 bet jis neveikia ir nebegaliu daugiau su juo nieko padaryti“. Taigi dažniausia problema yra netinkamas saugiklių – fuse nustatymas. Viena didžiausių problemų yra tai, kad čia užprogramuota reiškia „0“ o ne „1“ kaip esame įpratę.

Pažvelkim į viską atidžiau. Saugiklių nustatymo pavyzdžiuose naudojama PonyProg programa. Fuse bitų nustatymo langas konkrečiai Atmega8 mikrovaldikliui:

Atmega8Fuzes.JPG

 

Pirmiausia dėmesys krypta į taktinio dažnio šaltinio parinkimo nustatymus: CKSEL0, CKSEL1, CKSEL2, CKSEL3. Tikriausiai jums yra žinoma, jog Atmega8 ir kiti Mega serijos valdikliai gali turėti keturių tipų taktiniu generatorius:

  • Išorinį kvarcinį kristalą arba rezonatorių;

  • Išorinį žemo dažnio kristalą;

  • Išorinį RC generatorių arba kalibruotą vidinį RC generatorių;

  • Atskirą išorinį signalų generatorių.

Lentelėje matote visus generatorių pasirinkimus atitinkančius CKSEL0..3 nustatymus:

Visi_AVR_generatoriai.png

 

kaip matote kiekvienam taktinio dažnio generatoriui yra duotas tam tikras nustatymų intervalas apie kuriuos skaitykit toliau.

Išorinis kvarcinis rezonatorius

Išorinis kvarcinis rezonatorius arba tiesiog rezonatorius yra tikriausiai dažniausiai naudojamas formuojant taktinį dažnį. Jis gali būti nustatomas pasirenkant saugiklių reikšmes nuo 1010 iki 1111 (nepamirškit kad „0“ reiškia užprogramuota, o „1“ - ne). Šitos intervalas yra paliktas tam, kad būtų galima pasirinkti atitinkamus generatoriaus startavimo laikus, kol generatorius pradeda stabiliai veikti iki pradedama vykdyti pirma komanda.

Išorinis kvarcinis rezonatorius jungiamas prie AVR mikrovaldiklio XTAL1 ir XTAL2 kojų:

Kvarco_pajungimas.png

 

Kai naudojamas išorinis kvarcinis rezonatorius CKOPT bitas nustato du skirtingus generatoriaus stiprintuvo režimus. Jeigu CKOPT yra užprogramuotas (nužymėtas), tada generatoriaus amplitudė artima maitinimo įtampos reikšmei (rail-to-rail). Šitas režimas yra naudojamas kai aplinka yra „triukšminga“ arba atšaka nuo XTAL2 yra naudojama kito mikrokontrolerio sinchronizavimui. Šis režimas naudoja daugiau energijos. Normaliomis sąlygom CKOPT turėtų būti užžymėtas (neužprogramuotas), tam, kad būtų naudojama mažiau energijos. Paprastai esant rezonatoriau dažniui iki 8MHz CKOPT bitas yra neužprogramuotas (PonyProg -„užžymėtas“), ir užprogramuotas („nužymėtas“), kai dažnis yra virš 8MHz.

Lentelėje pavaizduoti fuse bitų nustatymai esant skirtingiems rezonatoriaus dažniams:

kvarco_dazniai.png

 

CKSEL0, SUT0 ir SUT1 bitai nustato mikrokontrolerio startavimo laiką, t.y. Kiek taktų turi praeiti iki pirmos komandos vykdymo. Šie nustatymai yra tam, kad garantuoti valdiklio stabilią darbo pradžią. Sekančioj lentelėj matyti CKSEL0, SUT0 ir SUT1 bitų nustatymus atitinkantys pasirinkimai:

kvarco_startup_laikai.png

 

Nustatymai pažymėti (1) – atitinka greitas pradžias – nerekomenduojami kvarciniams rezonatoriams;

Nustatymai pažymėti (2) – dažniausiai naudojami keraminiams rezonatoriams kad garantuoti stabilią darbo pradžią.

Paprastas patarimas, jeigu bet kokiu atveju norisi stabilios darbo pradžios, geriausia palikti CKSEL0, SUT0 ir SUT1 užprogramuotus (nepažymėtus), kas atitinka apie 65ms laiką iki pirmos komandos vykdymo.

Žemo dažnio generatorius

Žemo dažnio generatoriaus CKSEL0, CKSEL1, CKSEL2, CKSEL3 nustatymas yra tik vienas – 1001 (PonyProg - pažymėtas, nepažymėtas, nepažymėtas, pažymėtas). Žemo dažnio generatorius dažniausia būna tipinis 32768kHz kvarcinis rezonatorius naudojamas laikrodžiuose. Pagrindiniai nustatymai šiam režimui yra startup laikas nustatomas SUT0 ir SUT1 bitais:

low_freq.png

 

Nustatymas pažymėtas (1) – atitinka mažiau stabilią pradžią

Išorinis RC generatorius

Iš tikro ne visada būtina kabinti kvarcą prie kiekvieno mokrokontrolerio. Jeigu jis atlieka tam tikras valdymo operacijas ir nereikalauja didelio tikslumo tai pakanka naudoti RC generatorių. RC generatoriaus dažnis gali būti apskaičiuotas pagal formulę f=1/(3RC) , kur C – turi būti mažiausiai 22pF. Jeigu CKOPT yra užprogramuotas(nužymėtas), tuomet yra įjungtas vidinis 36pF kondensatorius tarp XTAL1 ir GND, tuomet išorėje tereikia prijungti rezistorių:

RC_RC.pngRC_R.png

 

Na ir žinoma darbo režimai:

RC_CKSEL.png

 

Bei startup laikai:

RC_startup.png

 

Nustatymas pažymėtas (1) – nerekomenduojama naudoti prie maksimalių dažnio reikšmių

Kalibruotas vidinis RC generatorius

Kalibruotas vidinis generatorius yra dažnai naudojamas dėl jo paprastumo, nes nereikia papildomų išorinių komponentų. Šis generatorius gali generuoti fiksuotas 1, 2, 4 ir 8MHz dažnius. Šitas režimas pasirenkamas užprogramuojant fuse bitus intervale 0001 iki 0100 (nepamirškit kad „0“ reiškia užprogramuota, o „1“ - ne). Šitam režimui CKOPT bitas turi būti neužprogramuotas (pažymėtas).

Darbo režimai:

InternalRC_dazniai.png

 

Nustatymas pažymėtas (1) – gamyklinis nustatymas Atmega8 mikrovaldikliui

Startup laikai:

internal_startups.png

 

Nustatymas pažymėtas (1) – gamyklinis nustatymas Atmega8 mikrovaldikliui

Apie vidinio RC generatoriaus kalibravimą skaitykite datasheet.

Išorinis generatorius

Manau šita vieta slidžiausia daugeliui pradedančiųjų AVR programuotojų. Nes CKSEL bitai žymimi priešingai nei kvarciniam generatoriui. Todėl dažnas atvejis kai visi CKSEL bitai sužymimi galvojant kad įjungiamas kvarcinis rezonatorius(o reikėtų juo nužymėti). Vienintelis kelias atstatyti toki mikrovaldiklį yra prijungti prie XTAL1 kojos išorinį generatorių, kad ir nuo kito AVR XTAL2 kojos:

isorinis_generatorius.png

 

Kaip ir minėjau, kad įjungti išorinį generatorių reikia palikti CKSEL0, CKSEL1, CKSEL2, CKSEL3 bitus neužprogramuotus(pažymėtus). Startup laikai pasirenkami atitinkamai iš lentelės(SUT0 ir SUT1):

isorinio_startup.png

 

Pavyzdžiai

Pabaigai pateikiu keletą pavyzdžių. Nustatymai parodyti naudojantis Ponyprog programa:

  • 8MHz kvarcinis generatorius, lėtas startas:

8MHz_kvarcinis.png

  • 2MHz keraminis rezonatorius greitas startas:

2MHz_ceramic.png

  • 32768kHz rezonatorius:

32768kHz.png

  • Išorinis RC 4MHz osciliatorius su su vidiniu kondesatoriumi:

4MHz.png

  • Na maksimali galia 16MHz kvarcas greitas startas:

16MHz.png

Kaip sakoma nieko naujo aš čia neparodžiau – viskas yra data-sheet, tik kartais juos pamirštama paskaitinėti. Jeigu yra klausimų arba netikslumų nesidrovėkit - klauskit.

Komentarai

Komentarų rodymo nustatymai

Pasirinkite patinkantį komentarų vaizdavimo būdą ir paspauskite "Išsaugoti nustatymus", kad pakeitimas įsigaliotų.

Re: AVR mikrovaldiklių taktinio generatoriaus nustatymas

labai geras dalykas yra fuse bitu skaiciuokle, nereik knistis po datasheeta http://palmavr.sourceforge.net/cgi-bin/fc.cgi

Re: AVR mikrovaldiklių taktinio generatoriaus nustatymas

labai geras dalykas yra fuse bitu skaiciuokle, nereik nieko ieskot datasheete, o ir klaidas padaryti mazesne tikimybe
http://palmavr.sourceforge.net/cgi-bin/fc.cgi

Skelbti naują komentarą

Šio laukelio turinys bus laikomas privatus ir nerodomas viešai.
CAPTCHA
Apsauga nuo spamo. Įveskite žemiau esantį kodą.
Image CAPTCHA
Copy the characters (respecting upper/lower case) from the image.