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.

Selasa, 25 Februari 2014

FUNGSI FUSE BITS AVR MIKROKONTROLLER

                
        Oke,, Selamat sore dan salam sukses buat sahabat elektro. Pada kesempatan kali ini saya mau membahas salah satu basic of the basics pengoperasian chip mikrokontroller, khususnya ATMEL AVR (saya cuma pernah pake yang ini soalnya,hehe). Meskipun hal ini dasarnya dasar tetapi pada umumnya banyak para pengguna atau entahlah namanya terkadang mengabaikan point yang satu ini. Entah karena memang tidak tahu, atau karena ketakutan-ketakutan yang tidak berdasar.

    Yaaak,,,yang akan saya coba sharingkan di blog ini yaitu “FUSE BITS”. Di samping flash, eeprom,RAM sebagai bagian dari chip mikrokontroller ada juga yang namanya fuse bits. Fuse bits ini memiliki fungsi yang cukup vital pada pengoperasian mikrokontroller berikutnya. Sekali setting ini di write ke chip, setting ini tidak akan berubah ataupun hilang bila power off (non volatile).

    Berikut ini beberapa fungsi dari fuse bits, sehingga kok bisa dikatakan vital :
1.    Untuk menentukan sumber clock dari mikrokontroller :
       Clock diibaratkan detak jantung bagi chip mikrokontroller, clock menentukan kecepatan untuk membaca ataupun mengeksekusi sebuah instruksi. Dengan fuse bits kita bisa menentukan dari mana kita mengambilkan clock source tersebut. Dari internal mikro itu sendiri (umumnya 1 Mhz, dengan maksimum setting clock frekuensinya 8 Mhz) ataupun sumber eksternal berupa kristal, resonator, ataupun osillator. Pemilihan sumber clock ini ditentukan dari tujuan untuk apa mikro tersebut diprogram, jika digunakan untuk eksekusi perintah yang tidak terlalu mengutamakan kecepatan dan akurasi clock source internal sudah cukup. Pembahasan ini juga diilhami dari pengalaman saya waktu mahasiswa dulu, saat itu saya cuma ikut2 an saja dalam desain hardware dari mikrokontroller, temen2 pasang crystal 11,0--- Mhz saya juga ikut pasang, tetapi belum ada wawasan tentang fuse bit ini. Tanpa disetting terlebih dahulu langsung saya pakai  dah tu mikro, dan akibatnya lumayan, mulai dari setting timer yang menclek terus dan respon mikro yang lambat. Ya jelas aja, saya pasang  kristal eksternal tapi setting fuse bit nggak saya rubah, mikro tetap pakai source clock defaultnya,,,dari internal sebesar 1 Mhz, mampus dah,,,hahahaha. Saya baru sadar kebodohan saya akhir-akhir ini. Cukup!!!

2.     Menentukan kecepatan waktu start up mikro :
        Dengan mengatur setting fuse bits kita bisa mengatur waktu startup mikro yang dibutuhkan sampai mencapai keadaan stabil, dari keadaan power off ataupun sleep.

3.    Setting brownout detector level :
       Jika tegangan sumber mikrokontroller drop maka hal ini akan berdampak pada kecepatan clock mikro yang pastinya akan menurun, yang mana nantinya bisa menyebabkan penghapusan ataupun penumpukan data pada RAM dan EEPROM dan berbagai kekacauan lainnya. Maka dari itu perlu suatu nilai tegangan sumber pada level minimal yang nantinya bertugas untuk mematikan chip mikro sampai nanti menyalakannya, mereset mikro tersebut jika tegangan sumber sudah normal.

4.      Setting Bootloader :
         Pada beberapa chip mikrokontroller terdapat fasilitas yang namanya bootloader, yang memungkinkan user untuk memasukkan program pada alamat tertentu pada chip mikro sehingga tanpa menggunakan hardware untuk programmer pun,program aplikasi bisa di write ke dalam chip mikrokontroller. Pembahasan lebih lengkap akan saya bahas di kesempatan lain.

