- Što su osigurači u AVR-u - detaljno objašnjenje
- Bitovi osigurača u Arduinu
- Komponente potrebne za ispitivanje osigurača u AVR-u
- Shema za ispitivanje bitova osigurača u AVR-u
- Ispitivanje osigurača u AVR-u
U ovom uputstvu govorit ćemo o osiguračima. Još dok sam bio na fakultetu i učio o svim cool stvarima u elektronici, prvi sam put čuo izraz osigurač u AVR-u, moja početna misao na tu temu bila je, oh! unutar AVR-a ima nešto što će puhati ako sam nešto pogriješio. Tada na Internetu nije bilo dostupnih mnogo resursa. Prilično sam pretraživao kako bih otkrio da se ti osigurači odnose na neke posebne bitove unutar AVR mikrokontrolera. Ti su bitovi poput sićušnih prekidača unutar AVR-a i njihovim uključivanjem / isključivanjem možemo uključiti / isključiti neke posebne značajke AVR-a. Uključivanje i isključivanje znači postavljanje i resetiranje.
Iskoristit ćemo ovu priliku i razgovarati o svemu što postoji o bitovima osigurača u AVR-u. Radi jednostavnosti, uzet ćemo primjer Arduino ploče na kojoj se nalazi popularni ATmega328P mikrokontroler. Ovdje ćete naučiti kako postaviti ove osigurače za uključivanje i isključivanje nekih od ovih značajki, što je vrlo korisno u stvarnim aplikacijama. Dakle, krenimo odmah u to.
U našim prethodnim postovima izgradili smo puno projekata AVR mikrokontrolera poput Interfacing GSM modula s AVR mikrokontrolerom i Interfacing HC-05 s AVR mikrokontrolerom. Možete ih provjeriti ako želite saznati više o tim projektima.
Što su osigurači u AVR-u - detaljno objašnjenje
Kao što smo ranije razgovarali, osigurači u mikrokontroleru su poput malih prekidača koji se mogu uključiti i isključiti kako bi se omogućile i onemogućile razne značajke AVR mikrokontrolera. Ovo je dio u kojem se postavlja naše sljedeće pitanje, pa kako postaviti ili resetirati ove osigurače? Odgovor na ovo pitanje je jednostavan: to radimo uz pomoć registara osigurača.
U ATmega328P IC-u postoji ukupno 19 bitova osigurača i podijeljeni su u tri bajta osigurača. Oni su definirani kao "Prošireni bajtovi osigurača", "Bajti visokog osigurača" i "Bajti niskog osigurača".
Ako pogledate tablicu 27 tablice podataka ATmega328 / P Rev: 7810D – AVR – 01/15, možete saznati sve male detalje o bitovima osigurača. Ali donja slika dat će vam bolju ideju o dijelu bitova osigurača u podatkovnom listu.

Sad kad ste saznali malo o bitovima osigurača, idemo kroz tablicu podataka i saznajmo sve potrebne detalje o ovom IC-u.
Prošireni bitovi osigurača:
Jednom kada kliknete karticu Osigurači i pomaknete se malo prema dolje, naći ćete Tablicu 27-5: koja prikazuje tablicu za "Prošireni bajt osigurača", obično poznat kao " EFUSE". Slika ispod pokazuje upravo to.

U ovoj su tablici samo tri korisna bita, a ostala tri su rezervirana. Ova tri bita se bave razinom otkrivanja Brownouta. Kao što možete vidjeti u Bilješci ako pogledamo Tablicu 28-5, o njoj možemo pronaći više detalja.

Kao što možete vidjeti u gornjoj tablici, imamo tablicu za otkrivanje Brownouta. Detekcija izostanaka značajka je koja resetira mikrokontroler kad opskrbni napon padne ispod određene razine napona. U ATmega328P IC-u možemo potpuno onemogućiti otkrivanje propadanja ili ga postaviti na razine prikazane u gornjoj tablici.
Bajtovi velikog osigurača:
Kao što možete vidjeti na donjoj slici, tablica 27-6: tablice prikazuje bitove višeg osigurača IC IC-a ATmega328P.

