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:
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:

kaip matote kiekvienam taktinio dažnio generatoriui yra duotas tam tikras nustatymų intervalas apie kuriuos skaitykit toliau.
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ų:

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:

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:

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 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:

Nustatymas pažymėtas (1) – atitinka mažiau stabilią pradžią
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ų:


Na ir žinoma darbo režimai:

Bei startup laikai:

Nustatymas pažymėtas (1) – nerekomenduojama naudoti prie maksimalių dažnio reikšmių
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:

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

Nustatymas pažymėtas (1) – gamyklinis nustatymas Atmega8 mikrovaldikliui
Apie vidinio RC generatoriaus kalibravimą skaitykite datasheet.
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:

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):

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


![]()

![]()
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
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ą