- Mik az AVR biztosítékai - Részletes magyarázat
- Biztosíték bitek Arduino-ban
- Az AVR biztosítékának teszteléséhez szükséges alkatrészek
- Vázlat a biztosíték bitek tesztelésére az AVR-ben
- A biztosítékok tesztelése AVR-ben
Ebben az oktatóanyagban biztosítókról fogunk beszélni. Még főiskolás koromban, és megismertem az elektronika minden jó dolgát, először hallottam az AVR-ben a fuse kifejezést, a kezdeti gondolatom a témában az volt, hogy ó! van valami az AVR belsejében, ami fel fog ütni, ha valamit rosszul csináltam. Akkor még nem volt sok forrás elérhető az interneten keresztül. Elég sokat kerestem, hogy megtudjam, hogy ezek a biztosítékok az AVR mikrokontroller belsejében található speciális bitekre vonatkoztak. Ezek a bitek olyanok, mint az AVR belsejében található apró kapcsolók, amelyek be- és kikapcsolásával be- és kikapcsolhatjuk az AVR néhány speciális tulajdonságát. A be- és kikapcsolás a beállítást és a visszaállítást jelenti.
Meg fogjuk használni ezt a lehetőséget, hogy megvitassuk mindazt, ami az AVR biztosíték bitjeiről szól. Az egyszerűség kedvéért példát veszünk egy Arduino táblára, amely a népszerű ATmega328P mikrovezérlőnek ad otthont. Itt megtudhatja, hogyan állíthatja be ezeket a biztosítékokat ezen funkciók némelyikének be- és kikapcsolására, ami nagyon hasznos a valós alkalmazásokban. Szóval, menjünk bele rögtön.
Korábbi bejegyzéseinkben rengeteg AVR mikrokontroller projektet építettünk, mint például az Interfacing GSM modul AVR mikrovezérlővel és az Interfacing HC-05 AVR mikrovezérlővel. Megnézheti őket, ha többet szeretne megtudni ezekről a projektekről.
Mik az AVR biztosítékai - Részletes magyarázat
Amint arról korábban tárgyaltunk, a mikrovezérlő biztosítékai olyanok, mint a kis kapcsolók, amelyeket be- és kikapcsolhatunk az AVR mikrovezérlő különféle funkcióinak engedélyezésére és letiltására. Ez az a rész, ahol felmerül a következő kérdésünk, akkor hogyan állítsuk be vagy állítsuk vissza ezeket a biztosítékokat? A kérdésre a válasz egyszerű: Biztosíték-regiszterek segítségével csináljuk.
Az ATmega328P IC-ben összesen 19 biztosítékbit található, és három biztosítékbájtra vannak felosztva. Ezeket „kiterjesztett biztosíték bájtok”, „nagy biztosíték bájt” és „alacsony biztosíték bájt” definiálják .
Ha megnézi az ATmega328 / P Rev: 7810D – AVR – 01/15 adatlap 27. táblázatát, megtudhatja a biztosíték bitjeinek összes apró részletét. De az alábbi kép jobb képet fog adni az adatlap biztosíték bitjeiről.
Most, hogy már megtanult egy kicsit a biztosíték bitjeiről, nézzük át az adatlapot, és derítsük ki az IC összes szükséges részletét.
Kiterjesztett biztosíték bitek:
Ha rákattint a Fuse Bits fülre, és kissé lefelé görget, megtalálja a 27-5. Táblázatot: amely a „Kiterjesztett biztosíték bájt” táblázatot mutatja, amely általában „ EFUSE” néven ismert . Az alábbi kép pontosan ezt mutatja.
Ebben a táblázatban csak három használható bit található, a másik három pedig fenntartva. Ez a három bit a Brownout Detection szinttel foglalkozik. Amint a Megjegyzésből kiderül, ha megnézzük a 28-5. Táblázatot, további részleteket találhatunk róla.
Amint a fenti táblázatból látható, megvan a Brownout Detection táblázata. A barnulás kimutatása olyan funkció, amely alaphelyzetbe állítja a mikrovezérlőt, amikor a tápfeszültség egy bizonyos feszültségszint alá esik. Az ATmega328P IC-ben teljesen letilthatjuk a barnulás észlelését, vagy beállíthatjuk a fenti táblázatban bemutatott szintekre.
A magas biztosíték bájtok:
Amint az alábbi képen látható, az adatlap 27-6: táblázata az ATmega328P IC magasabb biztosíték bitjeit mutatja.
A magas biztosíték különféle feladatokkal foglalkozik az ATmega328 mikrokontrolleren belül. Ebben a részben a magasabb biztosító bitekről és működésükről fogunk beszélni. Kezdjük a BOOTRST, BOOTSZ0 és BOOTSZ1 bitekkel. Ez a három bit felelős a csomagtartó méretének beállításáért; A boot size a rendszerbetöltő telepítéséhez fenntartott memória mennyiségére vonatkozik .
A bootloader egy speciális szoftver, amely a mikrovezérlő tetején fut és különböző feladatokat kezel. De az Arduino esetében a rendszerindítót használják az Arduino vázlat feltöltésére a mikrovezérlőbe. Egyik korábbi cikkünkben bemutattuk, hogyan kell megírni a Bootloadert az ATmega328P-ben az Arduino használatával. Ezt megnézheti, ha érdekli a téma. Visszatérve a témánkhoz, a magas bájt többi bitjének célja ésszerűen világossá válik, az EESAVE bit az EEPROM memória megőrzése, miközben chip törlési ciklus alatt van. A WDTON bit a Watchdog Timer engedélyezésére vagy letiltására szolgál.
A watchdog időzítő az ATmega328P IC speciális időzítője, amelynek külön órája van és függetlenül működik. Ha a watchdog időzítő engedélyezve van, akkor egy bizonyos időtartamra törölnie kell, különben a watchdog időzítő alaphelyzetbe állítja a mikrovezérlőt. Ez egy hasznos funkció, amely sok mikrovezérlőben megtalálható, ha a processzor elakad; a watchdog alaphelyzetbe állítja, hogy megakadályozza a végalkalmazás károsodását.
A DWEN bit a hibakereső vezeték engedélyezésére szolgál; ez egy belső előkészítő protokoll, amely beépül a hardverükbe, és amelyet a processzorok programozására és hibakeresésére használnak. Ha ez a funkció engedélyezve van, akkor egyetlen vezetékkel csatlakoztatva villoghat és hibakereshető a processzor. De a használatához speciális hardverre lesz szükség, amely előkészíti az Atmel-t.
A fennmaradó két bit olyan bit, amelyet el kell kerülnie, hacsak nem tudja pontosan, hogy mit csinál. Ezek az RSTDISBL bit-7 és a SPIEN bit-5. Az RSTDISBL (External Reset Disable), amint a neve is mutatja, letiltja a külső hardver-visszaállító tűt, és a SPIEN bitet az SPI programozási felület letiltására használják. E két bit bármelyikének letiltása teljesen téglává teheti az AVR-t; tehát békén hagyni őket jó ötlet.
Alacsony biztosíték bájtok:
Amint az alábbi képen látható, az adatlap 27-7. Táblázata az ATmega328P IC alsó biztosíték bitjeit mutatja.
Ez a biztosíték bájt felelős az óraforrás és az óra néhány egyéb paraméterének beállításáért az AVR-ben. Ebben a részben megismerjük mindazt.
A 7. bit vagy a CKDIV8 zászló beállítható úgy, hogy elosztja az óra forrását 8-mal, ez nagyon jól jön, amit már akkor is tudhat, ha maga próbálta meg beprogramozni az AVR-t. A következő bit a CKOUT bit, és ez a 6. bit az alacsony biztosítékú bájtban. Programozása kimeneti a belső órajelet a mikrovezérlő PORTB0-ján.
Az 5-ös és 4-es bit SUT1 és SUT0 vezérli a mikrovezérlő indítási idejét. Ez megakadályozza az indítási műveleteket, amelyek történhetnek, vagy nem, mielőtt a tápfeszültség elérné az elfogadható minimális küszöbfeszültség szintjét. És az utolsó négy CKSEL0 - 4 bitet használjuk a mikrovezérlő órajelének kiválasztására. Az alábbi táblázat jobb megértését nyújtja ennek a négy bitnek, amelyek felelősek az óraforrás beállításáért. Ezt a táblázatot megtalálhatja az adatlap Óraforrás szakaszában.
Mielőtt továbbjutnánk, még egy dolgot át kell néznem, az oszcillátor indítási késleltetésére vonatkozó táblázatot. Az indítási késleltetéssel az alsó biztosíték byte 4. és 5. bitjére hivatkozunk. A késéseket az áramkör működésének feltételétől és az alkalmazott oszcillátor típusától függően kell beállítani. Az alapértelmezett értékeket lassan növekvő teljesítményre állítják be, 6 óra ciklussal, ha bekapcsolási vagy kikapcsolási sorrendet hajtanak végre. Ezután következik még egy 14 órás ciklus késleltetése 65 Ms késéssel az indítás után.
Phew! Ez sok információ volt megemésztendő. De mielőtt tovább folytatnánk, fejezzük be ezt a részt egy gyors megjegyzéssel.
Jegyzet:
Ha alaposan megnézte az adatlapot, biztosan észrevette, hogy a biztosíték bit programozása azt jelenti, hogy alacsonyra, azaz 0-ra (nulla) állítja be, ami ellentétes azzal, amit általában teszünk egy port magas vagy alacsony szintjének eléréséhez. A biztosítékok konfigurálásakor ezt szem előtt kell tartania.
Biztosíték bitek Arduino-ban
A fenti szakaszban sokat beszéltünk a biztosítékokról, de ebben a részben beszéljünk arról, hogyan kell konfigurálni őket, és miként írhatjuk őket egy mikrovezérlőbe. Ehhez szükségünk lesz egy Avrdude nevű eszközre. Ez egy olyan eszköz, amellyel memória olvasható, írható és módosítható az AVR mikrokontrollerekben. Ez az SPI-vel működik, és sokféle támogatást tartalmaz a különféle típusú programozók számára. letöltheti az eszközt az alábbi linkről. Továbbá kedvenc Arduino mikrovezérlőnket fogjuk használni.
- Töltse le az Avrdude 6.3 verziót Windows-ming32
Most, hogy van Avrdude, ezt ki kell vonnia, és meg kell nyitnia egy parancsablakot abban a mappában. Ezenkívül, ha később kívánja használni, hozzáadhatja a mappa elérési útját a Windows környezeti változó szakaszához. De felteszem az asztalomra, és ott megnyitok egy parancsablakot. Miután ezt megtettük, csatlakoztatjuk az USBasp programozót a számítógépünkhöz, és megbizonyosodunk arról, hogy rendelkezünk-e az USBasp programozónk megfelelő illesztőprogramjával. Miután ezt megtettük, jónak tartjuk, és először kiolvassuk az alapértelmezett biztosíték értékét. Ehhez a következő parancsot kell futtatnia.
avrdude.exe -c usbasp -p m328p -U lfuse: r: low_fuse_val.txt: h -U hfuse: r: high_fuse_val.txt: h -U effuse: r: ext_fuse_val.txt: h
Ha minden rendben van, akkor ez a parancs beolvassa a biztosíték bájtjait, és három különálló szövegfájlba helyezi őket. Az alábbi kép jobb képet ad a folyamatról.
Mint látható, az Avrdude végigolvasta az Arduino nano biztosítékbitjeit, és három külön szövegfájlba mentette őket. Most kinyitottuk őket, és három értéket kaptunk; A EFUSE: 0xFD, az HFUSE: 0XDA, az LFUSE: 0xFF. Ez volt az alapértelmezett biztosítékérték egy Arduino nano esetében. Most konvertáljuk ezeket a biteket binárisra, és hasonlítsuk össze őket az adatlap alapértelmezett értékével. Az alábbi táblázat pontosan ezt mutatja.
A kényelem kedvéért a biztosítékbiteket hexadecimális értékekkel írják, de ha bináris értékekké konvertáljuk őket, és összehasonlítjuk az adatlapdal, akkor tudjuk, mi történik. Kezdjük az alsó biztosíték bájttal. Amint a fenti karakterláncból látható, 0XFF-re van állítva, és a bináris érték 0B11111111 lenne .
A készlet alsó biztosíték-bájtjainak összehasonlítása az Arduinóval
Alacsony biztosíték bájt |
Bit No. |
Alapértelmezett érték az AVR-ben |
Az Arduino alapértelmezett értéke |
CKDIV8 |
7 |
0 (beprogramozva) |
1 (programozatlan) |
KIVÉTEL |
6. |
1 (programozatlan) |
1 (programozatlan) |
SUT1 |
5. |
1 (programozatlan) |
1 (programozatlan) |
SUT0 |
4 |
0 (beprogramozva) |
1 (programozatlan) |
CKSEL3 |
3 |
0 (beprogramozva) |
1 (programozatlan) |
CKSEL2 |
2 |
0 (beprogramozva) |
1 (programozatlan) |
CKSEL1 |
1 |
1 (programozatlan) |
1 (programozatlan) |
CKSEL0 |
0 |
0 (beprogramozva) |
1 (programozatlan) |
A Magasabb Biztosíték Bájt 0XDA-ra van állítva binárisan, amely 0B11011010.
Magasabb biztosíték bájt binárisan:
Magas biztosíték bájt |
Bit No. |
Alapértelmezett érték az AVR-ben |
Az Arduino alapértelmezett értéke |
RSTDISBL |
7 |
1 (programozatlan) |
1 (programozatlan) |
DWEN |
6. |
1 (programozatlan) |
1 (programozatlan) |
SPIEN |
5. |
0 (beprogramozva) |
0 (beprogramozva) |
WDTON |
4 |
1 (programozatlan) |
1 (programozatlan) |
EESAVE |
3 |
1 (programozatlan) |
1 (programozatlan) |
BOOTSZ1 |
2 |
0 (beprogramozva) |
0 (beprogramozva) |
BOOTSZ0 |
1 |
0 (beprogramozva) |
1 (programozatlan) |
BOOTRST |
0 |
1 (programozatlan) |
0 (beprogramozva)) |
A kiterjesztett biztosíték bájt beállítása 0XFD, binárisan 0B11111101.
Kiterjesztett biztosíték bájt bináris formátumban:
Kiterjesztett biztosíték byte |
Bit No. |
Alapértelmezett érték az AVR-ben |
Az Arduino alapértelmezett értéke |
- |
7 |
1 |
1 |
- |
6. |
1 |
1 |
- |
5. |
1 |
1 |
- |
4 |
1 |
1 |
- |
3 |
1 |
1 |
BODLEVEL2 |
2 |
1 (programozatlan) |
1 (programozatlan) |
BODLEVEL1 |
1 |
1 (programozatlan) |
0 (beprogramozva) |
BODLEVEL0 |
0 |
1 (programozatlan) |
1 (programozatlan) |
Ez a szakasz végét jelenti. Mostanáig sokat tanultunk az AVR mikrovezérlőről és annak biztosítókról. Tehát foglaljuk össze ezt a cikket úgy, hogy teszteljük elméletünket az Arduino Nano egyes biztosítékbitjeinek megváltoztatásával és kísérletezésével.
Az AVR biztosítékának teszteléséhez szükséges alkatrészek
A fenti részben sokat beszéltünk a biztosítékokról. De a cikk további folytatásához szükségünk van néhány hardverkomponensre és néhány szoftvereszközre. Ebben a részben ezekről fogunk beszélni. Az alábbiakban felsoroljuk a szükséges komponenseket és képeket.
- Kenyérlemez - 1
- Arduino Nano - 1
- USBasp AVR programozó - 1
- USB kábel - 1
- AVR 10-tűs 6-tűs átalakító - 1
- Avrdude (szoftver eszköz az AVR programozásához)
- LED - 1
- 330R ellenállás - 1
- Jumper kábelek
Vázlat a biztosíték bitek tesztelésére az AVR-ben
A hardver tesztelési beállításai az alábbiakban láthatók. USB-kábellel csatlakoztattuk az Arduino Nano-t a PC-hez, és csatlakoztattuk az USBasp programozót is a PC-hez. A cikk célja az AVR biztosítékbitjeinek programozása. Ezért csatlakoztattuk az USBasp programozót az Arduinóhoz. Az alábbi kép jobb képet nyújt a beállításról.
A biztosítékok tesztelése AVR-ben
A tesztelés beállítása alább látható. Amint láthatja, csatlakoztattuk az Arduino-t és az USBasp programozót a laptopom USB-jéhez.
Most nyissuk meg az Arduino IDE-t, és töltsünk fel egy alapvető villogó vázlatot. Az alap pislogási vázlat tartalma magától értetődő, ezért nem tettem róla részleteket.
Látni fogja a videón, hogy a 13-as tűn a led villog, ahogy kell. Most módosítsuk a biztosíték beállításait, és állítsuk be az alapértelmezett értékekre. És amint azt az adatlapon korábban láthattuk; az EFUSE értéke 0XFF; a HFUSE D9; Az LFUSE: 62. Most állítsuk be az Avrdude-szal, villogtassuk és nézzük meg, mi történik. Az általunk használt kód a
avrdude -c usbasp -p m328P -U lfuse: w: 0x62: m -U hfuse: w: 0xd9: m -U effuse: w: 0xff: m
Miután ezt megtettem, látni fogja, hogy a LED rendkívül lassan villog, mert kiszámoltuk és beprogramoztuk egy 16Mhz óra értékét, és most a biztosítékok elégetése után ez csak 1Mhz belső RC oszcillátor. Ezért villog a LED ilyen lassan. Most próbáljuk meg ismét feltölteni egy vázlatot. Látni fogjuk, hogy az Arduino hibát ad ki, és a kód nem kerül feltöltésre. Mivel a biztosítékok megváltoztatásával a bootloader beállításait is elrontottuk. Ezt az alábbi képen láthatja.
Ennek kijavításához és az Arduino visszaállításához, mint korábban volt, csak újra kell írnunk a rendszerindítót az Arduino számára. Ehhez lépjen az Eszközök -> Programozó - USBasp menüpontra , és ha ezt megtesszük, újra az eszközökhöz léphetünk , és rákattinthatunk az író betöltõre . Ez ismét megégeti az állománybetöltőt az Arduino készülékén, és minden vissza fog térni, mint korábban.
Miután a rendszerbetöltőt visszavillantotta az Arduino-ba, az visszatért az eredeti állapotába, és az utolsó kép villogó LED-et mutat, miután a rendszerbetöltő újra elégett.
És ezzel vége ennek a cikknek. Remélem tetszett a cikk, és valami újat tanult. Ha bármilyen kérdése van a cikkel kapcsolatban, ne habozzon, tegyen egy megjegyzést alább.