Thursday, May 12, 2011

Watchdog Timer

Pernahkah anda mendengar tentang Watchdog Timer? Dan tahukah anda apa fungsinya? Berdasarkan pengamatan saya, watchdog timer jarang sekali digunakan oleh para pengguna mikrokontroler level pemula, hal ini disebabkan karena kebanyakan pemula hanya merancang sistem yang relatif sederhana atau tidak terlalu kompleks sehingga penggunaan watchdog timer dirasa tidak terlalu penting dalam menunjang fungsi sistemnya disamping memang karena keterbatasan pemahaman para pemula tentang watchdog timer itu sendiri. Melalui artikel ini saya ingin mencoba menjelaskan tentang konsep dasar watchdog timer. Namun yang jelas watchdog timer disini tidak ada kaitannya sama sekali dengan "flywatch" nya tukul arwana Perlu anda ketahui bahwa tidak semua jenis mikrokontroler memiliki fasilitas watchdog timer, dan setiap jenis mikrokontroler yang memiliki watchdog timer juga belum tentu memiliki cara yang sama dalam hal pengaturannya. Apalagi jika berasal dari keluarga mikrokontroler yang berbeda tentu jelas akan berbeda teknik akses dan pengaturannya. Oleh karena itu dalam tulisan berikut ini hanya akan saya jelaskan mengenai konsep watchdog timer itu sendiri, selanjutnya teknis implementasinya dengan mikrokontroler saya percayakan kepada anda untuk mencobanya. Watchdog timer digunakan untuk mengatasi sebuah situasi dimana program yang sedang kita jalankan mengalami kemacetan sehingga menyebabkan sistem berhenti bekerja. Analoginya adalah seperti kejadian hang-up pada komputer PC. Kemacetan program ini bisa disebabkan oleh beberapa hal baik secara software maupun secara hardware. Lalu bagaimakah cara kerjanya watchdog timer sehingga bisa mengatasi situasi macet? Sebenarnya konsep watchdog timer itu sangatlah sederhana, anda akan dapat dengan mudah memahaminya jika anda sudah pernah menggunakan/mengerti tentang dasar timer. Seperti halnya timer pada umumnya, watchdog timer terdiri dari sebuah register yang akan selalu mencacah naik (count up) setiap satu siklus mesin (1 detak clock). Yang membedakan watchdog timer dengan timer biasa adalah bahwa pada watchdog timer proses mencacah naik ini akan selalu terus berjalan dan tidak akan bisa dihentikan oleh kondisi apapun sekalipun dalam kondisi program macet. Dan setelah register watchdog timer mencapai maksimum (terjadi overflow) maka secara otomatis mikrokontroler akan mereset dirinya sendiri sehingga program akan melompat menuju ke awal program lagi.

Anda tentu bertanya, kalau begitu bagaimana program utama kita bisa berjalan sampai akhir kalau selalu terjadi reset terus menerus? Baiklah saya akan jelaskan konsep penggunaan watchdog timer dengan ilustrasi berikut ini.

Anggaplah saya memiliki sebuah mikrokontroler dengan sumber clock eksternal 1 MHz. Ini berarti satu detak clock setara dengan 1 us. Jika mikrokontroler saya memiliki register watchdog timer dengan ukuran 14-bit maka register watchdog timer ini akan mencapai maksimum (terjadi overflow) setiap 214 = 4096 us. Dengan demikian anda harus menyediakan sebuah subrutin yang fungsinya untuk mencegah agar isi register watchdog timer tersebut tidak sampai terjadi overflow. Misalnya, anda buat subrutin untuk membuat isi register watchdog timer menjadi nol setiap 1000 us, 2000 us atau 3000 us. Sehingga sebelum register watchdog timer mencapai overflow isinya sudah direset/di-nol-kan terlebih dahulu. Dengan demikian kejadian overflow ini tidak akan pernah terjadi dan reset secara otomatis tidak akan terjadi pula.

