Teknik Elektro LinksBarrier-Gate & Turnstile Interface, Thermostat, Relay Driver, Microcontroler Board

Watchdog Timer Testing – FlashForth ATmega328P

Watchdog Timer (WDT) merupakan fitur mikrokontroler AVR yang ampuh untuk mengatasi kondisi HANG pada mikrokontroler. Kondisi HANG pada mikrokontroler dapat disebabkan oleh beberapa faktor antara lain: gangguan secara elektronik (noise) dan bug pada firmware. Dan seperti yang dinyatakan dalam catatan aplikasi ATMEL, The Watchdog Timer

“No piece of software, save the very smallest, is free from bugs.”

Dengan WDT, kita dapat memastikan bahwa CPU akan direset secara otomatis ketika CPU mengalami kondisi HANG.

Bagaimana Caranya?

Caranya adalah dengan mengaktifkan WDT sebelum program memasuki loop utama. Dan program pada loop utama memiliki kewajiban untuk mereset counter WDT, karena jika tidak direset maka counter WDT akan mencapai batas waktunya (TIMEOUT) dan mereset CPU.

Jadi, dengan cara seperti ini, jika sewaktu-waktu terjadi kondisi HANG pada loop utama, maka counter WDT akan mencapai batasnya dan WDT akan secara otomatis mereset CPU.

Berikut adalah contoh pemrograman sederhana versi AVR-GCC

   #include <avr/wdt.h>

   int main(void)
   {
      wdt_enable(WDTO_2S); //aktifkan WDT 2 detik

      // loop utama
      while(1) 
      {
         _delay_ms(100);
         wdt_reset();  //pastikan counter WDT direset
      }
   }

 

FlashForth

Pada eksperimen ini, saya melakukan pengujian fungsi WDT menggunakan program Forth. Saya menggunakan sistem operasi FlashForth yang saya sematkan dalam AVR ATmega328P.

FlashForth menyediakan kata wd+ untuk mengaktifkan WDT dan kata cwd untuk mereset counter WDT.

Langsung saja, berikut ini adalah kode program pengujian fungsi WDT dalam bahasa FlashForth.

\ Testing Watchdog Timer
\ FlashForth ATmega328P
\ Chandra MDE - Teknik Elektro Links

variable QUIT
false QUIT c!

: get-ready
   cr
   ." Testing AVR Watchdog Timer Functionality" cr cr
   ." WDT is set to 2 seconds." cr
   ." You have to press ENTER within less than 2 seconds," cr
   ." otherwise WDT will reset the controller." cr
   ." Press Q + ENTER to quit test." cr cr
   ." Press ENTER when you are ready..." 
   key drop cr
;

: wdt-test
   get-ready
   ." WDT Test is starting." cr
   7 wd+ \ wdt enable

   begin
     key?
     if
       key 81 = \ Q = Quit test
       if 
         true QUIT c!
       else 
         ." Key is pressed --> WDT reset" cr
         cwd
       then
     then
     QUIT c@
   until
   ." WDT Test end." cr cr
;


Menjalankan Program wdt-test.fs

ffwdt

Program pengujian yang saya buat ini terdiri dari 2 fungsi yakni: get-ready dan wdt-test.

Fungsi get-ready berfungsi menampilkan judul dan instruksi/prosedur testing. Intruksi/prosedur pengujian yang ditampilkan adalah sebagai berikut:

   Testing AVR Watchdog Timer Functionality

   WDT is set to 2 seconds.
   You have to press ENTER within less than 2 seconds,
   otherwise WDT will reset the controller.
   Press Q + ENTER to quit test.

   Press ENTER when you are ready...

Fungsi wdt-test akan mengaktifkan WDT dengan timeout 2 detik

   7 wd+

Dalam perulangan begin .. until, WDT akan direset jika tombol ENTER ditekan. Peresetan WDT dilakukan dengan perintah

   cwd

Jika ENTER tidak ditekan dalam 2 detik, maka WDT akan secara otomatis mereset CPU.

Dari hasil pengujian (screenshot), WDT sukses direset ketika kita menekan ENTER sebelum masa timeout WDT berakhir (2 detik). Mikrokontroler pun sukses direset oleh WDT ketika kita tidak menekan ENTER hingga melebihi batas waktu WDT (2 detik). Dan jika kita menekan tombol Q+ENTER, maka program akan berakhir.

Dengan demikian, dapat disimpulkan bahwa fungsi-fungsi WDT pada FlashForth bekerja dengan baik.

Selamat belajar dan selamat berkarya.

 

 

 

Add a Comment

Your email address will not be published. Required fields are marked *

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