Watchdog Timer
Dosen Pengampu :
Akhmad Hendriawan
Disusun oleh :
Namira Rizqi Annisa (1103181051)
2020
I. Judul Praktikum
Judul Praktikum : Watchdog Timer
II. Tujuan
Mahasiswa mampu mensimulasikan dan membuat program Watchdog Timer pada AVR
III. Dasar Teori
Watchdog timer merupakan timer yang terpisah dengan sistem CPU mikrokontroler
sehingga tidak akan terpengaruh bagaimanapun keadaan CPU bekerja. Watchdog timer
berperan sangat penting untuk kelangsungan hidup CPU dan menjaga CPU agar tetap ON
karena dapat mengatasi kemacetan alur program pada mikrokontroler, biasanya dalam
PC kemacetan ini kita sering menyebutnya "hang up". Kemacetan program ini biasa
disebabkan oleh beberapa hal baik itu dari segi hardware maupun dari softwarenya
sendiri.
Lantas bagaimana prinsip kerja watchdog timer ini sehingga bisa menanggulangi
kemacetan program pada mikrokontroler? Prinsip dari watchdog timer ini sebenarnya
cukup sederhana sama seperti timer lain yang selalu mencacah naik (count up) setiap
satu siklus mesin, namun bedanya dengan timer lain watchdog timer ini akan mencacah
terus menerus tanpa henti sekalipun kondisi CPU macet karena seperti dikatakan tadi
timer ini terpisah dengan CPU. Setelah register watchdog maksimum maka akan terjadi
overflow dan secara otomatis alur program pada mikrokontroler akan tereset ke awal.
Pertanyaannya bagaimana program berjalan dari awal sampai akhir jika terjadi reset
secara terus menerus?? Jawabannya dengan cara mengatur program watchdog timer
kembali nol sebelum maksimum dan terjadi overflow.
Listing Program:
Selanjutnya misalkan terjadi suatu hang-up pada alur program mikrokontoler maka
otomatis subrutin diatas yang kita gunakan untuk mereset tidak akan berfungsi
sehingga pada saat inilah watchdog timer akan mencacah hingga terjadi overflow dan
mereset program kembali keawal.
IV. Peralatan
1. 1 Buah Laptop/Komputer
2. Software Visual Studio Code
3. Software Proteus untuk Simulasi
V. Hasil Percobaan
Percobaan 1
Watchdog Timer Basic
Pada percobaan ini, peserta praktikum dikenalkan tentang konsep dasar dari Watchdog
timer pada AVR untuk mereset sistem kembali ke awal. Untuk mensimulasikan ini,
dibuat Delay pada counter yang naik secara berkala. Processor akan mereset watchdog
timer setiap selesai mengerjakan rutin delay. Bila nilai delay bertambah melebihi
sampling yang ditentukan oleh watchdog timer, maka watchdog timer yang akan
mereset processor.
Program Percobaan 1
#include <avr/io.h>
#include <util/delay.h>
#include <avr/wdt.h>
int cnt=0;
int vdly=1;
int main(void){
DDRA=0xFF;
PORTA=0xAA;
wdt_enable(WDTO_1S);
while(1){
PORTA=~cnt++;
Delay(vdly++);
wdt_reset();
while(vdly--){
_delay_ms(100);
}
Output Percobaan 1
#include <avr/interrupt.h>
#include <util/delay.h>
int counter=0;
ISR(WDT_vect)
if(f_wdt == 0)
f_wdt=1;
else
int main(void) {
DDRB |= (1<<7);
WDTCSR = 1<<WDP3;
WDTCSR |= _BV(WDIE);
sei();
while(1){
if(f_wdt == 1)
PORTB ^=(1<<7);
f_wdt = 0;
else
{
_delay_ms(300);
PORTA=~counter++;
Output Percobaan 2
Setelah reset, maka led akan menyala. Rentang waktunya adalah setiap 4 detik.
Percobaan 3
Watchdog Timer Sleep
Pada percobaan ini, peserta praktikum dikenalkan tentang konsep dasar Watchdog
Timer pada AVR dan menggunakannya sebagai alternatif timer dan menggunakan mode
sleep.
Program Percobaan 3
#include <avr/sleep.h>
#include <avr/power.h>
#include <avr/wdt.h>
#include <avr/interrupt.h>
#include <util/delay.h>
ISR(WDT_vect)
if(f_wdt == 0)
f_wdt=1;
else
void enterSleep(void)
set_sleep_mode(SLEEP_MODE_PWR_SAVE);
sleep_enable();
sleep_mode();
sleep_disable();
power_all_enable();
int main(void) {
DDRB |=(1<<7);
WDTCSR = 1<<WDP3;
WDTCSR |= _BV(WDIE);
sei();
while(1){
if(f_wdt == 1)
PORTB ^=(1<<7);
f_wdt = 0;
enterSleep();
else
Output Percobaan 3
Tugas !
Buat sebuah counter 8 bit dengan menggunakan port A yang hitungannya bertambah
setiap 2 detik dengan memanfaatkan timer yang ada di dalam Watchdog Timer.
Program
#include <avr/wdt.h>
#include <avr/interrupt.h>
#include <util/delay.h>
Pada percobaan kedua, dimana mengamati fungsi watchdog timer sebagai timer.
Watchdog timer yang difungsikan sebagai timer memiliki konfigurasi yang lebih
sederhana dan waktu sampling sampai 8 detik. Penggunaan watchdog timer sebagai
timer inilah yang bisa digunakan sebagai alternatif timer pada AVR. Program diawali
dengan baris program if(f_wdt == 0) … dimana maksud dari baris program ini adalah,
saat f_wdt=0 maka nilai f_wdt adalah 1. Perbedaan dengan percobaan 1, selain dari
fungsinya, adalah penggunaan lama waktu bagi watchdog timer untuk enable. Pada
percobaan ini, dibutuhkan waktu selama 4 detik untuk mengenable watchdog timer, hal
ini dituliskan pada baris program WDTCSR=1<<WDP3 // wdt_enable(WDT0_4S).
Kemudian diaktifkan juga register untuk global interrupt (WDTCSR |= _BV(WDIE))
yang ditandai dengan adalah sei(); Pada saat program telah sampai untuk menjalankan
baris program while, maka akan diawali dengan inisialisasi awal, dimana counter=0 (int
counter=0), kemudian looping dimulai. Program akan mulai berjalan dan counter akan
terus increment. Nilai delay juga akan terus naik, dari 300ms, 400ms, 500ms, dan
berlanjut terus sampai nilai counter mencapai titik diatas 4000ms/4s. Setelah
delay>4000ms, f_wdt == 1 --> program akan di reset dan saat itulah LED akan toggle.
Prinsipnya, percobaan ketiga memiliki cara kerja yang hampir sama dengan percobaan 2.
Namun fungsi dari watchdog timer itu sendiri ditambahkan dengan adanya mode sleep
(sleep_mode()) Penggunaan watchdog timer adalah untuk membangunkan program
yang berada dalam mode sleep. Berdasarkan program, maka watchdog timer akan aktif
setiap 4 detik sekali (WDTCSR=1<<WDP3). Maka berdasarkan percobaan 3, fungsi dari
watchdog timer adalah digunakan untuk mengaktifkan kembali mikrokontroler dari
mode sleep. Saat Watchdog timer aktif, fungsi pada mikrokontroller yang dinonaktifkan
saat sleep akan aktif kembali.
Sedangkan pada tugas, hampir sama dengan percobaan 2 dimana memanfaatkan
watchdog timer sebagai timer namun memiliki interval waktu yang berbeda. Jika pada
percobaan 2 diberikan waktu bagi watchdog timer untuk enable setiap 4 detik, pada
tugas waktu yang berikan adalah 2 detik, ditandai dengan adanya baris program
WDTCSR = 1<<WDP2 | 1<<WDP1 | 1<<WDP0. Output program pun juga hampir sama
dengan program kedua, dimana saat delay telah mencapai diatas 2000ms/2s, maka
program akan reset dan LED pada pin 13 Arduino akan menyala.
Kesimpulan
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. Sebenarnya konsep watchdog timer itu sangatlah sederhana, 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.