5.      Enable serial programming :         memungkinkan chip mikrokontroller bisa di program secara serial, secara default sudah enable.

MIKROKONTROLLER ATMEGA 8535


            ATMEL sebagai salah satu vendor yang mengembangkan dan memasarkan produk mikroelektronika dengan perkembangan terakhir, yaitu generasi AVR (Alf and Vegard’s Rise Processor). Microcontroller AVR memiliki arsitektur RISC 8 bit, di mana semua instruksi dikemas dalam kode 16-bit (16 bits word) dan sebagian besar instruksi dieksekusi dalam satu siklus clock, berbeda dengan MCS51 yang membutuhkan 12 siklus clock. AVR berteknologi RISC (Reduced Instruction SetComputing), sedangkan seri MCS51 berteknologi CISC (Complex Instruction Set Computing). Secara umum AVR dapat dikelompokkan menjadi 4 kelas, yaitu keluarga ATtiny, keluarga AT90Sxx, keluarga ATMega dan AT86RFxx. Pada dasarnya yang membedakan masing-masing kelas adalah memori, peripheral, dan fungsinya. Dari segi arsitektur dan instruksi yang digunakan bisa dikatakan hampir sama. Microcontroller AVR ATMega 8535 merupakan microcontroller CMOS 8 bit daya kecil. Dengan mengeksekusi instruksi dalam 1 putaran clock, ATMega 8535 menerima 1MIPS per MHz sehingga mengizinkan pembuat sistem untuk mengoptimalkan konsumsi tenaga  dengan kecepatan proses yang cepat. 

 Arsitektur Microcontroller  AVR ATMega 8535
Berikut ini adalah gambar asitektur microcontroller AVR ATMega 8535:






Gambar Asitektur Microcontroller AVR ATMega 8535 *)
*) http://www.atmel.com


 Fitur Microcontroller  AVR ATMega 8535
Kapabilitas detail dari microcontroller AVR ATmega 8535 adalah sebagai berikut:
1)      Sistem mikroprosesor 8 bit berbasis RISC dengan kecepatan maksimal 16Mhz.
2)      Kapabilitas memori flash 8 KB, SRAM sebesar 512 byte, dan EEPROM sebesar 512 byte.
3)      ADC internal dengan fidelitas 10 bit sebanyak 8 channel.
4)      Portal komunikasi serial (UART) dengan kecepatan maksimal 2,5 Mbps.
5)      Enam pilihan mode sleep menghemat penggunaan daya listrik.

Konfigurasi Pin Microcontroller  AVR ATMega 8535
Berikut ini adalah gambar konfigurasi pin microcontroller AVR ATMega 8535:


Konfigurasi Pin Microcontroller AVR ATMega 8535 *)
*) http://www.atmel.com
Secara fungsional konfigurasi pin microcontroller ATMega 8535 adalah:
1)     VCC merupakan pin yang berfungsi sebagai pin masukan catu daya.
2)     GND merupakan pin ground.
3)     Port A (PA0...PA7) merupakan pin I/O dua arah dan pin masukan ADC.
4)     Port B (PB0...PB7) merupakan pin I/O dua arah dan pin fungsi khusus, yaitu timer/counter, komparator analog dan SPI.
5)     Port C (PC0...PC7) merupakan pin I/O dua arah dan pin fungsi khusus, yaitu TWI, komparator analog dan timer osilator.
6)     Port D (PD0...PD7) merupakan pin I/O dua arah dan pin fungsi khusus, yaitu komparator analog, interupsi eksternal dan komunikasi serial.
7)     RESET merupakan pin yang digunakan untuk me-reset microcontroller.
8)     XTAL1 dan XTAL2 merupakan pin masukan clock eksternal.
9)     AVCC merupakan pin masukan tegangan untuk ADC.
10) AREF merupakan pin masukan tegangan referensi ADC.

