Tulisan ini sengaja saya buat karena beberapa waktu yang lalu dua mikrokontroler saya (semuanya ATMega32, masing-masing dalam kemasan SMD dan PDIP) menjadi korban ketidak-tahuan saya tentang otak-atik System Clock atau FUSE bit pada mikrokontroler AVR.

Perlu diketahui bahwa setiap mikrokontroler AVR memiliki fasilitas untuk memilih sumber clock atau detak dengan banyak alternatif pilihan. Berbeda dengan keluarga AT89, keluarga AVR memberikan opsi pilihan sumber clock untuk flkesibilitas penggunaan, bukan untuk menyulitkan penggunaan. Jika siapapun Anda yang saat ini sedang terlibat dengan aplikasi-aplikasi mikrokontroler AVR dan tidak pernah peduli dengan system clock, atau dengan kata lain tidak pernah otak-atik FUSE bit, dipastikan kristal yang Anda pasang berapapun aja nilainya tidak ada gunanya sama sekali! Loch kok bisa? Ya karena default dari pabriknya (http://www.atmel.com) adalah sesuai dengan paragraf yang mereka tulis di datasheet-nya:

The device is shipped with CKSEL = “0001” and SUT = “10”. The default clock source setting is therefore the 1 MHz Internal RC Oscillator with longest startup time. This default setting ensures that all users can make their desired clock source setting using an In-System or Parallel Programmer.

Okey? Sudah jelas? Hanya 1 MHz internal saja clock-nya, kalau gak percaya silahkan cabut saja kristal Anda dan biarkan mikrokontroler AVR Anda bekerja dengan baik tanpa kristal (beberapa teman yang saya sarankan hal tersebut sempat kaget juga). Jadi sudah capek-capek ngitung reload, timer dan lain sebagainya ternyata hanya bekerja di 1 MHz saja secara internal. So, bagaimana caranya agar bisa menggunakan kristal eksternal atau internal yang lebih besar dari 1 MHz?

Sebelum saya memberikan penjelasan lebih lanjut, ada baiknya Anda lihat dulu bagan sumber clock yang ada pada keluarga AVR berikut ini:

Gambar 1. Sumber clock pada AVR

Terlihat bahwa sumber clock untuk AVR berasal dari:

  • External Crystal/Ceramic Resonator
  • External Low-frequency Crystal
  • External RC Oscillator
  • Calibrated Internal RC Oscillator, dan
  • External Clock

Untuk bisa mengatur sumber clock mana yang akan digunakan, Anda perlu tahu cara mengaturnya, untuk itu ada beberapa bit register yang perlu diperhatikan. Perhatikan Tabel 1, ditunjukkan berbagai macam opsi pilihan sumber clock berdasar bit CKSEL3..0.

Tabel 1. Device Clocking Options Select

Pemasangan kristal dilakukan pada pin XTAL1 dan XTAL2 (sebagaimana ditunjukkan pada Gambar 2). FUSE bit CKOPT digunakan untuk memilih satu diantara dua pilihan mode penguat osilator yang berbeda. Untuk lebih jelasnya silahkan perhatikan Tabel 2.

Gambar 2. Rangkaian Crystal Oscillator

Tabel 2. Crystal Oscillator Operating Modes

Sedangkan bit CKSEL0 dikombinasikan dengan bit-bit SUT1..0 digunakan untuk memilih waktu start-up sebagaimana ditunjukkan pada Tabel 3.

Tabel 3.Start-up Times for the Crystal Oscillator Clock Selection

Untuk pilihan Low-frequency Crystal Oscillator, dipilih dengan mengatur CKSEL3..0 = 1001 (lihat lagi Tabel 1). Kristal dipasang sesuai dengan gambar 2. Waktu start-up-nya ditunjukkan pada Tabel 4.

Tabel 4. Start-up Times for the Low-frequency Crystal Oscillator Clock Selection

Sedangkan pilihan External RC Oscillator menggunakan rangkaian yang ditunjukkan pada Gambar 3. Nilai frekuensi-nya ditentukan dengan persamaan f = 1/(3RC), dengan nilai C sekitar 22pF. Mode operasinya ditunjukkan pada Tabel 5, sedangkan waktu start-up-nya ditunjukkan pada Tabel 6.

Gambar 3.Konfigurasi RC eksternal

Tabel 5.External RC Oscillator Operating Modes

Tabel 6. Start-up Times for the External RC Oscillator Clock Selection

Sedangkan untuk pilihan Calibrated Internal RC Oscillator, pilihan mode operasi-nya ditunjukkan pada Tabel 7 dan waktu start up-nya ditunjukkan pada Tabel 8.

Tabel 7. Internal Calibrated RC Oscillator Operating Modes

Tabel 8. Start-up Times for the Internal Calibrated RC Oscillator Clock Selection

Jika memang dikehendaki, Anda bisa juga memasang sumber clock eksternal (External Clock) tanpa menggunakan kristal maupun rangkaian RC dilakukan dengan memberikan nilai CKSEL3..0=000, misalnya sumber clock yang berasal dari generator fungsi atau mikrokontroler lainnya. Rangkaiannya ditunjukkan pada Gambar 4. Sedangkan pilihan waktu start up-nya ditunjukkan pada Tabel 9.

Gambar 4. Konfigurasi penggerak clock eksternal

Tabel 9. Start-up Times for the External Clock Selection

Bagaimana? Bingung? Okey, berikut ini saya rangkumkan semua kemungkinan sumber clock yang bisa diberikan ke mikrokontroler AVR (dalam hal ini saya gunakan acuan ATMega32). Nilai pengaturan dinyatakan dalam High Byte (berkaitan dengan bit-bit OCDEN, JTAGEN, SPIEN, CKOPT, EESAVE, BOOTSZ1, BOOTSZ0 dan BOOTRST) dan Low Byte (berkaitan dengan bit-bit BODLEVEL, BODEN, SUT1, SUT0, CKSEL3, CKSEL2, CKSEL1 dan CKSEL0), yang dicetak tebal merupakan DEFAULT pabrik:

  • Ext. Clock; Start-up time: 6 CK + 0 ms (HIGH: 0xFF dan LOW: 0xCO);
  • Ext. Clock; Start-up time: 6 CK + 4 ms (HIGH: 0xFF dan LOW: 0xDO);
  • Ext. Clock; Start-up time: 6 CK + 64 ms (HIGH: 0xFF dan LOW: 0xEO);
  • Int. RC Osc. 1 MHz; Start-up time: 6 CK + 0 ms (HIGH: 0xFF dan LOW: 0xC1);
  • Int. RC Osc. 1 MHz; Start-up time: 6 CK + 4 ms (HIGH: 0xFF dan LOW: 0xD1);
  • Int. RC Osc. 1 MHz; Start-up time: 6 CK + 64 ms (HIGH: 0xFF dan LOW: 0xE1);
  • Int. RC Osc. 2 MHz; Start-up time: 6 CK + 0 ms (HIGH: 0xFF dan LOW: 0xC2);
  • Int. RC Osc. 2 MHz; Start-up time: 6 CK + 4 ms (HIGH: 0xFF dan LOW: 0xD2);
  • Int. RC Osc. 2 MHz; Start-up time: 6 CK + 64 ms (HIGH: 0xFF dan LOW: 0xE2);
  • Int. RC Osc. 4 MHz; Start-up time: 6 CK + 0 ms (HIGH: 0xFF dan LOW: 0xC3);
  • Int. RC Osc. 4 MHz; Start-up time: 6 CK + 4 ms (HIGH: 0xFF dan LOW: 0xD3);
  • Int. RC Osc. 4 MHz; Start-up time: 6 CK + 64 ms (HIGH: 0xFF dan LOW: 0xE3);
  • Int. RC Osc. 8 MHz; Start-up time: 6 CK + 0 ms (HIGH: 0xFF dan LOW: 0xC4);
  • Int. RC Osc. 8 MHz; Start-up time: 6 CK + 4 ms (HIGH: 0xFF dan LOW: 0xD4);
  • Int. RC Osc. 8 MHz; Start-up time: 6 CK + 64 ms (HIGH: 0xFF dan LOW: 0xE4);
  • Ext. RC Osc.         -  0.9 MHz; Start-up time: 18 CK + 0 ms (HIGH: 0xFF dan LOW: 0xC5);
  • Ext. RC Osc.         -  0.9 MHz; Start-up time: 18 CK + 4 ms (HIGH: 0xFF dan LOW: 0xD5);
  • Ext. RC Osc.         -  0.9 MHz; Start-up time: 18 CK + 64 ms (HIGH: 0xFF dan LOW: 0xE5);
  • Ext. RC Osc.         -  0.9 MHz; Start-up time: 6 CK + 4 ms (HIGH: 0xFF dan LOW: 0xF5);
  • Ext. RC Osc. 0.9 MHz -  3.0 MHz; Start-up time: 18 CK + 0 ms (HIGH: 0xFF dan LOW: 0xC6);
  • Ext. RC Osc. 0.9 MHz -  3.0 MHz; Start-up time: 18 CK + 4 ms (HIGH: 0xFF dan LOW: 0xD6);
  • Ext. RC Osc. 0.9 MHz -  3.0 MHz; Start-up time: 18 CK + 64 ms (HIGH: 0xFF dan LOW: 0xE6);
  • Ext. RC Osc. 0.9 MHz -  3.0 MHz; Start-up time: 6 CK + 4 ms (HIGH: 0xFF dan LOW: 0xF6);
  • Ext. RC Osc. 3.0 MHz -  8.0 MHz; Start-up time: 18 CK + 0 ms (HIGH: 0xFF dan LOW: 0xC7);
  • Ext. RC Osc. 3.0 MHz -  8.0 MHz; Start-up time: 18 CK + 4 ms (HIGH: 0xFF dan LOW: 0xD7);
  • Ext. RC Osc. 3.0 MHz -  8.0 MHz; Start-up time: 18 CK + 64 ms (HIGH: 0xFF dan LOW: 0xE7);
  • Ext. RC Osc. 3.0 MHz -  8.0 MHz; Start-up time: 6 CK + 4 ms (HIGH: 0xFF dan LOW: 0xF7);
  • Ext. RC Osc. 8.0 MHz -  12.0 MHz; Start-up time: 18 CK + 0 ms (HIGH: 0xFF dan LOW: 0xC8);
  • Ext. RC Osc. 8.0 MHz -  12.0 MHz; Start-up time: 18 CK + 4 ms (HIGH: 0xFF dan LOW: 0xD8);
  • Ext. RC Osc. 8.0 MHz -  12.0 MHz; Start-up time: 18 CK + 64 ms (HIGH: 0xFF dan LOW: 0xE8);
  • Ext. RC Osc. 8.0 MHz -  12.0 MHz; Start-up time: 6 CK + 4 ms (HIGH: 0xFF dan LOW: 0xF8);
  • Ext. Low-Freq. Crystal; Start-up time: 1K CK + 4 ms (HIGH: 0xFF dan LOW: 0xC9);
  • Ext. Low-Freq. Crystal; Start-up time: 1K CK + 64 ms (HIGH: 0xFF dan LOW: 0xD9);
  • Ext. Low-Freq. Crystal; Start-up time: 32K CK + 64 ms (HIGH: 0xFF dan LOW: 0xE9);
  • Ext. Crystal/Resonator Low Freq.; Start-up time: 258 CK + 4 ms (HIGH: 0xFF dan LOW: 0xCA);
  • Ext. Crystal/Resonator Low Freq.; Start-up time: 258 CK + 64 ms (HIGH: 0xFF dan LOW: 0xDA);
  • Ext. Crystal/Resonator Low Freq.; Start-up time: 1K CK + 0 ms (HIGH: 0xFF dan LOW: 0xEA);
  • Ext. Crystal/Resonator Low Freq.; Start-up time: 1K CK + 4 ms (HIGH: 0xFF dan LOW: 0xFA);
  • Ext. Crystal/Resonator Low Freq.; Start-up time: 1K CK + 64 ms (HIGH: 0xFF dan LOW: 0xCB);
  • Ext. Crystal/Resonator Low Freq.; Start-up time: 16K CK + 0 ms (HIGH: 0xFF dan LOW: 0xDB);
  • Ext. Crystal/Resonator Low Freq.; Start-up time: 16K CK + 4 ms (HIGH: 0xFF dan LOW: 0xEB);
  • Ext. Crystal/Resonator Low Freq.; Start-up time: 16K CK + 64 ms (HIGH: 0xFF dan LOW: 0xFB);
  • Ext. Crystal/Resonator Medium Freq.; Start-up time: 258 CK + 4 ms (HIGH: 0xFF dan LOW: 0xCC);
  • Ext. Crystal/Resonator Medium Freq.; Start-up time: 258 CK + 64 ms (HIGH: 0xFF dan LOW: 0xDC);
  • Ext. Crystal/Resonator Medium Freq.; Start-up time: 1K CK + 0 ms (HIGH: 0xFF dan LOW: 0xEC);
  • Ext. Crystal/Resonator Medium Freq.; Start-up time: 1K CK + 4 ms (HIGH: 0xFF dan LOW: 0xFC);
  • Ext. Crystal/Resonator Medium Freq.; Start-up time: 1K CK + 64 ms (HIGH: 0xFF dan LOW: 0xCD);
  • Ext. Crystal/Resonator Medium Freq.; Start-up time: 16K CK + 0 ms (HIGH: 0xFF dan LOW: 0xDD);
  • Ext. Crystal/Resonator Medium Freq.; Start-up time: 16K CK + 4 ms (HIGH: 0xFF dan LOW: 0xED);
  • Ext. Crystal/Resonator Medium Freq.; Start-up time: 16K CK + 64 ms (HIGH: 0xFF dan LOW: 0xFD);
  • Ext. Crystal/Resonator High Freq.; Start-up time: 258 CK + 4 ms (HIGH: 0xFF dan LOW: 0xCE);
  • Ext. Crystal/Resonator High Freq.; Start-up time: 258 CK + 64 ms (HIGH: 0xFF dan LOW: 0xDE);
  • Ext. Crystal/Resonator High Freq.; Start-up time: 1K CK + 0 ms (HIGH: 0xFF dan LOW: 0xEE);
  • Ext. Crystal/Resonator High Freq.; Start-up time: 1K CK + 4 ms (HIGH: 0xFF dan LOW: 0xFE);
  • Ext. Crystal/Resonator High Freq.; Start-up time: 1K CK + 64 ms (HIGH: 0xFF dan LOW: 0xCF);
  • Ext. Crystal/Resonator High Freq.; Start-up time: 16K CK + 0 ms (HIGH: 0xFF dan LOW: 0xDF);
  • Ext. Crystal/Resonator High Freq.; Start-up time: 16K CK + 4 ms (HIGH: 0xFF dan LOW: 0xEF);
  • Ext. Crystal/Resonator High Freq.; Start-up time: 16K CK + 64 ms (HIGH: 0xFF dan LOW: 0xFF);

Pilihan-pilihan tersebut secara lengkap saya ambil dari fasilitas downloader AVR ISP MkII dari AVR Studio 4.0, sebagaimana ditunjukkan pada Gambar 5, perhatikan tanda panahnya.

Gambar 5. Jendela pengaturan FUSE pada fasilitas AVR ISP MkII dari AVR Studio 4.0

Semoga bermanfaat dan selamat mencoba, hati-hati dengan pilihan External, karena setelah Anda mengatur pilihan ke External, maka Anda harus menyediakan sumber clock eksternal sesuai dengan pengaturan yang dilakukan, jika tidak, maka AVR Anda tidak dapat di-program lagi (masih berfungsi tetapi seperti mengunci diri, padahal tidak diotak-atik Lock bit-nya).

Sumber:

  • Atmel, 2007, ATMega32 / ATMega32L Microcontroller with 32K Bytes In-System Programmable Flash Datasheet

Tags: , , , , , ,

23 Responses to “Mengenal System Clock pada Mikrokontroler AVR”

  1. link calculator fusebit

    http://www.engbedded.com/fusecalc/

  2. @dhani:
    terima kasih atas link-nya, semoga rekan2 yang lain juga bisa memanfaatkannya…

  3. http://yusisukmalia.wordpress......vr-tenang/

  4. oH GITU TO pak. Makanya tiap setting waktu kok gak pernah pas. Terima kasih penjelasannya…
    Ow y. Kira2 kalu mw setting waktu 1 detik dengan internal clock 1 Mhz g mn caranya?

  5. saya puny atmega8 mau tak pasang ext crystal 12 mhz setting fuse bit nya gmn??cause bingung 12mhz tergolong low,medium,high freq???plizzzz

  6. aslm .pak agfi saya mo tanya cara menampilkan 7 segmen dengan AT mega 8535 cara
    pemrogramanya gmn y pak..?

    krn sy sudah mencoba dng AVR studio .assembly tapi kadang bermasalah..
    tlng sertakan jika ada linknya pak…

    trimakasih pak..

  7. @ardhana:
    cukup panjang dijelaskan, menggunakan assembly konsep sama saja yaitu melakukan scan, misalnya 4×7segmen, jalur data cuman 8 bit dipake bersama ke-4 digit, hanya saja masing-masing digit dihidupkan secara bergantian (demikian juga dengan datanya)…

    karena dilakukan dengan cepat, mata qta menangkapnya kelihatan bersamaan (padahal bergantian)…

  8. untuk set fuse bit lebih mudah menggunakan AVRprog bawaan AVR studio. penggunan ext clock 12MHz bila menggunakan AVRprog pilih aja setting ext XTAL ,startup 30us + 1K CK (saya pakai setting ini) atau semua register fusebit =1 … cuma saya tidak paham apa makna 1K CK itu.

    dan perlu diingat juga di PORTC ATMEGA 32 /16 ada tambahan fungsi pin maka jika kita ingin menghubkan LCD atau untuk permainan ping pong led di PORTC fuse bit JTAG harus mati (disable) , kalo untuk ATMEGA 8535 tidak perlu.

    JTAG disable =1
    JTAG enable =0

  9. klo seting fuse bit untuk komunikasi serial gmana ya??? saya pakai atmega8535 dan crystal 11059200 Hz… mohon bantuannya…

  10. Hi pak agri…
    Saya salah setting fuse bits yang menyebabkan Avr128 saya terkunci dan tidak terbaca/mati suri…
    gimana cara mereset atau membuka kunci fusebitnya..

    Thanks..

  11. yang bingung setting fuse bit low pk kristal (eksternal).. low pake kristal 16MHz ama 12MHz, browsing, kok kyknya sama settingan low and high bitnya ~ ~ saya juga pengalaman atmega128 saya g kenak diprogram ulang.. pdhl low di kasih supply 5v, ttp jalan program yang lama (pdhl udah sempet berkali2 saya program, lancar). kyk ke lock gitu, pdhl fungsi lock nya program downloader g pernah saya otakatik.. tp terakhir kali, pas diprogram ulang, “chip enable eror”. udah saya periksa, ttp aja. kristal juga terpasang dengan baik.. jalur PCB saya cek juga baik. kira2 kenapa ya??

  12. Apa yang dimaksud dengan Start-up time: xx CK + x ms? Mohon pencerahan, makasih.

  13. @arduino:
    pada saat dihidupkan, mikrokontroler membutuhkan waktu, nah waktu itu didasarkan pada xx Ck dan masih bisa ditambah delay … ms (misalnya untuk persiapan periferal lainnya agar siap untuk operasional)…

  14. Assalamualaikum Master, maw tanya ngatur fuse bit menggunakan avrdude gimana ya, soalnya udah beberapa minggu cari solusinya blm ktmu, avr saya, kucoba Chip Signature muncul AVRProg error getting ID……katanya clocknya terkunci,,,,,tuk ngembaliin ke clock 12 MHrz gmana ya????thanks Master. Sampaikanlah walau satu ayat……

  15. ya ampun berarti selama ini sama saja dunk!
    saya kasih 12 mega,
    eh pak tapi di setingan codevision ada setingan kristalnya, apakah itu juga pengaruh apabila , masih memakai fuse bite dari pabrikanya mikro avr??

  16. Halo Pak! Trima kasih untuk penjelasannya tapi saya masih belum mengerti. Saya juga sedang membuat aplikasi berbasis mikro. Mikro yang saya gunakan ATmega8535 dan menggunakan kristal 12MHz dengan kapasitor masing2 22nF. Saya mencoba membuat program delay waktu 1 detik menggunakan program yang ada pada e-book tutorial AVR 1.0. saya mengambil potongan program yang menggunakan timer2 untuk membuat delay 1 detik.saya memasukkan program tersebut ke dalam program saya (Program yang saya gunakan CV AVR)dan dicompile tidak error, Tetapi pada saat diaktifkan delay waktunya bukan 1 detik tetapi sekitar 10 detik. Saya coba mengurangi ulang<100 menjadi ulang<10 baru nilainya menjadi 1 detik. say coba menggunakan delay_ms(1000) pada cv avr itu juga delaynya sekitar 10 detik. Kira-kira kenapa ya pak? mo0hon penjelasannya.. trima kasih…..

  17. terima kasih mas atas penjelasannx… tpi saya mau nnya juga, karena saya juga jadi korban setting fuse bit ini..,,masih bisa tidak lw atmega8535 yang sudah saya ganti fuse butx itu bisa lagi di program??
    saya hanya mengubah settingan pada L fuse menjadi

    Ext. RC Osc. 8.0 MHz - 12.0 MHz; Start-up time: 6 CK + 4 ms ;[CKSEL = 1000 ] SUT = 11

    saya pakai khazama mas, dan downloadder USB.. tlong pengarahannya… terima kasih

  18. Mau bagi pengalaman nih, cara menghidupkan avr yg mati suri. software yg di butuhkan extreme burner avr. cara begini cabut cystal plus capasitor pendukungnya. Lalu colok usbasp programnya ke avr yg mati suri dan buka aplikasi extreme burner avr, kemudian pegang dengan jari kita 2 pin crytal avr tadi ( mngkin jari kita dianggap ground sana avr).Klau dah siap klik tool fuse bits/setting lalu isi low dan high dgn default pabriknya.jangan lupa centang kotak diatasnya kemudian klik write. Bila ada bacaan ic incorrect berarti avr kita besar kemungkinan bisa sehat lagi. Dan biasanya suka gagal dalam tahap pertama. Terus ulangi jgn putus asa sekali2x klik erase chip lalu balik lagi write fuse. cara ini saya pkai di 3 atmega8 sy sembuh semua dan temen2x pakai juga berhasil.

  19. Sedikit berbagi pengalaman,kalau memakai Atiny 2313 Exr crystal 4 MHz,..saya hanya merubah bagian Ext. Crystal Osc. 3.0-8.0 MHz; Start-up time: 14 CK + 0 ms,yang lain biarkan apa adanya.

  20. Saya mengalami hal yang sama dengan ATMEGA16 menjadi korban karena ketidak mengertian saya mengenai microcontroller ini. Maklumlah karena masih pemula.
    Bagaimana dengan chip yang sudah menjadi korban tersebut, apakah ada trik/jurus yang bisa di share untuk mengatasi chip yang rusak tersebut. Problem yang saya hadapi sekarang adalah :

    “Device Signature” terbaca oleh codecvision = FFF FFF FFF (255 255 255)sehingga pada saat programming chip dilakukan terjadi perbedaan Device signature” ATMEGA16 dengan yang berada pada codecvision.

    Terimakasih

Trackbacks/Pingbacks

  1. Membuat Aplikasi Mikrokontroler AVR/AT89: Khusus Pemula!
  2. 6 langkah nyaman dan aman mengatur sumber detak (clock) pada Mikrokontroler Atmel AVR | DSP & Embedded Electronics
  3. Membuat Aplikasi Mikrokontroler AVR/AT89: Khusus Pemula! « Rakhmat Blog's

Leave a Reply

You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>