Visoke osigurač bave različitim poslovima unutar ATmega328 mikrokontrolerom. U ovom ćemo odjeljku govoriti o višim bitovima osigurača i njihovom radu. Počnimo s bitovima BOOTRST, BOOTSZ0 i BOOTSZ1. Ova su tri bita odgovorna za postavljanje veličine pokretanja; veličina pokretanja odnosi se na količinu memorije rezervirane za instalaciju pokretača.
Bootloader je poseban softver koji se pokreće na vrhu mikrokontrolera i upravlja različitim zadacima. Ali u slučaju Arduina, bootloader se koristi za prijenos Arduino skice unutar mikrokontrolera. U jednom od naših prethodnih članaka pokazali smo vam kako spaliti pokretač u ATmega328P pomoću Arduina. To možete provjeriti ako vas zanima tema. Vraćajući se na našu temu, svrhe ostalih bitova u velikom bajtu su prilično jasne, bit EESAVE je očuvanje EEPROM memorije dok se izvodi ciklus brisanja čipa. WDTON bit treba omogućiti ili onemogućiti nadzorni timer.
Watchmeg timer je poseban tajmer u ATmega328P IC koji ima svoj zaseban sat i radi neovisno. Ako je uključen nadzorni timer, tada ga trebate ukloniti s određenim vremenskim razdobljem, u protivnom će nadzorni tajmer resetirati mikrokontroler. Ovo je korisna značajka koja dolazi u sklopu mnogih mikrokontrolera ako procesor zapne; čuvar će ga resetirati kako bi spriječio bilo kakvu štetu na krajnjoj aplikaciji.
Bit DWEN je tu da omogući žicu za otklanjanje pogrešaka; ovo je pripremni protokol koji je interno ugrađen u njihov hardver, a koristi se za programiranje i uklanjanje pogrešaka u procesorima. Ako je ova značajka omogućena, možete treptati i otklanjati pogreške u procesoru pomoću jedne žice. Ali da biste ga koristili, trebat će vam poseban hardver koji je priprema za Atmel.
Preostala dva bita su oni bitovi koje trebate izbjegavati, osim ako točno ne znate što radite. To su RSTDISBL bit-7 i SPIEN bit-5. RSTDISBL (onemogućeno vanjsko resetiranje), kao što naziv govori, onemogućuje vanjski pin za resetiranje hardvera, a SPIEN bit se koristi za onemogućavanje programskog sučelja SPI. Onemogućavanje bilo kojeg od ova dva bita može u potpunosti opekliti vaš AVR; tako da je dobra ideja ostaviti ih same.
Mali bajtovi osigurača:
Kao što možete vidjeti na donjoj slici, tablica 27-7: tablice prikazuje bitove donjeg osigurača IC ATmega328P.

Ovaj bajt osigurača odgovoran je za postavljanje izvora sata i nekih drugih parametara sata unutar AVR-a. U ovom ćemo odjeljku naučiti o svemu tome.
7. bit ili zastavicu CKDIV8 može se postaviti tako da izvor sata dijeli sa 8, ovo je vrlo korisno što biste možda već znali jeste li i sami pokušali programirati AVR. Sljedeći bit je bit CKOUT i to je 6. bit u bajtu s malim osiguračem. Programiranjem bi se izlazio interni signal takta na PORTB0 mikrokontrolera.
Bitovi-5 i bit-4 SUT1 i SUT0 kontroliraju vrijeme pokretanja mikrokontrolera. To sprječava bilo kakve akcije pokretanja koje se mogu ili ne moraju dogoditi prije nego što opskrbni napon dosegne prihvatljivu minimalnu razinu praga napona. I posljednja četiri CKSEL0 - 4 bita koriste se za odabir izvora sata mikrokontrolera. Tablica prikazana u nastavku daje vam bolje razumijevanje ova četiri bita koja su odgovorna za postavljanje izvora sata. Ovu tablicu možete pronaći u odjeljku Izvor sata u tablici.

Sad, prije nego što nastavimo dalje, još bih jednu stvar trebala proći kroz tablicu odgode pokretanja oscilatora. Odgodom pokretanja mislimo na bitove 4 i 5 donjeg bajta osigurača. Kašnjenja treba postaviti ovisno o stanju u kojem će krug raditi i vrsti oscilatora koji koristite. Zadane vrijednosti postavljene su na polako rastuću snagu sa 6 ciklusa takta kada se izvodi slijed uključivanja ili isključivanja. Dalje, slijedi još jedno kašnjenje od 14 ciklusa s 65 Ms kašnjenja nakon pokretanja.

