«

»

May 04

Reset AVR Melalui Software

Bila kita ingin melakukan sebuah software reset terhadap AVR, kita harus menggunakan internal Watchdog. Caranya cukup sederhana, enable dan biarkan time out. Ketika Watchdog memicu reset, program counter akan kembali ke 0 dan meng-clear seluruh register. Operasi ini sama dengan memberikan logika LOW pada jalur RESET.

Jangan sesekali menggunakan pin AVR untuk memberikan sinyal reset pada jalur RESET, karena ketika itu terjadi, di tengah jalan, pin AVR akan masuk dalam kondisi tristate, sehingga tidak terjadi apa-apa. Juga jangan sesekali melompat ke alamat 0, karena ketika program melompat ke alamat 0, seluruh register tidak di-clear. Dengan demikian tidak terjadi “clean” reset.

Berikut adalah sebuah contoh dalam GCC, dimana akan terjadi reset setiap 30 ms:

#include <avr/io.h>
#include <avr/wdt.h>

int main(void)
{
  wdt_enable(WDTO_30MS);
  while(1) {};
}

atau, dapat juga membuat sebuah macro:

#include <avr/io.h>
#include <avr/wdt.h>

#define Reset_AVR() wdt_enable(WDTO_30MS); while(1) {}

int main(void)
{
  Reset_AVR();
}

NEXT SYSTEM
Robotics Learning Center
http://edukasi.nextsys.web.id