Selanjutnya pada suatu kondisi dimana terjadi hang-up (program kita macet oleh karena suatu hal), maka subrutin yang kita gunakan untuk menge-nol-kan isi register watchdog timer ini juga pasti tidak akan bekerja (ikut berhenti karena kondisi sudah hang-up). Nah pada saat inilah isi register watchdog timer akan terus mencacah naik dan tidak dapat dihentikan. Ketika register watchdog timer sudah mencapai maksimum (terjadi overflow) maka mikrokontroler akan mereset dirinya sendiri dan secara otomatis program akan direset kembali ke awal program. Dengan demikian program terbebas dari keadaan macet walaupun harus memulai progrmamnya dari awal lagi.

Sekarang anda telah mengerti tentang konsep dan penggunaan watchdog timer. Selanjutnya apakah anda akan menggunakannya dalam program anda? Anda perlu mempertimbangkannya sesuai dengan kebutuhan anda. Sekedar saya mengingatkan bahwa dalam penggunaan watchdog timer diatas ada sedikit waktu dan memory yang tersita oleh subrutin yang diciptakan untuk mendukung penggunaan watchdog timer tersebut. Namun karena jumlah waktu dan memory yang tesita ini sangatlah kecil sementara efek/manfaatnya terhadap kehandalan sistem sangat terasa sehingga bisa saja anda abaikan. Setidaknya anda sudah mengerti tentang hal ini, jadi silahkan anda pertimbangan !



Anda tentu bertanya, kalau begitu bagaimana program utama kita bisa berjalan sampai akhir kalau selalu terjadi reset terus menerus? Baiklah saya akan jelaskan konsep penggunaan watchdog timer dengan ilustrasi berikut ini.

Anggaplah saya memiliki sebuah mikrokontroler dengan sumber clock eksternal 1 MHz. Ini berarti satu detak clock setara dengan 1 us. Jika mikrokontroler saya memiliki register watchdog timer dengan ukuran 14-bit maka register watchdog timer ini akan mencapai maksimum (terjadi overflow) setiap 214 = 4096 us. Dengan demikian anda harus menyediakan sebuah subrutin yang fungsinya untuk mencegah agar isi register watchdog timer tersebut tidak sampai terjadi overflow. Misalnya, anda buat subrutin untuk membuat isi register watchdog timer menjadi nol setiap 1000 us, 2000 us atau 3000 us. Sehingga sebelum register watchdog timer mencapai overflow isinya sudah direset/di-nol-kan terlebih dahulu. Dengan demikian kejadian overflow ini tidak akan pernah terjadi dan reset secara otomatis tidak akan terjadi pula.

Selanjutnya pada suatu kondisi dimana terjadi hang-up (program kita macet oleh karena suatu hal), maka subrutin yang kita gunakan untuk menge-nol-kan isi register watchdog timer ini juga pasti tidak akan bekerja (ikut berhenti karena kondisi sudah hang-up). Nah pada saat inilah isi register watchdog timer akan terus mencacah naik dan tidak dapat dihentikan. Ketika register watchdog timer sudah mencapai maksimum (terjadi overflow) maka mikrokontroler akan mereset dirinya sendiri dan secara otomatis program akan direset kembali ke awal program. Dengan demikian program terbebas dari keadaan macet walaupun harus memulai progrmamnya dari awal lagi.

Sekarang anda telah mengerti tentang konsep dan penggunaan watchdog timer. Selanjutnya apakah anda akan menggunakannya dalam program anda? Anda perlu mempertimbangkannya sesuai dengan kebutuhan anda. Sekedar saya mengingatkan bahwa dalam penggunaan watchdog timer diatas ada sedikit waktu dan memory yang tersita oleh subrutin yang diciptakan untuk mendukung penggunaan watchdog timer tersebut. Namun karena jumlah waktu dan memory yang tesita ini sangatlah kecil sementara efek/manfaatnya terhadap kehandalan sistem sangat terasa sehingga bisa saja anda abaikan. Setidaknya anda sudah mengerti tentang hal ini, jadi silahkan anda pertimbangan !

No comments:

Post a Comment

Terima kasih atas komentar yang anda sampaikan , sehingga dapat menambah wawasan saya sebagai penulis dan membuat blog ini semakin berguna banyak orang