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