Rabu, 26 Februari 2014

SETTING FUSE BITS MIKROKONTROLLER AVR


         Baiklah, mari kita mulai bagaimana cara mensetting fuse bits. Meskipun banyak diinternet menyediakan fuse calculator sehingga dengan mudahnya kita bisa mensetting fuse bit. Tapi tak ada salahnya mempelajari cara manualnya sehingga kita bisa paham filosofinya.
         Fuse bit memiliki 2 byte, 1 byte pertama berupa High Fuse Byte dan 1 byte yang kedua berupa Low Fuse Byte. Pertama akan kita tampilkan cara setting pada low fuse byte. Berikut ini isi dari low fuse byte :

 

                Low fuse byte seperti yang tampil diatas, dari 8 bit tadi akan kita cascade lagi dengan penjelasan dimulai dari CKSEL3..0 (3 sampai 0). Berikut ini beberapa mode dari CKSEL (clock source select/pemilihan sumber clock);



                   Dari tabel diatas dijelaskan nilai CKSEL3..0 ada diantara nilai 1111-1010 (maksudnya pada range ini terdapat nilai yang berkaitan dengan frekuensi clock yang kita inginkan, hanya tabel ini masih ada penjabaran berikutnya). Tetapi untuk menentukan pada nilai yang mana frekuensi yang kita inginkan kita harus melihat lagi tabel berikutnya :

 
                Bisa dilihat pada tabel diatas, dari CKSEL3..1 (CKSEL 0 ada pada penjelasan berikutnya) dan kombinasinya dengan CKOPT (digunakan pada range frekuensi yang tinggi,dibutuhkannya ayunan sinyal secara penuh,atau saat akan men drive sebuah buffer dimana buffer tersebut memiliki port output yang sama dengan clock). INGAT!!!!, PADA SETTING FUSE BITS INI “1” BERARTI UNPROGRAMMED,”0” BERARTI PROGRAMMED. Semisal kita ingin mengeset clock dengan sumber eksternal berupa kristal 12 Mhz maka kita set CKOPT 0 dan CKSEL3..1 111 boleh juga 110 kecuali 101 ya!!,101 untuk pemakaian ceramic resonator.
         Mari kita lanjutkan dengan pengesetan bit berikutnya yaitu CKSEL 0,SUT0..1. Berikut ini tabel dari  CKSEL 0,SUT0..1 :
        
         Okeh bisa dilihat kan,3 bit tadi berfungsi untuk mengatur waktu start up mikrokontroller untuk mencapai keadaan stabilnya. Agar lebih mudah dipahami akan saya beri sebuah contoh. Semisal, kita memiliki chip ATMega 16 dan ingin menggunakan clock eksternal dengan kristal 12 Mhz. Maka, bagaimana cara mensetting low fuse byte nya agar chip benar2 bisa mendapat suplai clock dari kristal 12 Mhz ?. Pertama buka datasheet ATMega16 atau lihat tabel yang sudah saya tampilkan diatas.
·                     Kita tentukan fuse untuk sumber clocknya, lihat tabel 2 kemudian tabel 4, kita pilih untuk CKOPT =0 (ada di high fuse byte) dan CKSEL 3=1 ; CKSEL 2=1 ; CKSEL 0 =1, alasan kenapa saya pilih 111 karena eksternal clock yang kita pasang berfrekuensi tinggi.
·                     Lihat tabel 5 untuk menentukan start up time, misal kita ingin waktu startup paling cepat maka bisa dipilih CKSEL = 1; SUT 1 = 1 ; SUT 0 =1.
·                     Jika kita ingin mengaktifkan fitur brownout detection maka bit BODEN = 0 (ingat,”0” berarti unprogrammed, dan kita bisa mengaktifkan berapa level trigger brown out detection akan aktif, pada chip ATMega 16 ada dua opsi 2.7 V atau 4.0 V. Opsi 2.7 V BODLEVEL = 1,BODLEVEL = 0. Anggap saja kita akan mengaktifkan BOD ya. Pada chip ATTiny 2313 BOD level lebih bervariasi sampai Vcc 1.7 V, tapi akan kita bahas di tempat lain.

         3 step diatas selesai, berarti kita sudah mengeset sisi low fuse byte, dibawah ini bisa dilihat hasil setting low fuse byte dengan eksternal kristal :

BODLEVEL
BODEN
SUT1
SUT0
CKSEL3
CKSEL2
CKSEL1
CKSEL0
1
0
1
1
1
1
1
1

 Atau dalam hexa nya :0xBF.

         Berikutnya adalah mensetting high fuse byte, dibawah ini isi dari high fuse byte:

Hati hati dengan bit OCD (On Chip Debug) dan SPIEN (Serial Programming Interface Enable). Pastikan OCD = 1 dan SPIEN = 0, jika sampai keliru bisa-bisa chip mikro tidak bisa diprogram dari luar. Karena kita memakai eksternal programmer maka fitur bootloader kita nonaktifkan, maka bit BOOTRST = 1,untuk BOOTSZ0..1 = 0 saja. Dan jangan lupa ya, CKOPT bit tadi sudah di set = 0.



Begini jelasnya :


OCDEN
JTAGEN
SPIEN
CKOPT
EESAVE
BOOTSZ1
BOOTSZ0
BOOTRST
1
0
0
0
1
1
1
1

Atau hexanya : 0X8F

Berikut ini beberapa cara setting fuse byte dari beberapa aplikasi :

1.CodeVision AVR

Pilih pada Chip Programmer maka akan muncul tampilan seperti di atas. Untuk catatan, saat ingin memprogram fuse bits pada CVAVR, “centang” berarti programmed (pada datasheet atmel berarti di set 0) sedangkan “tidak dicentang” berarti unprogrammed (pada datasheet atmel berarti di set 1).

Kemudian klik tab”program” pilih fuse bits atau kalau ingin sekalian memasukkan application program jua bisa klik “program all”.



2.Extreme burner AVR


Buka aplikasi Extreme burner AVR pilih tab “Fuse Bits/Settings”. Centang checkbox low fuse dan high fuse, kemudian kita masukkan nilai setting fuse yang sudah kita tentukan tadi. Kemudian klik button Write.

3. AVRDUDE
   

Pilih jenis MCU nya, atau langsung klik detect saja bisa langsung muncul jenis chip kita pakai, dan pastinya minimum sistem mikro dan programmer sudah connect ke komputer. Lalu masukkan nilai Low dan High fuse pada textbox L dan H. Kemudian tekan write.

Demikian lah sedikit yang saya tahu yang bisa bagikan buat para pembaca blog ini. Semoga bisa bermanfaat dan barokah. Saya mohon maaf dan koreksinya jika ada hal hal yang perlu dikoreksi. Mohon untuk segera di protes,,hehehe...kalau ada hal yang keliru.

3 komentar:

  1. maaf gan mau nanya nih.apa smua uC baru ( kosong )mesti di set dulu fuse bit nya baru bisa dipakai?mohon pencerahannya gan.trima kasih

    BalasHapus
  2. maaf gan mau nanya nih.apa smua uC baru ( kosong )mesti di set dulu fuse bit nya baru bisa dipakai?mohon pencerahannya gan.trima kasih

    BalasHapus
  3. mas, mau tanya, saya pake avrdude gui, seperti aplikasi no 3 di atas. nah disitu kan ada kolom hFuse dan lFuse, itu diisi dengan apa? Mohon penjelasannya makasih.

    BalasHapus