- Kas yra AVR saugikliai - išsamus paaiškinimas
- Saugiklių antgaliai „Arduino“
- Komponentai, kurių reikia norint patikrinti saugiklius AVR
- Saugiklių antgalių tikrinimo AVR schema
- Saugiklių tikrinimas AVR
Šioje pamokoje kalbėsime apie saugiklius. Kai buvau koledže ir sužinojau apie visus įdomius elektronikos dalykus, pirmą kartą išgirdau terminą „fuse“ AVR, mano pradinė mintis šia tema buvo, o! AVR viduje yra kažkas, kas sprogs, jei padariau ką nors ne taip. Tada internete nebuvo daug prieinamų išteklių. Nemažai ieškojau, norėdamas sužinoti, kad šie saugikliai nurodo kai kuriuos specialius AVR mikrovaldiklio viduje esančius antgalius. Šie bitai yra tarsi maži jungikliai AVR viduje ir juos įjungdami / išjungdami galime įjungti / išjungti kai kurias specialias AVR funkcijas. Jį įjungti ir išjungti reiškia nustatyti ir iš naujo nustatyti.
Pasinaudosime proga aptarti visa tai apie AVR saugiklių antgalius. Paprastumo dėlei paimkime „ Arduino“ plokštės, kurioje yra populiarus „ ATmega328P“ mikrovaldiklis, pavyzdį. Čia sužinosite, kaip nustatyti šiuos saugiklius tam, kad įjungtumėte ir išjungtumėte kai kurias iš šių funkcijų, o tai labai naudinga tikrovėje. Taigi, eikime tiesiai į tai.
Ankstesniuose pranešimuose mes sukūrėme daugybę AVR mikrovaldiklių projektų, tokių kaip „Interfacing GSM“ modulis su „AVR“ mikrovaldikliu ir „Interfacing HC-05“ su „AVR“ mikrovaldikliu. Galite juos patikrinti, jei norite sužinoti daugiau apie tuos projektus.
Kas yra AVR saugikliai - išsamus paaiškinimas
Kaip aptarėme anksčiau, mikrovaldiklio saugikliai yra tarsi maži jungikliai, kuriuos galima įjungti ir išjungti, kad įjungtumėte ir išjungtumėte įvairias AVR mikrovaldiklio funkcijas. Tai yra ta dalis, kurioje kyla kitas mūsų klausimas, tai kaip nustatyti ar atstatyti šiuos saugiklius? Atsakymas į šį klausimą yra paprastas: mes tai darome naudodami saugiklių registrus.
ATmega328P IC iš viso yra 19 saugiklių bitų ir jie yra suskirstyti į tris saugiklių baitus. Jie apibrėžiami kaip „Išplėstiniai saugiklių baitai“, „Didelio saugiklio baitas“ ir „Žemas saugiklių baitas“.
Pažvelgę į ATmega328 / P duomenų lapo Rev: 7810D – AVR – 01/15 27 lentelę, galite sužinoti visą mažą informaciją apie saugiklių antgalius. Bet žemiau pateiktas vaizdas suteiks jums geresnę idėją apie duomenų lapo saugiklių antgalių skyrių.
Dabar, kai šiek tiek sužinojote apie saugiklių antgalius, pereikime duomenų lapą ir sužinokime visą reikalingą informaciją apie šį IC.
Išplėstiniai saugiklių antgaliai:
Spustelėję skirtuką „Saugiklių bitai“ ir šiek tiek slinkdami žemyn, rasite lentelę 27–5: kurioje rodoma „Išplėstinio saugiklio baito“, paprastai vadinamo „ EFUSE“, lentelė. Žemiau pateiktame paveikslėlyje tiksliai parodyta.
Šioje lentelėje yra tik trys naudojami bitai, o kiti trys yra rezervuoti. Šie trys bitai susiję su „ Brownout“ aptikimo lygiu. Kaip matote pastaboje, jei pažvelgsime į 28-5 lentelę, galime rasti daugiau informacijos apie tai.
Kaip matote aukščiau pateiktoje lentelėje, turime lentelę, skirtą „ Brownout“ aptikimui. „Brownout“ aptikimas yra funkcija, kuri iš naujo nustato mikrovaldiklį, kai maitinimo įtampa nukrenta žemiau tam tikro įtampos lygio. „ATmega328P IC“ galime visiškai išjungti rudos spalvos aptikimą arba nustatyti jį į aukščiau pateiktoje lentelėje nurodytus lygius.
Didelio saugiklio baitai:
Kaip matote paveikslėlyje žemiau, duomenų lapo 27-6 lentelėje rodomi ATmega328P IC aukštesniojo saugiklio bitai.
„ High fuse“ saugiklis atlieka įvairias užduotis „ATmega328“ mikrovaldiklyje. Šiame skyriuje kalbėsime apie aukštesnių saugiklių antgalius ir jų veikimą. Pradėkime nuo bitų BOOTRST, BOOTSZ0 ir BOOTSZ1. Šie trys bitai yra atsakingi už bagažinės dydžio nustatymą; įkrovos dydis nurodo atminties kiekį, skirtą įdiegti įkroviklį.
Įkrovos programa yra speciali programinė įranga, veikianti ant mikrovaldiklio ir valdanti įvairias užduotis. Tačiau „Arduino“ atveju įkrovos įkroviklis naudojamas „Arduino“ eskizui įkelti į mikrovaldiklį. Viename iš ankstesnių mūsų straipsnių parodėme, kaip įrašyti įkrovos programą „ATmega328P“ naudojant „Arduino“. Galite tai patikrinti, jei jus domina tema. Grįžtant prie mūsų temos, kitų aukšto baito bitų tikslai yra pakankamai aiškūs, EESAVE bitai yra išsaugoti EEPROM atmintį, kol atliekamas lusto ištrynimo ciklas. WDTON bitai yra įjungti arba išjungti „ Watchdog“ laikmatį.
Sargybos laikmatis yra specialus „ATmega328P IC“ laikmatis, turintis atskirą laikrodį ir veikiantis savarankiškai. Jei budėjimo laikmatis yra įjungtas, turite jį išvalyti per tam tikrą laikotarpį, kitaip sargybos laikmatis atstatys mikrovaldiklį. Tai yra naudinga funkcija, kuri yra daugelyje mikrovaldiklių, jei procesorius užstringa; budėjimo šuo jį atstatys, kad būtų išvengta galinės programos pažeidimų.
DWEN bitas yra skirtas įjungti derinimo laidą; tai yra parengiamasis protokolas, kuris yra įmontuotas jų aparatinėje įrangoje, naudojamas programuoti ir derinti procesorius. Įjungę šią funkciją, galite mirksėti ir derinti procesorių, prijungę vieną laidą. Bet norint jį naudoti, jums reikės specialios „Atmel“ parengiamosios įrangos.
Likę du bitai yra tie bitai, kurių reikia vengti, nebent tiksliai žinote, ką darote. Tai yra „RSTDISBL bit-7“ ir „SPIEN bit-5“. RSTDISBL (External Reset Disable), kaip rodo pavadinimas, išjungia išorinį aparatūros atstatymo kaištį, o SPIEN bitas naudojamas SPI programavimo sąsajai išjungti. Išjungus bet kurį iš šių dviejų bitų, jūsų AVR gali būti visiškai pakeistas; Taigi, palikti juos ramybėje yra gera idėja.
Maži saugiklių baitai:
Kaip matote paveikslėlyje žemiau, duomenų lapo 27–7 lentelėje parodyti apatinio saugiklio „ATmega328P IC“ bitai.
Šis saugiklio baitas yra atsakingas už laikrodžio šaltinio ir kai kurių kitų laikrodžio parametrų nustatymą AVR viduje. Šiame skyriuje sužinosime apie visa tai.
Septintąjį bitą arba CKDIV8 vėliavą galima nustatyti padalinti laikrodžio šaltinį iš 8, tai labai praverčia, ką jau galite žinoti, jei patys bandėte programuoti AVR. Kitas bitas yra CKOUT bitas ir jis yra 6-tas bitas žemo saugiklio baite. Tai užprogramavus, mikrovaldiklio PORTB0 bus išvestas vidinis laikrodžio signalas.
Bitai-5 ir bitai-4 SUT1 ir SUT0 kontroliuoja mikrovaldiklio paleidimo laiką. Tai užkerta kelią bet kokiems paleidimo veiksmams, kurie gali būti atliekami arba nevykdomi, kol maitinimo įtampa pasiekia priimtiną minimalų slenkstinės įtampos lygį. Keturi paskutiniai CKSEL0 - 4 bitai naudojami mikrovaldiklio laikrodžio šaltiniui pasirinkti. Žemiau pateiktoje lentelėje galite geriau suprasti šiuos keturis bitus, kurie yra atsakingi už laikrodžio šaltinio nustatymą. Šią lentelę galite rasti duomenų lapo skyriuje „Laikrodžio šaltinis“.
Dabar, kol nepasieksime tolimesnio, turėčiau pereiti dar vieną dalyką - tai osciliatorių paleidimo atidėjimo lentelė. Pagal paleidimo vėlavimą mes nurodome apatinio saugiklio baito 4 ir 5 bitus. Vėlavimą reikia nustatyti atsižvelgiant į sąlygą, kurioje veiks grandinė, ir nuo naudojamo osciliatoriaus tipo. Numatytosios vertės nustatomos kaip lėtai kylanti galia su 6 laikrodžio ciklais, kai atliekama įjungimo arba išjungimo seka. Be to, yra dar vienas 14 laikrodžio ciklų vėlavimas su 65 Ms vėlavimu po paleidimo.
Phew! Tai buvo daug informacijos suvirškinti. Bet prieš tęsdami toliau, baigkime šį skyrių greitai.
Pastaba:
Jei atidžiai pažvelgėte į duomenų lapą, turėtumėte pastebėti, kad saugiklio bitų programavimas reiškia, kad jį reikia nustatyti žemai, ty 0 (nulis), o tai yra priešingai nei mes paprastai darome, kad prievadas būtų aukštas arba žemas. Konfigūruodami saugiklius, turite tai nepamiršti.
Saugiklių antgaliai „Arduino“
Aukščiau pateiktame skyriuje daug kalbėjome apie saugiklius, tačiau šiame skyriuje pakalbėkime apie tai, kaip juos sukonfigūruoti ir kaip juos įrašyti į mikrovaldiklį. Tam mums reikės įrankio, vadinamo „ Avrdude“. Tai įrankis, kuriuo galima skaityti, rašyti ir modifikuoti atmintį AVR mikrovaldikliuose. Jis veikia su SPI ir turi ilgą įvairių tipų programuotojų palaikymo sąrašą. įrankį galite atsisiųsti iš toliau pateiktos nuorodos. Be to, naudosime mėgstamą mikrovaldiklį „Arduino“.
- Atsisiųskite „Avrdude“ versiją 6.3 „Windows-ming32“
Dabar, kai turite „Avrdude“, turite tai išgauti ir atidaryti komandų langą tame aplanke. Be to, jei planuojate jį naudoti vėliau, galite pridėti aplanko kelią į „Windows“ aplinkos kintamųjų skyrių. Bet aš įdėsiu jį į savo darbalaukį ir ten atidarysiu komandų langą. Tai padarę, prijungsime „ USBasp“ programuotoją prie savo kompiuterio ir įsitikinsime, kad turime tinkamą „USBasp“ programuotojo tvarkyklę. Kai tai padarysime, mums gera eiti ir pirmiausia perskaitysime numatytąją saugiklio vertę. Norėdami tai padaryti, turite paleisti šią komandą.
avrdude.exe -c usbasp -p m328p -U lfuse: r: low_fuse_val.txt: h -U hfuse: r: high_fuse_val.txt: h -U efuse: r: ext_fuse_val.txt: h
Jei viskas teisinga, ši komanda nuskaitys saugiklių baitus ir įdės juos į tris atskirus tekstinius failus. Žemiau pateiktas paveikslėlis padės geriau suprasti procesą.
Kaip matote, „Avrdude“ perskaitė saugiklių antgalius „Arduino nano“ ir išsaugojo juos į tris atskirus tekstinius failus. Dabar mes juos atidarėme ir gavome tris vertybes; už EFUSE: 0xFD, už HFUSE: 0XDA, už LFUSE: 0xFF. Tai buvo numatytoji saugiklio vertė, kurią gavome „Arduino nano“. Dabar paverskime šiuos bitus į dvejetainius duomenis ir palyginkime juos su numatytąja verte iš duomenų lapo. Žemiau esančioje lentelėje tiksliai parodyta.
Patogumo sumetimais saugiklių bitai rašomi šešioliktainėmis reikšmėmis, tačiau jei jas paversime dvejetainėmis reikšmėmis ir palyginsime su duomenų lapu, žinosime, kas vyksta. Pradėkime nuo apatinio saugiklio baito. Kaip matote iš pirmiau pateiktos eilutės, ji nustatyta kaip 0XFF, o dvejetainė reikšmė būtų 0B11111111.
Apatinių saugiklių baitų palyginimas su „Arduino“:
Mažas saugiklių baitas |
Bitukas Nr. |
Numatytoji AVR vertė |
Numatytoji „Arduino“ vertė |
CKDIV8 |
7 |
0 (užprogramuota) |
1 (neužprogramuota) |
IŠSKIRTI |
6 |
1 (neužprogramuota) |
1 (neužprogramuota) |
SUT1 |
5 |
1 (neužprogramuota) |
1 (neužprogramuota) |
SUT0 |
4 |
0 (užprogramuota) |
1 (neužprogramuota) |
CKSEL3 |
3 |
0 (užprogramuota) |
1 (neužprogramuota) |
CKSEL2 |
2 |
0 (užprogramuota) |
1 (neužprogramuota) |
CKSEL1 |
1 |
1 (neužprogramuota) |
1 (neužprogramuota) |
CKSEL0 |
0 |
0 (užprogramuota) |
1 (neužprogramuota) |
Aukštojo saugiklio baitas yra nustatytas kaip 0XDA dvejetainiu, tai yra 0B11011010.
Didesnis saugiklių baitas dvejetainiais:
Didelio saugiklio baitas |
Bitukas Nr. |
Numatytoji AVR vertė |
Numatytoji „Arduino“ vertė |
RSTDISBL |
7 |
1 (neužprogramuota) |
1 (neužprogramuota) |
DWEN |
6 |
1 (neužprogramuota) |
1 (neužprogramuota) |
SPIEN |
5 |
0 (užprogramuota) |
0 (užprogramuota) |
WDTON |
4 |
1 (neužprogramuota) |
1 (neužprogramuota) |
EESAVE |
3 |
1 (neužprogramuota) |
1 (neužprogramuota) |
BOOTSZ1 |
2 |
0 (užprogramuota) |
0 (užprogramuota) |
BOOTSZ0 |
1 |
0 (užprogramuota) |
1 (neužprogramuota) |
BOOTRST |
0 |
1 (neužprogramuota) |
0 (užprogramuota)) |
Išplėstinio saugiklio baito nustatymas yra 0XFD, dvejetainis - 0B11111101.
Išplėstinis saugiklių baitas dvejetainiais:
Išplėstinis saugiklių baitas |
Bitukas Nr. |
Numatytoji AVR vertė |
Numatytoji „Arduino“ vertė |
- |
7 |
1 |
1 |
- |
6 |
1 |
1 |
- |
5 |
1 |
1 |
- |
4 |
1 |
1 |
- |
3 |
1 |
1 |
BODLEVEL2 |
2 |
1 (neužprogramuota) |
1 (neužprogramuota) |
BODLEVEL1 |
1 |
1 (neužprogramuota) |
0 (užprogramuota) |
BODLEVEL0 |
0 |
1 (neužprogramuota) |
1 (neužprogramuota) |
Dabar tai reiškia šio skyriaus pabaigą. Nuo šiol mes daug sužinojome apie AVR mikrovaldiklį ir jo saugiklių antgalius. Taigi, apibendrinkime šį straipsnį išbandydami savo teoriją, keisdami ir eksperimentuodami su kai kuriais „Arduino Nano“ saugiklių antgaliais.
Komponentai, kurių reikia norint patikrinti saugiklius AVR
Aukščiau pateiktoje dalyje daug kalbėjome apie saugiklius. Bet norint tęsti toliau šiame straipsnyje, mums reikia kai kurių aparatūros komponentų ir kai kurių programinės įrangos įrankių. Šiame skyriuje kalbėsime apie tuos. Reikiamų komponentų su vaizdais sąrašas pateikiamas žemiau.
- Duonos lenta - 1
- „Arduino Nano“ - 1
- „USBasp AVR“ programuotojas - 1
- USB kabelis - 1
- AVR 10-pin į 6-pin keitiklis - 1
- „Avrdude“ (programinės įrangos įrankis AVR programavimui)
- LED - 1
- 330R rezistorius - 1
- „Jumper“ kabeliai
Saugiklių antgalių tikrinimo AVR schema
Aparatinės įrangos testavimo sąranka parodyta žemiau šioje sąrankoje. USB kabeliu prijungėme „Arduino Nano“ prie kompiuterio, taip pat prie kompiuterio prijungėme „USBasp“ programuotoją. Šio straipsnio tikslas yra užprogramuoti saugiklių bitus AVR. Dėl šios priežasties mes prijungėme „USBasp“ programuotoją prie „Arduino“. Žemiau pateiktas vaizdas suteiks jums geresnę supratimą apie sąranką.
Saugiklių tikrinimas AVR
Testavimo sąranka parodyta žemiau. Kaip matote, „Arduino“ ir „USBasp“ programuotojus prijungėme prie mano nešiojamojo kompiuterio USB.
Dabar atidarykime „Arduino IDE“ ir įkelkite pagrindinį mirksėjimo eskizą. Pagrindinio mirksinčio eskizo turinys yra savaime suprantamas, todėl apie tai nepateikiau jokių detalių.
Vaizdo įraše pamatysite, kad kištukas Nr. 13 mirksi taip, kaip turėtų. Dabar pakoreguokite saugiklio nustatymus ir nustatykite numatytąsias reikšmes. Ir kaip anksčiau matėme duomenų lape; EFUSE yra 0xFF; HFUSE yra D9; LFUSE yra: 62. Dabar sukonfigūruokime jį su „Avrdude“, pamirkykime ir pažiūrėkime, kas bus. Kodas, kurį naudosime, yra
avrdude -c usbasp -p m328P -U lfuse: w: 0x62: m -U hfuse: w: 0xd9: m -U efuse: w: 0xff: m
Kai tai padarysiu, pamatysite, kad šviesos diodas mirksi labai lėtai, nes mes apskaičiavome ir užprogramavome 16Mhz laikrodžio vertę, o dabar, sudeginus saugiklius, tai tik 1Mhz vidinis RC osciliatorius. Štai kodėl šviesos diodas mirksi taip lėtai. Dabar pabandykime dar kartą įkelti eskizą. Pamatysime, kad „Arduino“ išleidžia klaidą ir kodas nėra įkeltas. Nes keisdami saugiklius, mes taip pat sujaukėme įkrovos programos parametrus. Tai galite pamatyti žemiau esančiame paveikslėlyje.
Norėdami tai išspręsti ir „Arduino“ grąžinti atgal, kaip buvo anksčiau, turime tiesiog dar kartą įrašyti „Arduino“ įkrovos programą. Norėdami tai padaryti, eikite į Įrankiai -> Programuotojas - USBasp ir, kai tai padarysime, vėl galėsime eiti į įrankius ir spustelėti įrašymo įkrovos parinktį. Tai vėl sudegins „Arduino“ atsargų įkrovos įrankį ir viskas grįš taip, kaip buvo anksčiau.
Po to, kai įkrovos įrankis buvo sugrąžintas atgal į „Arduino“, jis grįžo į savo pradinę būseną, o paskutiniame paveikslėlyje rodomas mirksintis šviesos diodas po to, kai įkrovos įrenginys vėl buvo sudegintas.
Ir tai žymi šio straipsnio pabaigą. Tikiuosi, kad jums patiko straipsnis ir sužinojote kažką naujo. Jei turite klausimų dėl straipsnio, nedvejodami pateikite komentarą žemiau.