Peta Memori
Microcontroller AVR ATMega 8535 memiliki ruang pengalamatan memori data program yang terpisah. Memori data terbagi menjadi 3 bagian, yaitu 32 buah register umum, 64 buah register I/O, dan 512 byte SRAM internal. Register keperluan umum menempati space data pada alamat terbawah, yaitu $00 sampai $1F. Sementara itu register khusus untuk menangani I/O dan kontrol terhadap microcontroller menempati 64 alamat berikutnya, yaitu mulai dari $20 hingga $5F. Register tersebut merupakan register yang khusus digunakan untuk mengatur fungsi terhadap berbagai peripheral mikrokontroler, seperti kontrol register, timer/counter, fungsi-fungsi I/O dan sebagainya. Berikut ini adalah konfigurasi memori data microcontroller AVR ATMega 8535:


Konfigurasi Memori Data Microcontroller AVR ATMega 8535 *)
*) http://www.atmel.com

Memori program yang terletak dalam flash PEROM tersusun dalam word atau 2 byte karena setiap instruksi memiliki lebar 16-bit atau 32-bit. AVR ATMega 8535 memiliki 4Kbyte x 16-bit flash PEROM dengan alamat mulai $000 sampai $FFF. AVR tersebut memiliki 12-bit Program Counter (PC) sehingga mampu mengalamati isi flash. Selain itu, AVR ATMega 8535 juga memiliki memori data berupa EEPROM 8-bit sebanyak 512 byte. Alamat EEPROM dimulai dari $000 sampai $1FF. Berikut ini adalah konfigurasi memori program microcontroller AVR ATMega 8535:

 Konfigurasi Memori Program Microcontroller AVR ATMega 8535 *)
*) http://www.atmel.com

Rangkaian Osilator
Jantung dari microcontroller AVR ATMega 8535 terletak pada rangkaian yang membangkitkan pulsa   clock. Pin XTAL1 dan XTAL2 disediakan untuk disambungkan dengan jaringan resonan untuk membentuk sebuah osilator. Microcontroller AVR ATMega 8535 dirancang untuk running          pada frekuensi 3 MHz sampai 10 MHz. Berikut ini adalah gambar rangkaian osilator pada microcontroller AVR ATMega 8535:

Gambar Rangkaian Osilator pada Microcontroller AVR ATMega 8535 **)
**) http://www.atmel.com
 Status Register
Status Register adalah register berisi status yang dihasilkan pada setiap operasi yang dilakukan ketika instruksi dieksekusi. Berikut ini adalah gambar status register microcontroller AVR ATMega 8535:

Status Register Microcontroller AVR ATMega 8535 *)
*) http://www.atmel.com

Dengan keterangan sebagai berikut:
1)     Bit 7-I : Global Interrupt Enable
2)     Bit harus di-set untuk mengenable interupsi. Setelah itu, anda dapat mengaktifkan interupsi mana yang digunakan dengan mengenable bit kontrol register yang bersangkutan secara individu.
3)     Bit 6-T : Bit Copy Storage
4)     Instruksi BLD dan BST menggunakan bit-T sebagai sumber/tujuan dalam operasi bit. Suatu bit dalam register GPR dapat disalin ke bit T menggunakan instruksi BST dan sebaliknya bit-T dapat disalin kembali ke suatu bit dalam register GPR menggunakan instruksi BLD.
5)     Bit 5-H : Half Carry Flag
6)     Bit 4-S : Sign Bit
7)     Bit-S merupakan hasil operasi EOR antara flag-N (negatif) dan flag V (komplemen dua overflow).
8)     Bit 3-V : Two’s Complement Overflow Flag
9)     Bit berguna untuk mendukung operasi aritmatika.
10) Bit 2-N : Negative Flag
11) Apabila suatu operasi menghasilkan bilangan negatif, maka flag-N di-set.
12) Bit 1-Z : Zero Flag
13) Bit akan di-set bila hasil operasi yang diperoleh adalah nol.
14) Bit 0-C : Carry Flag
15) Apabila suatu operasi menghasilkan carry, maka bit akan di-set.
Berikut ini adalah tabel pengalamatan I/O pada microcontroller AVR ATMega 8535:


Tabel  Pengalamatan I/O pada Microcontroller AVR ATMega 8535 *)

*) http://www.atmel.com