Fuj! To je bilo puno informacija za probaviti. No, prije nego što nastavimo dalje, završimo ovaj odjeljak kratkom napomenom.
Bilješka:
Ako ste pažljivo pogledali tablicu podataka, sigurno ste primijetili, programiranje bita osigurača znači postavljanje niske vrijednosti, tj. 0 (nula), što je suprotno onome što mi obično radimo kako bismo priključak postavili visokim ili niskim. To morate imati na umu tijekom konfiguriranja osigurača.
Bitovi osigurača u Arduinu
U gore navedenom odjeljku puno smo govorili o osiguračima, ali u ovom dijelu razgovarajmo o tome kako ih konfigurirati i kako ih zapisati u mikrokontroler. Za to će nam trebati alat zvan Avrdude. To je alat koji se može koristiti za čitanje, pisanje i izmjenu memorije u AVR mikrokontrolerima. Surađuje sa SPI-om i ima dugačak popis podrške za različite vrste programera. alat možete preuzeti s donje veze. Također, koristit ćemo i naš omiljeni mikrokontroler Arduino.
- Preuzmite Avrdude verziju 6.3 Windows-ming32
Sada, kada imate Avrdude, morate ga izdvojiti i otvoriti naredbeni prozor u toj mapi. Također, ako ga planirate koristiti kasnije, možete dodati putanju mape u odjeljak varijable okruženja Windows. Ali stavit ću ga na radnu površinu i tamo otvoriti naredbeni prozor. Nakon što to učinimo, spojit ćemo USBasp programer na naše računalo i pobrinut ćemo se da imamo odgovarajući upravljački program za naš USBasp programer. Nakon što to učinimo, spremni smo za početak i prvo ćemo pročitati zadanu vrijednost osigurača. Da biste to učinili, morate pokrenuti sljedeću naredbu.
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
Ako je sve u redu, ova će naredba pročitati bajtove osigurača i staviti ih u tri zasebne tekstualne datoteke. Slika u nastavku dat će vam bolju ideju o postupku.

Kao što vidite, Avrdude je pročitao bitove osigurača na Arduino nano-u i spremio ih u tri zasebne tekstualne datoteke. Sada smo ih otvorili i dobili tri vrijednosti; za EFUSE: 0xFD, za HFUSE: 0XDA, za LFUSE: 0xFF. Ovo je bila zadana vrijednost osigurača koju smo dobili za Arduino nano. Sada, pretvorimo ove bitove u binarne i usporedimo ih sa zadanom vrijednošću iz podatkovnog lista. Tablica u nastavku pokazuje upravo to.
Radi praktičnosti, bitovi osigurača zapisani su u heksadecimalnim vrijednostima, ali ako ih pretvorimo u binarne vrijednosti i usporedimo s podacima, znat ćemo što se događa. Počnimo s bajtom donjeg osigurača. Kao što možete vidjeti iz gornjeg niza, postavljen je na 0XFF, a binarna vrijednost bi bila 0B11111111.
Usporedba bajtova donjeg osigurača s Arduinom:
|
Mali bajt osigurača |
Br. Br. |
Zadana vrijednost u AVR-u |
Zadana vrijednost Arduina |
|
CKDIV8 |
7 |
0 (programirano) |
1 (neprogramirano) |
|
ISKAZ |
6 |
1 (neprogramirano) |
1 (neprogramirano) |
|
SUT1 |
5 |
1 (neprogramirano) |
1 (neprogramirano) |
|
SUT0 |
4 |
0 (programirano) |
1 (neprogramirano) |
|
CKSEL3 |
3 |
0 (programirano) |
1 (neprogramirano) |
|
CKSEL2 |
2 |
0 (programirano) |
1 (neprogramirano) |
|
CKSEL1 |
1 |
1 (neprogramirano) |
1 (neprogramirano) |
|
CKSEL0 |
0 |
0 (programirano) |
1 (neprogramirano) |
Bajt višeg osigurača postavljen je na 0XDA u binarnom obliku koji je 0B11011010.
Veći bajt osigurača u binarnom sustavu:
|
Bajt velikog osigurača |
Br. Br. |
Zadana vrijednost u AVR-u |
Zadana vrijednost Arduina |
|
RSTDISBL |
7 |
1 (neprogramirano) |
1 (neprogramirano) |
|
DWEN |
6 |
1 (neprogramirano) |
1 (neprogramirano) |
|
ŠPIJEN |
5 |
0 (programirano) |
0 (programirano) |
|
WDTON |
4 |
1 (neprogramirano) |
1 (neprogramirano) |
|
SPREMI |
3 |
1 (neprogramirano) |
1 (neprogramirano) |
|
ČIZMEZ1 |
2 |
0 (programirano) |
0 (programirano) |
|
ČIZMEZ0 |
1 |
0 (programirano) |
1 (neprogramirano) |
|
BOOTRST |
0 |
1 (neprogramirano) |
0 (programirano)) |
Postavka za prošireni bajt osigurača postavljena je na 0XFD, u binarnom obliku je 0B11111101.
Prošireni bajt osigurača u binarnom sustavu:
|
Prošireni bajt osigurača |
Br. Br. |
Zadana vrijednost u AVR-u |
Zadana vrijednost Arduina |
|
- |
7 |
1 |
1 |
|
- |
6 |
1 |
1 |
|
- |
5 |
1 |
1 |
|
- |
4 |
1 |
1 |
|
- |
3 |
1 |
1 |
|
BODLEVEL2 |
2 |
1 (neprogramirano) |
1 (neprogramirano) |
|
BODLEVEL1 |
1 |
1 (neprogramirano) |
0 (programirano) |
|
BODLEVEL0 |
0 |
1 (neprogramirano) |
1 (neprogramirano) |
Ovo je kraj ovog odjeljka. Od sada smo naučili mnogo o AVR mikrokontroleru i njegovim bitovima osigurača. Dakle, završimo ovaj članak stavljajući našu teoriju na test mijenjanjem i eksperimentiranjem nekih bitova osigurača u Arduino Nanou.
Komponente potrebne za ispitivanje osigurača u AVR-u
Puno smo razgovarali o osiguračima u gornjem dijelu. Ali da bismo nastavili dalje u članku, trebaju nam neke hardverske komponente i neki softverski alati. U ovom ćemo odjeljku govoriti o njima. Popis potrebnih komponenata sa slikama prikazan je u nastavku.

