Anda di halaman 1dari 11

Laporan Praktikum

Watchdog Timer

Politeknik Elektronika Negeri Surabaya


Electronic Engineering Polytechnic Institute of Surabaya

Dosen Pengampu :
Akhmad Hendriawan

Disusun oleh :
Namira Rizqi Annisa (1103181051)

Program Studi D3 Teknik Elektronika


Departemen Teknik Elektro
Politeknik Elektronika Negeri Surabaya

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:

// Watchdog Timer initialization


// Watchdog Timer Prescaler: OSC/16k
#pragma optsize-
WDTCR=0x18;
WDTCR=0x08;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
for(;;)
{
#asm("wdr")
// Place your code here
#asm("nop")
}

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;

void Delay(int vdly);

int main(void){

DDRA=0xFF;

PORTA=0xAA;

wdt_enable(WDTO_1S);

while(1){

PORTA=~cnt++;

Delay(vdly++);

wdt_reset();

void Delay(int vdly) {

while(vdly--){

_delay_ms(100);

}
Output Percobaan 1

Gambar 1. Bar LED disambungkan dengan pin output DDRA = 0xFF


Percobaan 2
Watchdog Timer sebagai Timer
Kebanyakan watchdog timer difungsikan untuk mereset processor jika mengalami
masalah. Tetapi Watchdog Timer pada AVR juga bisa difungsikan sebagai timer yang
mempunyai konfigurasi yang lebih sederhana dan waktu sampling sampai 8 detik. Pada
percobaan ini peserta praktikum dikenalkan tentang konsep dasar Watchdog Timer
pada AVR dan menggunakannya sebagai alternaif timer.
Program Percobaan 2
#include <avr/wdt.h>

#include <avr/interrupt.h>

#include <util/delay.h>

volatile int f_wdt=0;

int counter=0;

ISR(WDT_vect)

if(f_wdt == 0)

f_wdt=1;

else

int main(void) {

DDRB |= (1<<7);

MCUSR &= ~(1<<WDRF);

WDTCSR |= (1<<WDCE) | (1<<WDE);

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>

volatile int f_wdt=0;

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);

MCUSR &= ~(1<<WDRF);

WDTCSR |= (1<<WDCE) | (1<<WDE);

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>

volatile int f_wdt=0;


int counter=0;
ISR(WDT_vect)
{
if(f_wdt == 0)
{
f_wdt=1;
}
else
{
}
}
int main(void) {
DDRB |= (1<<7); //portB.7 output
DDRA=0xFF;
/* Clear the reset flag. */
MCUSR &= ~(1<<WDRF);
/* In order to change WDE or the prescaler, we need to
* set WDCE (This will allow updates for 4 clock cycles).
*/
WDTCSR |= (1<<WDCE) | (1<<WDE);
/* set new watchdog timeout prescaler value */
WDTCSR = 1<<WDP2 | 1<<WDP1 |1<<WDP0; /* 4.0 seconds */
// wdt_enable(WDTO_4S); // don't used, cause system reset.
/* Enable the WD interrupt (note no reset). */
WDTCSR |= _BV(WDIE);
sei(); // don't forget to activate global interrupt
while(1){
if(f_wdt == 1)
{
/* Toggle the LED */
PORTB ^=(1<<7);
/* Don't forget to clear the flag. */
f_wdt = 0;
PORTA=~counter++;
/* Re-enter sleep mode. */
// enterSleep();
}
else
{
/* Do nothing. */
}
}
}
Analisa
Pada percobaan pertama, yaitu percobaan watchdog timer basic, bertujuan untuk
mensimulasikan dan mengenalkan konsep dasar watchdog timer pada AVR yaitu
watchdog timer bisa berperan untuk mereset sistem kembali ke awal. Dapat diamati
pada program bahwa, program diawali dengan inisialisasi penggunaan watchdog timer
yang dapat dilihat pada header program yaitu #include <avr/wdt.h>. Prinsipnya, pada
percobaan pertama ingin dibuktikan bahwa setelah counter mencapai hitungan sesuai
dengan targetnya, maka watchdog timer akan aktif dan mereset program, kemudian
menjalankan program seperti semua. Diawali dengan menginisialisasi counter dan delay
yang dapat dilihat pada baris program int cnt=0 (inisialisasi counter=0) dan int
vdly=1(inisialisasi delay=1). Output pada percobaan pertama akan dikeluarkan pada
register DDRA pada pin 22-29. Hal ini telah dituliskan dalam program pada baris
program DDRA=0xFF, dimana maksud dari program ini adalah bahwa artinya semua
portA (PA0 – PA7) difungsikan sebagai KELUARAN/OUTPUT karena bernilai FF.
Kemudian, watchdog timer di enable dengan aturan bahwa watchdog timer akan mulai
mereset setelah tercapai delay>1000ms. Hal ini dituliskan pada baris program
wdt_enable(WDT0_1S); program disamping mengenable watchdog timer untuk setiap
1 detik. Untuk setiap looping, counter akan naik/increment (PORTA=~cnt++). Nilai
delaynya juga akan bertambah, yang awalnya di set 100ms (delay_ms(100)) akan terus
naik sampai dia melewati batas diatas 1000ms/1s. Setelah nilai delay sudah diatas
1000ms, program akan di reset (wdt_reset()) oleh watchdog timer. Reset yang
dilakukan oleh watchdog timer berfungsi sama seperti tombol reset, kemudian sistem
akan kembali ke awal.

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.

Anda mungkin juga menyukai