- Ano ang mga piyus sa AVR - Isang Detalye ng Paliwanag
- Mga Fuse Bits sa Arduino
- Mga Kinakailangan na Kinakailangan upang Subukan ang mga piyus sa AVR
- Skematika para sa Pagsubok ng Mga Fuse Bits sa AVR
- Pagsubok sa mga piyus sa AVR
Sa tutorial na ito, pag-uusapan natin ang tungkol sa mga piyus. Bumalik noong ako ay nasa kolehiyo at natututo tungkol sa lahat ng mga cool na bagay sa electronics, narinig ko ang term na fuse sa AVR sa kauna-unahang pagkakataon, ang aking paunang pag-iisip sa paksa ay, oh! may isang bagay sa loob ng AVR na sasabog kung may nagawa akong mali. Noon, walang gaanong mapagkukunan na magagamit sa Internet upang dumaan. Naghanap ako ng kaunti upang malaman na ang mga piyus na ito ay sumangguni sa ilang mga espesyal na piraso sa loob ng AVR Microcontroller. Ang mga piraso na ito ay tulad ng maliliit na switch sa loob ng AVR at sa pamamagitan ng pag-on / off ng mga ito, maaari naming i-on / i-off ang ilang mga espesyal na tampok ng AVR. Ang pag-on at pag-off nito ay nangangahulugang pagtatakda at pag-reset.
Dadalhin namin ang pagkakataong ito upang talakayin ang lahat na naroroon tungkol sa mga piraso ng Fuse sa AVR. Para sa pagiging simple, kukuha kami ng halimbawa ng isang board ng Arduino na naglalaman ng tanyag na ATmega328P Microcontroller. Dito, malalaman mo kung paano itakda ang mga piyus na ito para sa pagtatakda at pag-off ng ilan sa mga tampok na ito na talagang magagamit sa mga application na totoong buhay. Kaya, pasukin natin ito.
Sa aming nakaraang mga post, nakabuo kami ng maraming mga proyekto ng AVR microcontrollers tulad ng module ng Interfacing GSM na may AVR microcontroller at Interfacing HC-05 na may AVR microcontroller. Maaari mong suriin ang mga ito kung nais mong malaman ang tungkol sa mga proyekto.
Ano ang mga piyus sa AVR - Isang Detalye ng Paliwanag
Tulad ng tinalakay namin kanina, ang mga piyus sa microcontroller ay tulad ng maliit na mga switch na maaaring i-on at i-off upang paganahin at huwag paganahin ang iba't ibang mga tampok sa AVR microcontroller. Ito ang bahagi kung saan lumilitaw ang aming susunod na tanong, kaya paano namin maitatakda o naitakda ang mga piyus na ito? Ang sagot sa katanungang ito ay simple: Ginagawa namin ito sa tulong ng mga rehistro ng piyus.
Sa ATmega328P IC, mayroong isang kabuuang 19 na mga piyus ng piyus at nahahati sila sa tatlong mga byte ng fuse. Ang mga iyon ay tinukoy bilang "Extended Fuse Bytes", "High Fuse Byte", at ang "Low Fuse Byte".
Kung titingnan mo ang Talaan-27 ng ATmega328 / P datasheet Rev: 7810D – AVR – 01/15, maaari mong malaman ang lahat ng maliliit na detalye tungkol sa mga piyus ng piyus. Ngunit ang imahe sa ibaba ay magbibigay sa iyo ng isang mas mahusay na ideya tungkol sa seksyon ng mga piraso ng piyus ng datasheet.
Ngayon dahil natutunan mo nang kaunti tungkol sa mga piyus ng fuse, dumaan tayo sa datasheet at alamin ang lahat ng kinakailangang mga detalye tungkol sa IC na ito.
Ang Pinalawak na Mga Fuse Bits:
Kapag na-click mo ang tab na Fuse Bits at mag-scroll pababa nang kaunti, mahahanap mo ang Talahanayan 27-5: na nagpapakita ng talahanayan para sa "Extended Fuse Byte" na karaniwang kilala bilang " EFUSE". Ang imahe sa ibaba ay nagpapakita ng eksaktong iyon.
Sa talahanayan na ito, mayroon lamang tatlong magagamit na mga piraso, at ang iba pang tatlong ay nakalaan. Ang tatlong piraso na ito ay nakikipag-usap sa antas ng Brownout Detection. Tulad ng nakikita mo sa Tala kung titingnan namin ang Talahanayan 28-5, mahahanap namin ang higit pang mga detalye tungkol dito.
Tulad ng nakikita mo sa talahanayan sa itaas, mayroon kaming talahanayan para sa Brownout Detection. Ang pagtuklas ng brownout ay isang tampok na nagbabalik sa microcontroller kapag ang boltahe ng suplay ay bumaba sa ibaba ng isang tiyak na antas ng boltahe. Sa ATmega328P IC, maaari naming ganap na huwag paganahin ang pagtuklas ng brownout o maaari nating itakda ito sa mga antas na ipinapakita sa talahanayan sa itaas.
Ang Mataas na Fuse Bytes:
Tulad ng nakikita mo sa imahe sa ibaba, ang talahanayan 27-6: ng datasheet ay nagpapakita ng mga Higher Fuse bits ng ATmega328P IC.
Ang High fuse deal sa iba't ibang mga gawain sa loob ng ATmega328 Microcontroller. Sa seksyong ito, pag-uusapan natin ang tungkol sa Mas Mataas na piyus ng piyus at ang kanilang pagtatrabaho. Magsimula tayo sa BOOTRST, BOOTSZ0, at BOOTSZ1 bits. Ang tatlong mga piraso ay responsable para sa pagtatakda ng laki ng boot; Ang laki ng boot ay tumutukoy sa dami ng memorya na nakalaan para sa pag-install ng bootloader.
Ang isang bootloader ay isang espesyal na piraso ng software na tumatakbo sa tuktok ng microcontroller at namamahala ng iba't ibang mga gawain. Ngunit sa kaso ng Arduino, ginagamit ang bootloader upang mai-upload ang Arduino sketch sa loob ng microcontroller. Sa isa sa aming nakaraang mga artikulo, ipinakita namin sa iyo Kung Paano Sunugin ang Bootloader sa ATmega328P Gamit ang Arduino. Maaari mong suriin iyon kung interesado ka sa paksa. Bumabalik sa aming paksa, ang mga layunin ng iba pang mga piraso sa mataas na byte ay ginawang malinaw na malinaw, ang EESAVE bit ay upang mapanatili ang memorya ng EEPROM habang sa ilalim ng isang chip erase cycle ay ginaganap. Ang WDTON bit ay upang paganahin o huwag paganahin ang Watchdog Timer.
Ang timer ng tagapagbantay ay isang espesyal na timer sa ATmega328P IC na mayroong magkakahiwalay na orasan at tumatakbo nang nakapag-iisa. Kung pinagana ang timer ng watchdog, kailangan mo itong i-clear sa isang tiyak na tagal, kung hindi man, ire-reset ng timer ng watchdog ang microcontroller. Ito ay isang kapaki-pakinabang na tampok na dumating sa loob ng maraming mga microcontroller kung ang processor ay ma-stuck; ire-reset ito ng watchdog upang maiwasan ang anumang pinsala sa end application.
Ang DWEN bit ay naroon upang paganahin ang debug wire; ito ay isang paghahanda na proteksyon na panloob na naka-built sa kanilang hardware, na ginagamit upang i-program at i-debug ang mga nagpoproseso. Sa paganahin ang tampok na ito, maaari mong i-flash at i-debug ang processor gamit ang isang solong kawad na nakakabit. Ngunit upang magamit ito, kakailanganin mo ng mga espesyal na hardware na paghahanda sa Atmel.
Ang natitirang dalawang piraso ay ang mga piraso na kailangan mong iwasan maliban kung eksaktong alam mo kung ano ang iyong ginagawa. Ito ang RSTDISBL bit-7 at ang SPIEN bit-5. Ang RSTDISBL (External Reset Disable) tulad ng ipinahihiwatig ng pangalan ay hindi pinapagana ang panlabas na pag-reset ng pin ng hardware, at ang SPIEN bit ay ginagamit upang huwag paganahin ang interface ng programa ng SPI. Ang hindi pagpapagana ng alinman sa dalawang mga bit na ito ay maaaring ganap na brick ang iyong AVR; kaya, ang pag-iisa sa kanila ay isang magandang ideya.
Ang Mababang Fuse Bytes:
Tulad ng nakikita mo sa imahe sa ibaba, ang talahanayan 27-7: ng datasheet ay nagpapakita ng mga Lower Fuse bits ng ATmega328P IC.
Ang fuse byte ay responsable para sa pagse-set up ng mapagkukunan ng orasan at ilang iba pang mga parameter ng orasan sa loob ng AVR. Sa seksyong ito, malalaman natin ang tungkol sa lahat ng iyon.
Ang ika-7 piraso o ang watawat ng CKDIV8 ay maaaring maitakda upang hatiin ang mapagkukunan ng orasan sa pamamagitan ng 8, ito ay napakahusay na maaari mong malaman kung nasubukan mo mismo ang pag-program ng AVR sa iyong sarili. Ang susunod na bit ay ang CKOUT bit at ito ang ika-6 na bit sa Low Fuse Byte. Programming ito ay output ang panloob na signal ng orasan sa PORTB0 ng microcontroller.
Kinokontrol ng bits-5 at bit-4 SUT1 at SUT0 ang oras ng pagsisimula ng microcontroller. Pinipigilan nito ang anumang mga pagkilos na panimula na maaaring maganap o hindi maaaring maganap bago maabot ng boltahe ng suplay ang isang katanggap-tanggap na antas ng minimum na threshold voltage. At ang pangwakas na apat na CKSEL0 - 4 na piraso ay ginagamit upang piliin ang mapagkukunan ng orasan ng microcontroller. Ang talahanayan na ipinakita sa ibaba ay nagbibigay sa iyo ng isang mas mahusay na pag-unawa sa apat na mga piraso na kung saan ay responsable para sa pag-set up ng mapagkukunan ng orasan, maaari mong makita ang talahanayan na ito sa Clock Source Seksyon ng datasheet.
Ngayon, bago tayo magpatuloy, may isa pang bagay na dapat kong pagdaanan ay ang talahanayan para sa pagkaantala ng pagsisimula ng oscillator. Sa pamamagitan ng pagkaantala ng pagsisimula, tumutukoy kami sa mga piraso na 4 at 5 ng mas mababang byte ng fuse. Ang mga pagkaantala ay kailangang maitakda depende sa kundisyon na tatakbo ang circuit at ang uri ng oscillator na iyong ginagamit. Ang mga default na halaga ay nakatakda upang mabagal ang pagtaas ng lakas na may 6 na cycle ng orasan kapag isinagawa ang isang pagkakasunud-sunod ng power-up o power-down. Susunod, mayroong isa pang pagkaantala ng 14 na cycle ng orasan na may 65 Ms ng pagkaantala pagkatapos ng pagsisimula.
Phew! Iyon ay maraming impormasyon na natutunaw. Ngunit bago magpatuloy sa anumang karagdagang, tapusin natin ang seksyong ito sa isang mabilis na tala.
Tandaan:
Kung tiningnan mong mabuti ang datasheet, dapat mong napansin, ang pagprograma ng fuse bit ay nangangahulugang itatakda itong mababa, ibig sabihin, 0 (zero), na kabaligtaran ng kung ano ang karaniwang ginagawa natin upang makagawa ng isang mataas o mababa na port. Dapat mong tandaan iyon habang isinaayos ang iyong mga piyus.
Mga Fuse Bits sa Arduino
Marami kaming napag-usapan tungkol sa mga piyus sa seksyon sa itaas, ngunit sa seksyong ito, pag-usapan natin kung paano i-configure ang mga ito at kung paano isulat ang mga ito sa isang microcontroller. Para doon, kakailanganin namin ang isang tool na tinatawag na Avrdude. Ito ay isang tool na maaaring magamit upang mabasa, magsulat, at mabago ang memorya sa mga AVR microcontroller. Gumagana ito sa SPI at mayroon itong mahabang listahan ng suporta para sa iba't ibang mga uri ng programmer. maaari mong i-download ang tool mula sa link na ibinigay sa ibaba. Gayundin, gagamitin namin ang aming paboritong microcontroller na Arduino.
- I-download ang Avrdude Bersyon 6.3 Windows-ming32
Ngayon, na mayroon kang Avrdude, kailangan mong kunin iyon at buksan ang isang window ng utos sa folder na iyon. Gayundin, kung nagpaplano kang gamitin ito sa paglaon, maaari mong idagdag ang path ng folder sa iyong seksyon ng variable na kapaligiran sa windows. Ngunit ilalagay ko ito sa aking desktop at magbubukas ng isang window ng utos doon. Kapag nagawa na namin iyon, ikokonekta namin ang USBasp programmer sa aming PC at sisiguraduhin naming mayroon kaming tamang driver para sa aming USBasp programmer. Kapag nagawa na namin iyon, mahusay na kaming pumunta at babasahin muna namin ang default na halaga ng fuse. Upang magawa iyon, kailangan mong patakbuhin ang sumusunod na utos.
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
Kung tama ang lahat, babasahin ng utos na ito ang mga byte ng fuse at ilagay ito sa tatlong magkakahiwalay na mga file ng teksto. Ang imahe sa ibaba ay magbibigay sa iyo ng isang mas mahusay na ideya ng proseso.
Tulad ng nakikita mo, binasa ng Avrdude ang mga piyus ng piyus sa Arduino nano at nai-save ang mga ito sa tatlong magkakahiwalay na mga file ng teksto. Ngayon, binuksan namin ang mga ito at nakakuha ng tatlong mga halaga; para sa EFUSE: 0xFD, para sa HFUSE: 0XDA, para sa LFUSE: 0xFF. Ito ang default na halaga ng fuse na nakuha namin para sa isang Arduino nano. Ngayon, i-convert natin ang mga bit na ito sa binary at ihambing ang mga ito sa kanilang default na halaga mula sa datasheet. Ang talahanayan sa ibaba ay eksaktong ipinapakita.
Para sa kaginhawaan, ang mga piyus ng piyus ay nakasulat sa mga halagang Hexadecimal, ngunit kung i-convert namin ang mga ito sa mga halagang binary at ihambing ang mga ito sa datasheet, malalaman natin kung anong nangyayari. Magsimula tayo sa Lower Fuse Byte. Tulad ng nakikita mo mula sa string sa itaas, itinakda ito sa 0XFF at ang binary na Halaga ay magiging 0B11111111.
Paghahambing ng Stock Lower Fuse Bytes sa Arduino:
Mababang Fuse Byte |
Bit No. |
Default na Halaga sa AVR |
Default na Halaga ng Arduino |
CKDIV8 |
7 |
0 (na-program) |
1 (walang programa) |
CKOUT |
6 |
1 (walang programa) |
1 (walang programa) |
SUT1 |
5 |
1 (walang programa) |
1 (walang programa) |
SUT0 |
4 |
0 (na-program) |
1 (walang programa) |
CKSEL3 |
3 |
0 (na-program) |
1 (walang programa) |
CKSEL2 |
2 |
0 (na-program) |
1 (walang programa) |
CKSEL1 |
1 |
1 (walang programa) |
1 (walang programa) |
CKSEL0 |
0 |
0 (na-program) |
1 (walang programa) |
Ang Higher Fuse Byte ay nakatakda sa 0XDA sa binary na 0B11011010.
Mas Mataas na Fuse Byte sa Binary:
Mataas na Fuse Byte |
Bit No. |
Default na Halaga sa AVR |
Default na Halaga ng Arduino |
RSTDISBL |
7 |
1 (walang programa) |
1 (walang programa) |
DWEN |
6 |
1 (walang programa) |
1 (walang programa) |
SPIEN |
5 |
0 (na-program) |
0 (na-program) |
WDTON |
4 |
1 (walang programa) |
1 (walang programa) |
EESAVE |
3 |
1 (walang programa) |
1 (walang programa) |
BOOTSZ1 |
2 |
0 (na-program) |
0 (na-program) |
BOOTSZ0 |
1 |
0 (na-program) |
1 (walang programa) |
BOOTRST |
0 |
1 (walang programa) |
0 (na-program)) |
Ang Setting para sa Extended Fuse Byte ay nakatakda sa 0XFD, sa binary ito ay 0B11111101.
Pinalawak na Byte ng Fuse sa Binary:
Pinalawak na Fuse Byte |
Bit No. |
Default na Halaga sa AVR |
Default na Halaga ng Arduino |
- |
7 |
1 |
1 |
- |
6 |
1 |
1 |
- |
5 |
1 |
1 |
- |
4 |
1 |
1 |
- |
3 |
1 |
1 |
BODLEVEL2 |
2 |
1 (walang programa) |
1 (walang programa) |
BODLEVEL1 |
1 |
1 (walang programa) |
0 (na-program) |
BODLEVEL0 |
0 |
1 (walang programa) |
1 (walang programa) |
Ngayon, markahan na nito ang pagtatapos ng seksyong ito. Tulad ng ngayon, marami kaming natutunan tungkol sa AVR microcontroller at mga piyus ng piyus nito. Kaya, balutin natin ang artikulong ito sa pamamagitan ng paglalagay ng aming teorya sa pagsubok sa pamamagitan ng pagbabago at pag-eksperimento sa ilan sa mga piyus na piraso sa Arduino Nano.
Mga Kinakailangan na Kinakailangan upang Subukan ang mga piyus sa AVR
Marami kaming napag-usapan tungkol sa mga piyus sa itaas na bahagi. Ngunit upang magpatuloy sa anumang karagdagang artikulo, kailangan namin ng ilang mga bahagi ng hardware at ilang mga tool sa software. Sa seksyong ito, pag-uusapan natin ang tungkol sa mga iyon. Ang isang listahan ng mga kinakailangang bahagi na may mga imahe ay ipinapakita sa ibaba.
- Breadboard - 1
- Arduino Nano - 1
- USBasp AVR Programmer - 1
- USB Cable - 1
- AVR 10-Pin sa 6- Pin Converter - 1
- Avrdude (Software tool para sa Programming AVR)
- LED - 1
- 330R Resistor - 1
- Mga Jumper Cables
Skematika para sa Pagsubok ng Mga Fuse Bits sa AVR
Ang setup ng pagsubok sa Hardware ay ipinapakita sa ibaba sa setup na ito. Nakakonekta namin ang Arduino Nano sa PC gamit ang isang USB cable, at nakakonekta din namin ang programmer ng USBasp sa PC. Ang layunin ng artikulong ito ay i-program ang mga piyus na piraso sa AVR. Para sa kadahilanang iyon, nakakonekta namin ang USBasp programmer sa Arduino. Ang imahe sa ibaba ay magbibigay sa iyo ng isang mas mahusay na ideya ng pag-setup.
Pagsubok sa mga piyus sa AVR
Ang setup ng pagsubok ay ipinapakita sa ibaba. Tulad ng nakikita mo, nakakonekta namin ang Arduino at ang USBasp programmer pareho sa USB ng aking laptop.
Ngayon buksan natin ang Arduino IDE at mag-upload ng isang pangunahing blink sketch. Ang nilalaman ng pangunahing blink sketch ay nagpapaliwanag sa sarili, kaya't hindi ako naglagay ng anumang mga detalye tungkol dito.
Makikita mo sa video na ang led on pin no 13 ay kumikislap tulad ng nararapat. Ngayon ay sabunutan natin ang mga setting ng piyus at itakda ito sa mga default na halaga. At tulad ng dati nating nakita sa datasheet; ang EFUSE ay 0XFF; ang HFUSE ay D9; Ang LFUSE ay: 62. Ngayon ay i-configure natin ito sa Avrdude, i-flash ito, at tingnan kung ano ang nangyayari. Ang code na gagamitin namin ay-
avrdude -c usbasp -p m328P -U lfuse: w: 0x62: m -U hfuse: w: 0xd9: m -U efuse: w: 0xff: m
Kapag ginawa ko ito, makikita mo na ang LED ay magpapikit ng marahan dahil kinakalkula at na-program namin ang halaga para sa isang 16Mhz na orasan at ngayon pagkatapos masunog ang mga piyus, isa lamang itong 1Mhz internal RC oscillator. Ito ang dahilan kung bakit ang LED ay kumikislap nang napakabagal. Subukan nating mag-upload muli ng isang sketch. Makikita natin na ang Arduino ay nagbibigay ng isang error at ang code ay hindi na-upload. Dahil sa pagbabago ng mga piyus, ginulo din namin ang mga setting ng bootloader. Maaari mong makita iyon sa larawan sa ibaba.
Upang ayusin ito at ibalik ang Arduino tulad ng dati, kailangan lamang nating sunugin muli ang bootloader para sa Arduino. Upang magawa iyon, pumunta sa Mga Tool -> Programmer- USBasp , at sa oras na magawa natin ito, maaari ulit tayong pumunta sa mga tool at maaari nating mai-click ang pagpipilian sa burn bootloader. Ito ay muling susunugin ang stock bootloader sa iyong Arduino at ang lahat ay babalik tulad ng dati.
Matapos ma-flash ang bootloader pabalik sa Arduino, bumalik ito sa orihinal na estado at ipinakita sa iyo ng huling imahe ang isang kumikislap na LED matapos masunog muli ang bootloader.
At ito ang marka ng pagtatapos ng artikulong ito. Inaasahan kong nasiyahan ka sa artikulo at may natutunan na bago. Kung mayroon kang anumang mga katanungan tungkol sa artikulo, huwag mag-atubiling maglagay ng isang puna sa ibaba.