- Breadboard - 1
- Arduino Nano - 1
- USBasp AVR programer - 1
- USB kabel - 1
- AVR 10-pinski u 6- pinski pretvarač - 1
- Avrdude (softverski alat za programiranje AVR-a)
- LED - 1
- Otpornik 330R - 1
- Jumper kabeli
Shema za ispitivanje bitova osigurača u AVR-u
Postavljanje testiranja hardvera prikazano je dolje u ovom postavljanju. Arduino Nano povezali smo s računalom USB kabelom, a na računalo smo spojili i USBasp programer. Cilj ovog članka je programiranje bitova osigurača u AVR-u. Iz tog smo razloga povezali programator USBasp s Arduinom. Slika u nastavku pružit će vam bolju ideju o postavljanju.

Ispitivanje osigurača u AVR-u
Postavljanje ispitivanja prikazano je u nastavku. Kao što vidite, Arduino i USBasp programer povezali smo na USB mog prijenosnog računala.

Sada otvorimo Arduino IDE i prenesite osnovnu skicu treptaja. Sadržaj osnovne skice treptanja sam je po sebi objašnjen, pa nisam o tome iznosio detalje.

Na videozapisu ćete vidjeti da led na zatiču br. 13 trepće kako treba. Sada podesimo postavke osigurača i postavimo ga na zadane vrijednosti. I kao što smo prethodno vidjeli u tablici podataka; EFUSE je 0xff; HFUSE je D9; LFUSE je: 62. Ajmo sada konfigurirati ga s Avrdudeom, probljesnuti i vidjeti što će se dogoditi. Kôd koji ćemo koristiti je-
avrdude -c usbasp -p m328P -U lfuse: w: 0x62: m -U hfuse: w: 0xd9: m -U efuse: w: 0xff: m

Jednom kada to napravim, vidjet ćete da će LED treptati izuzetno sporo, jer smo izračunali i programirali vrijednost za sat od 16 MHz, a sada nakon izgaranja osigurača radi se samo o 1Mhz unutarnjem RC oscilatoru. Zbog toga LED dioda tako sporo trepće. Pokušajmo sada još jednom prenijeti skicu. Vidjet ćemo da Arduino izdaje pogrešku i kôd nije prenesen. Budući da smo izmjenom osigurača pobrkali i postavke pokretačkog programa. To možete vidjeti na donjoj slici.

Da bismo to popravili i vratili Arduino natrag kao prije, trebamo samo ponovno spaliti bootloader za Arduino. Da biste to učinili, idite na Alati -> Programer - USBasp , a nakon što to učinimo, možemo opet prijeći na alate i možemo kliknuti na opciju snimanja pokretačkog programa. Ovo će opet izgorjeti osnovni bootloader na vašem Arduinu i sve će se vratiti kao prije.

Nakon što je bootloader vraćen natrag u Arduino, vratio se u prvobitno stanje i zadnja slika prikazuje vam trepćuću LED diodu nakon što je bootloader ponovno izgorio.

I ovo označava kraj ovog članka. Nadam se da ste uživali u članku i naučili nešto novo. Ako imate bilo kakvih pitanja u vezi s člankom, ne ustručavajte se dodati komentar u nastavku.
