- Apa Sekering di AVR - Penjelasan Detail
- Fuse Bits dalam bahasa Arduino
- Komponen yang Diperlukan untuk Menguji Sekring di AVR
- Skema untuk Menguji Fuse Bits di AVR
- Menguji Sekring di AVR
Dalam tutorial ini, kita akan berbicara tentang sekering. Dulu ketika saya masih kuliah dan belajar tentang semua hal keren di elektronika, saya mendengar istilah fuse di AVR untuk pertama kalinya, pemikiran awal saya tentang topik tersebut adalah, oh! ada sesuatu di dalam AVR yang akan meledak jika saya melakukan sesuatu yang salah. Saat itu, tidak banyak sumber daya yang tersedia di Internet untuk dilalui. Saya mencari sedikit untuk mengetahui bahwa sekering ini mengacu pada beberapa bit khusus di dalam Mikrokontroler AVR. Bit ini seperti sakelar kecil di dalam AVR dan dengan menyalakan / mematikannya, kita dapat menghidupkan / mematikan beberapa fitur khusus AVR. Menghidupkan dan mematikannya berarti menyetel dan mengatur ulang.
Kami akan mengambil kesempatan ini untuk membahas semua yang ada tentang bit Fuse di AVR. Untuk mempermudah, kita akan mengambil contoh papan Arduino yang menampung Mikrokontroler ATmega328P yang populer. Di sini, Anda akan belajar cara mengatur sekering ini untuk mengatur beberapa fitur ini dan mematikan yang sangat berguna dalam aplikasi kehidupan nyata. Jadi, mari kita mulai.
Pada posting kami sebelumnya, kami telah membangun banyak proyek mikrokontroler AVR seperti modul Interfacing GSM dengan mikrokontroler AVR dan Interfacing HC-05 dengan mikrokontroler AVR. Anda dapat memeriksanya jika ingin mempelajari lebih lanjut tentang proyek tersebut.
Apa Sekering di AVR - Penjelasan Detail
Seperti yang telah kita bahas sebelumnya, sekering pada mikrokontroler seperti sakelar kecil yang dapat dihidupkan dan dimatikan untuk mengaktifkan dan menonaktifkan berbagai fitur pada mikrokontroler AVR. Ini adalah bagian di mana pertanyaan kita selanjutnya muncul, jadi bagaimana kita mengatur atau mengatur ulang sekering ini? Jawaban atas pertanyaan ini sederhana: Kami melakukannya dengan bantuan register sekering.
Di IC ATmega328P, ada total 19 bit sekering dan dibagi menjadi tiga byte sekering. Itu didefinisikan sebagai "Extended Fuse Byte", "High Fuse Byte", dan "Low Fuse Byte".
Jika Anda melihat Tabel-27 dari lembar data ATmega328 / P Rev: 7810D – AVR – 01/15, Anda dapat mengetahui semua detail kecil tentang bit sekering. Tetapi gambar di bawah ini akan memberi Anda gambaran yang lebih baik tentang bagian bit sekering dari lembar data.
Sekarang karena Anda telah mempelajari sedikit tentang bit sekering, mari kita lihat lembar data dan temukan semua detail yang diperlukan tentang IC ini.
Bit Sekring yang Diperpanjang:
Setelah Anda mengklik tab Fuse Bits dan menggulir ke bawah sedikit, Anda akan menemukan Tabel 27-5: yang menunjukkan tabel untuk "Extended Fuse Byte" yang biasa dikenal sebagai " EFUSE". Gambar di bawah menunjukkan hal itu dengan tepat.
Dalam tabel ini, hanya ada tiga bit yang dapat digunakan, dan tiga lainnya dicadangkan. Ketiga bit ini berhubungan dengan level Deteksi Brownout. Seperti yang Anda lihat di Catatan jika kita melihat Tabel 28-5, kita dapat menemukan lebih banyak detail tentangnya.
Seperti yang Anda lihat pada tabel di atas, kami memiliki tabel untuk Deteksi Brownout. Deteksi brownout adalah fitur yang mengatur ulang mikrokontroler ketika tegangan suplai turun di bawah level tegangan tertentu. Di IC ATmega328P, kita dapat sepenuhnya menonaktifkan deteksi brownout atau kita dapat mengaturnya ke level yang ditunjukkan pada tabel di atas.
Byte Sekring Tinggi:
Seperti yang Anda lihat pada gambar di bawah, tabel 27-6: dari lembar data menunjukkan bit Fuse Lebih Tinggi dari IC ATmega328P.
The Tinggi sekering kesepakatan dengan berbagai tugas dalam ATmega328 Microcontroller. Pada bagian ini, kita akan berbicara tentang bit sekering yang lebih tinggi dan cara kerjanya. Mari kita mulai dengan bit BOOTRST, BOOTSZ0, dan BOOTSZ1. Ketiga bit ini bertanggung jawab untuk mengatur ukuran boot; ukuran boot mengacu pada jumlah memori yang dicadangkan untuk menginstal bootloader.
Bootloader adalah perangkat lunak khusus yang berjalan di atas mikrokontroler dan mengelola berbagai tugas. Tetapi dalam kasus Arduino, bootloader digunakan untuk mengunggah sketsa Arduino di dalam mikrokontroler. Di salah satu artikel kami sebelumnya, kami telah menunjukkan kepada Anda Cara Membakar Bootloader di ATmega328P Menggunakan Arduino. Anda dapat memeriksanya jika Anda tertarik dengan topik tersebut. Kembali ke topik kita, tujuan bit lain dalam byte tinggi dibuat cukup jelas, bit EESAVE adalah untuk menjaga memori EEPROM saat siklus penghapusan chip dilakukan. Bit WDTON adalah untuk mengaktifkan atau menonaktifkan Watchdog Timer.
Pengatur waktu pengawas adalah pengatur waktu khusus di IC ATmega328P yang memiliki jam terpisah dan berjalan secara independen. Jika pengatur waktu pengawas diaktifkan, maka Anda perlu menghapusnya dengan jangka waktu tertentu, jika tidak, pengatur waktu pengawas akan mengatur ulang mikrokontroler. Ini adalah fitur berguna yang ada di banyak mikrokontroler jika prosesor macet; pengawas akan mengatur ulang untuk mencegah kerusakan pada aplikasi akhir.
Bit DWEN ada di sana untuk mengaktifkan kabel debug; ini adalah protokol persiapan yang dibangun secara internal ke dalam perangkat keras mereka, yang digunakan untuk memprogram dan men-debug prosesor. Dengan mengaktifkan fitur ini, Anda dapat mem-flash dan men-debug prosesor dengan satu kabel terpasang. Tetapi untuk menggunakannya, Anda memerlukan perangkat keras khusus yang merupakan persiapan untuk Atmel.
Dua bit sisanya adalah bit yang perlu Anda hindari kecuali Anda benar-benar tahu apa yang Anda lakukan. Ini adalah RSTDISBL bit-7 dan SPIEN bit-5. RSTDISBL (External Reset Disable) seperti namanya menonaktifkan pin reset hardware eksternal, dan bit SPIEN digunakan untuk menonaktifkan antarmuka pemrograman SPI. Menonaktifkan salah satu dari dua bit ini dapat sepenuhnya membuat bata AVR Anda; jadi, membiarkannya sendiri adalah ide yang bagus.
Byte Sekring Rendah:
Seperti yang Anda lihat pada gambar di bawah, tabel 27-7: dari lembar data menunjukkan bit Fuse Bawah dari IC ATmega328P.
Byte sekring ini bertanggung jawab untuk menyiapkan sumber jam dan beberapa parameter jam lainnya di dalam AVR. Pada bagian ini, kita akan mempelajari semua itu.
Bit ke-7 atau flag CKDIV8 dapat disetel untuk membagi sumber jam dengan 8, ini sangat berguna yang mungkin sudah Anda ketahui jika Anda telah mencoba memprogram AVR sendiri. Bit berikutnya adalah bit CKOUT dan merupakan bit ke-6 di Low Fuse Byte. Pemrograman itu akan mengeluarkan sinyal clock internal pada PORTB0 dari mikrokontroler.
Bit-5 dan bit-4 SUT1 dan SUT0 mengontrol waktu start-up mikrokontroler. Ini mencegah tindakan start-up yang mungkin atau mungkin tidak terjadi sebelum tegangan suplai dapat mencapai level tegangan ambang batas minimum yang dapat diterima. Dan empat bit terakhir CKSEL0 - 4 bit digunakan untuk memilih sumber clock dari mikrokontroler. Tabel yang ditunjukkan di bawah ini memberi Anda pemahaman yang lebih baik tentang empat bit ini yang bertanggung jawab untuk menyiapkan sumber jam, Anda dapat menemukan tabel ini di Bagian Sumber Jam dari lembar data.
Sekarang, sebelum kita melangkah lebih jauh, ada satu hal lagi yang harus saya bahas adalah tabel penundaan start-up osilator. Dengan penundaan start-up, kita mengacu pada bit 4 dan 5 dari byte sekering yang lebih rendah. Penundaan perlu diatur tergantung pada kondisi sirkuit akan beroperasi dan jenis osilator yang Anda gunakan. Nilai default ditetapkan untuk memperlambat peningkatan daya dengan 6 siklus clock ketika urutan power-up atau power-down dilakukan. Berikutnya, ada penundaan 14 clock cycle dengan penundaan 65 Ms setelah start-up.
Fiuh! Banyak sekali informasi yang harus dicerna. Tetapi sebelum melanjutkan lebih jauh, mari akhiri bagian ini dengan catatan singkat.
catatan:
Jika Anda telah melihat lembar data dengan hati-hati, Anda pasti telah memperhatikan, memprogram bit sekring berarti menyetelnya rendah, yaitu 0 (nol), yang merupakan kebalikan dari apa yang biasanya kita lakukan untuk membuat port menjadi tinggi atau rendah. Anda harus mengingatnya saat mengkonfigurasi sekring Anda.
Fuse Bits dalam bahasa Arduino
Kita telah berbicara banyak tentang sekering di bagian atas, tetapi di bagian ini, mari kita bicara tentang cara mengkonfigurasinya dan cara menulisnya di mikrokontroler. Untuk itu diperlukan sebuah alat bernama Avrdude. Ini adalah alat yang dapat digunakan untuk membaca, menulis, dan memodifikasi memori di mikrokontroler AVR. Ia bekerja dengan SPI dan memiliki daftar panjang dukungan untuk berbagai jenis pemrogram. Anda dapat mengunduh alat dari tautan yang diberikan di bawah ini. Juga, kami akan menggunakan mikrokontroler Arduino favorit kami.
- Unduh Avrdude Versi 6.3 Windows-ming32
Sekarang, setelah Anda memiliki Avrdude, Anda perlu mengekstraknya dan membuka jendela perintah di folder itu. Selain itu, jika Anda berencana untuk menggunakannya nanti, Anda dapat menambahkan jalur folder ke bagian variabel lingkungan windows Anda. Tapi saya akan meletakkannya di desktop saya dan membuka jendela perintah di sana. Setelah kami selesai melakukannya, kami akan menghubungkan programmer USBasp ke PC kami dan kami akan memastikan bahwa kami memiliki driver yang tepat untuk programmer USBasp kami. Setelah kami melakukannya, kami siap melakukannya dan kami akan membaca nilai sekering default terlebih dahulu. Untuk melakukan itu, Anda perlu menjalankan perintah 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
Jika semuanya benar, perintah ini akan membaca sekering byte dan memasukkannya ke dalam tiga file teks terpisah. Gambar di bawah ini akan memberi Anda gambaran yang lebih baik tentang prosesnya.
Seperti yang Anda lihat, Avrdude membaca bit sekering pada Arduino nano dan menyimpannya menjadi tiga file teks terpisah. Sekarang, kami membukanya dan mendapatkan tiga nilai; untuk EFUSE: 0xFD, untuk HFUSE: 0XDA, untuk LFUSE: 0xFF. Ini adalah nilai sekering default yang kami dapatkan untuk Arduino nano. Sekarang, mari kita ubah bit ini menjadi biner dan bandingkan dengan nilai defaultnya dari lembar data. Tabel di bawah menunjukkan hal itu dengan tepat.
Untuk kenyamanan, bit sekring ditulis dalam nilai Heksadesimal, tetapi jika kita mengubahnya menjadi nilai biner dan membandingkannya dengan lembar data, kita akan tahu apa yang terjadi. Mari kita mulai dengan Lower Fuse Byte. Seperti yang Anda lihat dari string di atas, ini disetel ke 0XFF dan Nilai biner akan menjadi 0B11111111.
Membandingkan Stock Lower Fuse Bytes dengan Arduino:
Byte Sekring Rendah |
Bit Tidak. |
Nilai Default dalam AVR |
Nilai Default Arduino |
CKDIV8 |
7 |
0 (diprogram) |
1 (tidak terprogram) |
CKOUT |
6 |
1 (tidak terprogram) |
1 (tidak terprogram) |
SUT1 |
5 |
1 (tidak terprogram) |
1 (tidak terprogram) |
SUT0 |
4 |
0 (diprogram) |
1 (tidak terprogram) |
CKSEL3 |
3 |
0 (diprogram) |
1 (tidak terprogram) |
CKSEL2 |
2 |
0 (diprogram) |
1 (tidak terprogram) |
CKSEL1 |
1 |
1 (tidak terprogram) |
1 (tidak terprogram) |
CKSEL0 |
0 |
0 (diprogram) |
1 (tidak terprogram) |
Higher Fuse Byte diatur ke 0XDA dalam biner yaitu 0B11011010.
Fuse Byte yang Lebih Tinggi dalam Biner:
High Fuse Byte |
Bit Tidak. |
Nilai Default dalam AVR |
Nilai Default Arduino |
RSTDISBL |
7 |
1 (tidak terprogram) |
1 (tidak terprogram) |
DWEN |
6 |
1 (tidak terprogram) |
1 (tidak terprogram) |
SPIEN |
5 |
0 (diprogram) |
0 (diprogram) |
WDTON |
4 |
1 (tidak terprogram) |
1 (tidak terprogram) |
EESAVE |
3 |
1 (tidak terprogram) |
1 (tidak terprogram) |
BOOTSZ1 |
2 |
0 (diprogram) |
0 (diprogram) |
BOOTSZ0 |
1 |
0 (diprogram) |
1 (tidak terprogram) |
BOOTRST |
0 |
1 (tidak terprogram) |
0 (diprogram)) |
Pengaturan untuk Extended Fuse Byte diatur ke 0XFD, dalam biner adalah 0B11111101.
Extended Fuse Byte dalam Biner:
Perpanjangan Fuse Byte |
Bit Tidak. |
Nilai Default dalam AVR |
Nilai Default Arduino |
- |
7 |
1 |
1 |
- |
6 |
1 |
1 |
- |
5 |
1 |
1 |
- |
4 |
1 |
1 |
- |
3 |
1 |
1 |
BODLEVEL2 |
2 |
1 (tidak terprogram) |
1 (tidak terprogram) |
BODLEVEL1 |
1 |
1 (tidak terprogram) |
0 (diprogram) |
BODLEVEL0 |
0 |
1 (tidak terprogram) |
1 (tidak terprogram) |
Sekarang, ini menandai akhir dari bagian ini. Sampai sekarang, kita telah belajar banyak tentang mikrokontroler AVR dan bit sekringnya. Jadi, mari selesaikan artikel ini dengan menguji teori kita dengan mengubah dan bereksperimen dengan beberapa bit sekering di Arduino Nano.
Komponen yang Diperlukan untuk Menguji Sekring di AVR
Kami telah berbicara banyak tentang sekering di bagian atas. Tetapi untuk melanjutkan lebih jauh dalam artikel ini, kita memerlukan beberapa komponen perangkat keras dan beberapa alat perangkat lunak. Di bagian ini, kita akan membicarakannya. Daftar komponen yang diperlukan dengan gambar ditampilkan di bawah ini.
- Breadboard - 1
- Arduino Nano - 1
- USBasp AVR Programmer - 1
- Kabel USB - 1
- AVR 10-Pin ke 6- Pin Converter - 1
- Avrdude (Alat perangkat lunak untuk Pemrograman AVR)
- LED - 1
- Resistor 330R - 1
- Kabel jumper
Skema untuk Menguji Fuse Bits di AVR
Pengaturan pengujian perangkat keras ditunjukkan di bawah ini dalam pengaturan ini. Kami telah menghubungkan Arduino Nano ke PC dengan kabel USB, dan kami juga telah menghubungkan programmer USBasp ke PC. Tujuan artikel ini adalah untuk memprogram bit sekering dalam AVR. Untuk alasan itu, kami telah menghubungkan programmer USBasp dengan Arduino. Gambar di bawah ini akan memberi Anda gambaran yang lebih baik tentang pengaturannya.
Menguji Sekring di AVR
Setup pengujian ditunjukkan di bawah ini. Seperti yang Anda lihat, kami telah menghubungkan Arduino dan programmer USBasp ke USB laptop saya.
Sekarang mari buka Arduino IDE dan unggah sketsa blink dasar. Isi dari sketsa kedip dasar sudah cukup jelas, jadi saya tidak memberikan detil apapun tentang itu.
Anda akan melihat di video bahwa led pada pin no 13 berkedip sebagaimana mestinya. Sekarang mari kita ubah pengaturan sekering dan atur ke nilai defaultnya. Dan seperti yang telah kita lihat sebelumnya di lembar data; EFUSE - nya adalah 0XFF; HFUSE adalah D9; LFUSE adalah: 62. Sekarang mari kita konfigurasikan dengan Avrdude, flash, dan lihat apa yang terjadi. Kode yang akan kita gunakan adalah-
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 berkedip sangat lambat karena kami telah menghitung dan memprogram nilai untuk jam 16Mhz dan sekarang setelah membakar sekring, itu hanya osilator RC internal 1Mhz. Inilah mengapa LED berkedip sangat lambat. Sekarang mari kita coba mengunggah sketsa sekali lagi. Kita akan melihat bahwa Arduino memberikan kesalahan dan kodenya tidak diunggah. Karena dengan mengganti sekring, kita juga mengacaukan pengaturan bootloader. Anda dapat melihatnya pada gambar di bawah ini.
Untuk memperbaikinya dan mengembalikan Arduino seperti sebelumnya, kita hanya perlu membakar bootloader lagi untuk Arduino. Untuk melakukan itu, buka Tools -> Programmer- USBasp , dan setelah kita melakukannya, kita dapat kembali ke tools dan kita dapat mengklik opsi burn bootloader. Ini sekali lagi akan membakar bootloader saham di Arduino Anda dan semuanya akan kembali seperti sebelumnya.
Setelah bootloader di-flash kembali ke Arduino, itu kembali ke keadaan semula dan gambar terakhir menunjukkan Anda LED berkedip setelah bootloader dibakar lagi.
Dan ini menandai akhir dari artikel ini. Saya harap Anda menikmati artikel ini dan mempelajari sesuatu yang baru. Jika Anda memiliki pertanyaan tentang artikel tersebut, jangan ragu untuk memberikan komentar di bawah ini.