- Apakah Sekering dalam AVR - Penjelasan Terperinci
- Fuse Bits di Arduino
- Komponen yang Diperlukan untuk Menguji Sekering dalam AVR
- Skema untuk Menguji Bit Fius di AVR
- Menguji Fius dalam AVR
Dalam tutorial ini, kita akan membincangkan sekering. Semasa saya di kuliah dan belajar tentang semua perkara menarik dalam elektronik, saya mendengar istilah fuse dalam AVR untuk pertama kalinya, pemikiran awal saya mengenai topik ini adalah, oh! ada sesuatu di dalam AVR yang akan meletup sekiranya saya melakukan sesuatu yang salah. Pada masa itu, tidak banyak sumber yang ada di Internet untuk dilalui. Saya mencari sedikit untuk mengetahui bahawa sekering ini merujuk kepada beberapa bit khas di dalam AVR Microcontroller. Bit ini seperti suis kecil di dalam AVR dan dengan menghidupkan / mematikannya, kita dapat menghidupkan / mematikan beberapa ciri khas AVR. Menghidupkan dan mematikannya bermaksud menetapkan dan menetapkan semula.
Kami akan mengambil kesempatan ini untuk membincangkan semua yang ada mengenai bit Fuse di AVR. Untuk kesederhanaan, kami akan mengambil contoh papan Arduino yang menempatkan Mikrokontroler ATmega328P yang terkenal. Di sini, anda akan belajar bagaimana menetapkan sekering ini untuk menyetel dan mematikan beberapa ciri ini yang sangat berguna dalam aplikasi kehidupan nyata. Oleh itu, mari kita masuk ke dalamnya.
Dalam catatan sebelumnya, kami telah membina banyak projek mikrokontroler AVR seperti modul Interfacing GSM dengan mikrokontroler AVR dan Interfacing HC-05 dengan mikrokontroler AVR. Anda boleh memeriksanya jika anda ingin mengetahui lebih lanjut mengenai projek tersebut.
Apakah Sekering dalam AVR - Penjelasan Terperinci
Seperti yang telah kita bincangkan sebelumnya, sekering pada mikrokontroler adalah seperti suis kecil yang dapat dihidupkan dan dimatikan untuk mengaktifkan dan mematikan pelbagai ciri dalam mikrokontroler AVR. Ini adalah bahagian di mana persoalan berikutnya muncul, jadi bagaimana kita menetapkan atau menetapkan semula sekering ini? Jawapan untuk soalan ini mudah: Kami melakukannya dengan bantuan daftar fius.
Dalam IC ATmega328P, terdapat sejumlah 19 bit fius dan mereka dibahagikan kepada tiga bait fius. Yang didefinisikan sebagai "Extended Fuse Bytes", "High Fuse Byte", dan "Low Fuse Byte".
Sekiranya anda melihat Jadual-27 dari lembar data ATmega328 / P Rev: 7810D – AVR – 01/15, anda dapat mengetahui semua butiran kecil mengenai bit fius. Tetapi gambar di bawah akan memberi anda idea yang lebih baik mengenai bahagian fuse bit dari lembar data.
Sekarang kerana anda telah belajar sedikit mengenai bit fius, mari kita pergi ke lembar data dan mengetahui semua butiran yang diperlukan mengenai IC ini.
Bit Fius Lanjutan:
Sebaik sahaja anda mengklik tab Fuse Bits dan menatal ke bawah sedikit, anda akan dapati Jadual 27-5: yang menunjukkan jadual untuk "Extended Fuse Byte" yang biasanya dikenali sebagai " EFUSE". Gambar di bawah menunjukkan bahawa sebenarnya.
Dalam jadual ini, hanya ada tiga bit yang boleh digunakan, dan tiga yang lain disediakan. Ketiga-tiga bit ini menangani tahap Pengesanan Brownout. Seperti yang anda lihat dalam Catatan jika kita melihat Jadual 28-5, kita dapat mengetahui lebih banyak perincian mengenainya.
Seperti yang anda lihat dalam jadual di atas, kami mempunyai jadual untuk Brownout Detection. Pengesanan brownout adalah ciri yang mengatur semula mikrokontroler apabila voltan bekalan jatuh di bawah tahap voltan tertentu. Dalam IC ATmega328P, kita dapat mematikan pengesanan brownout sepenuhnya atau kita dapat menetapkannya ke tahap yang ditunjukkan dalam jadual di atas.
Byte Fius Tinggi:
Seperti yang anda lihat dalam gambar di bawah, jadual 27-6: lembar data menunjukkan bit Fuse Tinggi dari IC ATmega328P.
Yang tinggi fius perjanjian dengan pelbagai tugas di dalam ATmega328 mikropengawal. Di bahagian ini, kita akan membincangkan mengenai bit fius yang lebih tinggi dan cara kerjanya. Mari kita mulakan dengan bit BOOTRST, BOOTSZ0, dan BOOTSZ1. Ketiga-tiga bit ini bertanggungjawab untuk menetapkan ukuran but; saiz but merujuk kepada jumlah memori yang disediakan untuk memasang bootloader.
Bootloader adalah perisian khas yang berjalan di atas mikrokontroler dan menguruskan tugas yang berbeza. Tetapi dalam kes Arduino, bootloader digunakan untuk memuat naik lakaran Arduino di dalam mikrokontroler. Dalam salah satu artikel sebelumnya, kami telah menunjukkan kepada anda Cara Membakar Bootloader di ATmega328P Menggunakan Arduino. Anda boleh melihatnya jika anda berminat dengan topik ini. Kembali ke topik kami, tujuan bit lain dalam bait tinggi dijelaskan dengan jelas, bit EESAVE adalah untuk mengekalkan memori EEPROM semasa di bawah kitaran pemadaman cip dilakukan. Bit WDTON adalah untuk mengaktifkan atau mematikan Pemasa Pengawas.
Pemasa pengawas adalah pemasa khas dalam IC ATmega328P yang mempunyai jam tersendiri dan berjalan secara bebas. Sekiranya pemasa pengawas diaktifkan, maka anda perlu mengosongkannya dengan jangka masa tertentu, jika tidak, pemasa pengawas akan menetapkan semula mikrokontroler. Ini adalah ciri berguna yang terdapat dalam banyak mikrokontroler jika pemproses tersekat; pengawas akan menetapkannya semula untuk mengelakkan kerosakan pada aplikasi akhir.
Bit DWEN ada untuk membolehkan wayar debug; ini adalah protokol persediaan yang dibina secara dalaman ke dalam perkakasan mereka, yang digunakan untuk memprogram dan menyahpepijat pemproses. Dengan ciri ini diaktifkan, anda boleh melakukan flash dan debug pemproses dengan satu wayar terpasang. Tetapi untuk menggunakannya, anda memerlukan perkakasan khas yang merupakan persediaan untuk Atmel.
Dua baki yang tinggal adalah bit yang perlu anda hindari kecuali anda tahu betul apa yang anda lakukan. Ini adalah RSTDISBL bit-7 dan SPIEN bit-5. RSTDISBL (External Reset Disable) seperti namanya melumpuhkan pin reset perkakasan luaran, dan bit SPIEN digunakan untuk mematikan antara muka pengaturcaraan SPI. Melumpuhkan salah satu daripada kedua-dua bit ini boleh merosakkan AVR sepenuhnya; jadi, meninggalkan mereka sendiri adalah idea yang baik.
Byte Sekering Rendah:
Seperti yang anda lihat dalam gambar di bawah, jadual 27-7: lembar data menunjukkan bit Fuse Bawah IC ATmega328P.
Bait fius ini bertanggungjawab untuk mengatur sumber jam dan beberapa parameter jam lain di dalam AVR. Di bahagian ini, kita akan belajar tentang semua itu.
Bendera ke-7 atau bendera CKDIV8 dapat diatur untuk membahagikan sumber jam dengan 8, ini sangat berguna yang mungkin anda sudah tahu jika anda sudah mencuba sendiri pengaturcaraan AVR. Bit seterusnya adalah bit CKOUT dan bit ke-6 di Low Fuse Byte. Memprogramnya akan mengeluarkan isyarat jam dalaman pada PORTB0 mikrokontroler.
Bit-5 dan bit-4 SUT1 dan SUT0 mengawal masa mula mikrokontroler. Ini menghalang tindakan permulaan yang mungkin atau tidak berlaku sebelum voltan bekalan dapat mencapai tahap voltan ambang minimum yang boleh diterima. Dan empat akhir CKSEL0 - 4 bit digunakan untuk memilih sumber jam mikrokontroler. Jadual yang ditunjukkan di bawah memberi anda pemahaman yang lebih baik mengenai keempat-empat bit ini yang bertanggungjawab untuk mengatur sumber jam, anda boleh mendapatkan jadual ini di Bahagian Sumber Jam pada lembar data.
Sekarang, sebelum kita melangkah lebih jauh, ada satu perkara lagi yang harus saya lalui ialah jadual penangguhan permulaan pengayun. Dengan kelewatan permulaan, kita merujuk kepada bit 4 dan 5 bait fius bawah. Kelewatan perlu ditetapkan bergantung pada keadaan litar akan beroperasi dan jenis pengayun yang anda gunakan. Nilai lalai ditetapkan untuk melambatkan daya naik dengan 6 kitaran jam ketika urutan power-up atau power-down dilakukan. Seterusnya, terdapat satu lagi kelewatan 14 kitaran jam dengan kelewatan 65 Ms selepas permulaan.
Phew! Itu banyak maklumat untuk dicerna. Tetapi sebelum melangkah lebih jauh, mari akhiri bahagian ini dengan catatan ringkas.
Catatan:
Sekiranya anda melihat lembaran data dengan teliti, anda pasti perhatikan, memprogram bit fius bermaksud menetapkannya rendah, iaitu 0 (sifar), yang merupakan kebalikan dari apa yang biasanya kita lakukan untuk membuat port tinggi atau rendah. Anda harus mengingatnya semasa mengkonfigurasi sekering anda.
Fuse Bits di Arduino
Kami telah banyak membincangkan fius di bahagian di atas, tetapi di bahagian ini, mari kita bincangkan bagaimana mengkonfigurasinya dan cara menulisnya di mikrokontroler. Untuk itu, kita akan memerlukan alat bernama Avrdude. Ini adalah alat yang dapat digunakan untuk membaca, menulis, dan mengubah memori dalam mikrokontroler AVR. Ia berfungsi dengan SPI dan mempunyai senarai sokongan yang panjang untuk pelbagai jenis programmer. anda boleh memuat turun alat dari pautan yang diberikan di bawah. Kami juga akan menggunakan mikrokontroler Arduino kegemaran kami.
- Muat turun Avrdude Versi 6.3 Windows-ming32
Sekarang, setelah anda mempunyai Avrdude, anda perlu mengekstraknya dan membuka tetingkap arahan dalam folder itu. Juga, jika anda merancang untuk menggunakannya kemudian, anda boleh menambahkan jalur folder ke bahagian pemboleh ubah persekitaran tetingkap anda. Tetapi saya akan meletakkannya di desktop saya dan membuka tetingkap arahan di sana. Setelah kami melakukannya, kami akan menyambungkan pengaturcara USBasp ke PC kami dan kami akan memastikan bahawa kami mempunyai pemacu yang sesuai untuk pengaturcara USBasp kami. Sebaik sahaja kami melakukannya, kami akan terus maju dan kami akan membaca nilai fius lalai terlebih dahulu. Untuk melakukan itu, anda perlu menjalankan arahan berikut.
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
Sekiranya semuanya betul, arahan ini akan membaca bait fius dan memasukkannya ke dalam tiga fail teks yang berasingan. Gambar di bawah akan memberi anda idea yang lebih baik mengenai prosesnya.
Seperti yang anda lihat, Avrdude membaca bit fius di Arduino nano dan menyimpannya ke dalam tiga fail teks yang berasingan. Sekarang, kami membukanya dan mendapat tiga nilai; untuk EFUSE: 0xFD, untuk HFUSE: 0XDA, untuk LFUSE: 0xFF. Ini adalah nilai sekering lalai yang kami dapat untuk Arduino nano. Sekarang, mari kita menukar bit ini menjadi binari dan membandingkannya dengan nilai lalai mereka dari lembaran data. Jadual di bawah menunjukkan bahawa.
Untuk kemudahan, bit fius ditulis dalam nilai Heksadesimal, tetapi jika kita menukarnya menjadi nilai binari dan membandingkannya dengan lembaran data, kita akan mengetahui apa yang berlaku. Mari kita mulakan dengan Lower Fuse Byte. Seperti yang anda lihat dari rentetan di atas, ia ditetapkan ke 0XFF dan Nilai binari adalah 0B11111111.
Membandingkan Stok Fuse Bytes Bawah dengan Arduino:
Byte Fius Rendah |
Bit No. |
Nilai Lalai dalam AVR |
Nilai Lalai Arduino |
CKDIV8 |
7 |
0 (diprogramkan) |
1 (tidak diprogramkan) |
CKOUT |
6 |
1 (tidak diprogramkan) |
1 (tidak diprogramkan) |
SUT1 |
5 |
1 (tidak diprogramkan) |
1 (tidak diprogramkan) |
SUT0 |
4 |
0 (diprogramkan) |
1 (tidak diprogramkan) |
CKSEL3 |
3 |
0 (diprogramkan) |
1 (tidak diprogramkan) |
CKSEL2 |
2 |
0 (diprogramkan) |
1 (tidak diprogramkan) |
CKSEL1 |
1 |
1 (tidak diprogramkan) |
1 (tidak diprogramkan) |
CKSEL0 |
0 |
0 (diprogramkan) |
1 (tidak diprogramkan) |
Byte Fuse Tinggi ditetapkan ke 0XDA dalam binari iaitu 0B11011010.
Fuse Byte yang lebih tinggi dalam Perduaan:
Byte Fius Tinggi |
Bit No. |
Nilai Lalai dalam AVR |
Nilai Lalai Arduino |
RSTDISBL |
7 |
1 (tidak diprogramkan) |
1 (tidak diprogramkan) |
DWEN |
6 |
1 (tidak diprogramkan) |
1 (tidak diprogramkan) |
SPIEN |
5 |
0 (diprogramkan) |
0 (diprogramkan) |
WDTON |
4 |
1 (tidak diprogramkan) |
1 (tidak diprogramkan) |
MUDAH |
3 |
1 (tidak diprogramkan) |
1 (tidak diprogramkan) |
BOOTSZ1 |
2 |
0 (diprogramkan) |
0 (diprogramkan) |
BOOTSZ0 |
1 |
0 (diprogramkan) |
1 (tidak diprogramkan) |
BOOTRST |
0 |
1 (tidak diprogramkan) |
0 (diprogramkan)) |
Pengaturan untuk Extended Fuse Byte ditetapkan ke 0XFD, dalam binari adalah 0B11111101.
Byte Fuse Extended dalam Perduaan:
Byte Fuse Lanjutan |
Bit No. |
Nilai Lalai dalam AVR |
Nilai Lalai Arduino |
- |
7 |
1 |
1 |
- |
6 |
1 |
1 |
- |
5 |
1 |
1 |
- |
4 |
1 |
1 |
- |
3 |
1 |
1 |
BODLEVEL2 |
2 |
1 (tidak diprogramkan) |
1 (tidak diprogramkan) |
BODLEVEL1 |
1 |
1 (tidak diprogramkan) |
0 (diprogramkan) |
BODLEVEL0 |
0 |
1 (tidak diprogramkan) |
1 (tidak diprogramkan) |
Sekarang, ini menandakan berakhirnya bahagian ini. Setakat ini, kami telah belajar banyak mengenai mikrokontroler AVR dan bit fiusnya. Oleh itu, mari kita selesaikan artikel ini dengan menguji teori kita dengan mengubah dan bereksperimen dengan beberapa bit fius di Arduino Nano.
Komponen yang Diperlukan untuk Menguji Sekering dalam AVR
Kami telah banyak bercakap mengenai sekering di bahagian di atas. Tetapi untuk meneruskan lebih jauh dalam artikel ini, kami memerlukan beberapa komponen perkakasan dan beberapa alat perisian. Dalam bahagian ini, kita akan membincangkannya. Senarai komponen yang diperlukan dengan gambar ditunjukkan di bawah.
- Papan Roti - 1
- Arduino Nano - 1
- Pengaturcara AVR USBasp - 1
- Kabel USB - 1
- Penukar AVR 10-Pin hingga 6- Pin - 1
- Avrdude (Alat perisian untuk Pengaturcaraan AVR)
- LED - 1
- Perintang 330R - 1
- Kabel Jumper
Skema untuk Menguji Bit Fius di AVR
Persediaan ujian Perkakasan ditunjukkan di bawah dalam persediaan ini. Kami telah menghubungkan Arduino Nano ke PC dengan kabel USB, dan kami juga telah menghubungkan pengaturcara USBasp ke PC. Objektif artikel ini adalah untuk memprogram bit fius di AVR. Atas sebab itu, kami telah menghubungkan pengaturcara USBasp dengan Arduino. Gambar di bawah akan memberi anda idea yang lebih baik mengenai penyediaannya.
Menguji Fius dalam AVR
Persediaan ujian ditunjukkan di bawah. Seperti yang anda lihat, kami telah menghubungkan Arduino dan pengaturcara USBasp ke USB komputer riba saya.
Sekarang mari kita buka Arduino IDE dan memuat naik lakaran berkedip asas. Kandungan lakaran berkedip asas sangat jelas, jadi saya tidak memberikan perincian mengenainya.
Anda akan melihat dalam video bahawa pin pada pin no 13 berkedip sebagaimana mestinya. Sekarang mari kita ubah tetapan fius dan tetapkan ke nilai lalai. Dan seperti yang telah kita lihat sebelumnya dalam lembar data; yang EFUSE adalah 0xFF; HFUSE adalah D9; LFUSE adalah: 62. Sekarang mari konfigurasikannya dengan Avrdude, kilatkannya, dan lihat apa yang berlaku. Kod yang akan kita gunakan ialah-
avrdude -c usbasp -p m328P -U lfuse: w: 0x62: m -U hfuse: w: 0xd9: m -U efuse: w: 0xff: m
Setelah saya melakukan ini, anda akan melihat LED akan berkelip perlahan kerana kami telah mengira dan memprogram nilai untuk jam 16Mhz dan sekarang setelah membakar sekering, ia hanya pengayun RC dalaman 1Mhz. Inilah sebabnya mengapa LED berkelip perlahan. Sekarang mari kita cuba memuat naik lakaran sekali lagi. Kami akan melihat bahawa Arduino memberikan ralat dan kodnya tidak dimuat naik. Kerana dengan mengubah sekering, kami juga mengacaukan tetapan bootloader. Anda dapat melihatnya pada gambar di bawah.
Untuk memperbaikinya dan meletakkan Arduino kembali seperti sebelumnya, kita hanya perlu membakar bootloader lagi untuk Arduino. Untuk melakukannya, pergi ke Tools -> Programmer- USBasp , dan setelah kami melakukannya, kami sekali lagi boleh pergi ke alat dan kami dapat mengklik pilihan burn bootloader. Ini sekali lagi akan membakar bootloader stok di Arduino anda dan semuanya akan kembali seperti sebelumnya.
Setelah bootloader dikembalikan ke Arduino, ia kembali ke keadaan semula dan gambar terakhir menunjukkan LED yang berkelip setelah bootloader dibakar semula.
Dan ini menandakan berakhirnya artikel ini. Saya harap anda menikmati artikel dan mempelajari sesuatu yang baru. Sekiranya anda mempunyai pertanyaan mengenai artikel tersebut, jangan ragu untuk memberikan komen di bawah.