MEKATRONIKA

Foto kawan-kawan seperjuangan dalam menempuh pendidikan Di Politeknik Negeri Batam

FERI FEBRIANSYAH

Itu adalah saya , Keren kan !!!

Kembar

Editan Sedikit hehehe

Keren Ui

Line Follower

Karya Anak Bangsa

Senin, 16 Desember 2013

SLEEP MODE DAN WATCHDOG TIMER PADA ARDUINO

Ok Para penggemar Arduino , Pada kesempatan ini saya akan menyampaikan sedikit tentang Sleep mode dan Watchdog timer pada Arduino tapi lebih tepatnya pada setiap mikrokontroller.

Langsung aja Gun !!!
Check this Out !!!

Semoga Bermanfaatnya kawan-kawan !!!

Disini saya akan mencoba melalui Simulasi , Jadi yang kita gunakan adalah Proteus 7.1.0 .

PERCOBAAN PERTAMA 
1. Sleep Mode Selama 4 detik dan Wake UP saat terjadi Timer OverFlow.
      Pada percobaan kali ini akan dibuat program untuk mengakses mode sleep pada mikrokontroller . Mode Sleep akan terjadi selama 4 detik , kemudian mikrokontroller akan aktif kembali (wake up). Pada saat Wake up , mikrokontroller akan melakukan perubahan terhadap kondisi led yang terhubung pada pin 12. sehingga jika program dijalankan , seakan-akan Led akan berkedip-kedip selang waktu 4 detik . Namun sebenarnya selama 4 detik tersebut mikrokontroller sedang dalam sleep mode ( tidak melakukan  apa-apa).

Langsung ke Prosedur :
a. Rangkailah rangkaian dibawah ini menggunakan software Proteus 7.1.0



Gambar Rangkaian percobaan 1  
 

b.  Setelah rangkaian diatas sudah dibuat di Proteus , kita lanjutakan membuat programnya pada Arduino IDE , kemudian lakukan kompilasi dan uploud.
#include <avr/sleep.h>
#include <avr/power.h>
#define LED_PIN (12)
volatile int f_timer=0;

ISR(TIMER1_OVF_vect){
  if(f_timer == 0) {
    f_timer =1 ;
  }
}
void enterSleep(void)
{
  set_sleep_mode(SLEEP_MODE_IDLE);
  sleep_enable();
  power_adc_disable();
  power_spi_disable();
  power_timer0_disable();
  power_timer2_disable();
  power_twi_disable();
  sleep_mode();
  power_all_enable();
}
void setup()
{
 pinMode(LED_PIN, OUTPUT);
TCCR1A = 0x00 ;
TCNT1 = 0x0000;
TCCR1B = 0x05;
TIMSK1= 0x01; 
}
void loop ()
{
 if (f_timer==1)
{
 f_timer = 0;
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
enterSleep();
}
 
}

Lihat apa yang terjadi dan coba Simpulkan !!!

Kesimpulan dari pratikum ini adalah para mikrokontroller kita dapat mengistirahatkan dalam beberapa detik dan manfaat dari Mode Sleep mode ini adalah kita dapat menghemat daya pada mikrokontroller saat tidah digunakan.





PERCOBAAN KEDUA
2. Sleep Mode Selama 8 Detik dan Wake Up Saat Watchdog Timer Aktif

     Pada percobaan kali ini akan dibuat program untuk mengakses watchdog timer pada mikrokontroller. Watchdog timer akan digunakan untuk mengaktifkan kembali mikrokontroller dari mode sleep . Watchdog timer akan terjadi tiap 8 detik.

Langsung ke Prosedur kawan !!!
Rangkaian sama seperti diatas tinggal ganti program !!!

 

A. Tulis sintaks program di bawah ini , kemudian kompilasi dan uploud ke simulasi proteus




#include <avr/sleep.h>
#include <avr/power.h>
#include <avr/wdt.h>
#define LED_PIN (12)
volatile int f_wdt=1;
ISR(WDT_vect)
{
  if (f_wdt == 0 )
  {
    f_wdt=1;}
   else
  {
   Serial.println("WDT Overrun !!!");
  }
}
void enterSleep(void)
{
  set_sleep_mode(SLEEP_MODE_PWR_SAVE);
  sleep_enable(); sleep_mode();
  sleep_disable (); power_all_enable();
}
void setup ()
{
  Serial.begin(9600);
  Serial.println ("Initialising...");
  delay(100);
  pinMode(LED_PIN,OUTPUT);
  MCUSR &= ~(1<<WDRF);
  WDTCSR |= (1<<WDCE) | (1<<WDE);
  WDTCSR = 1<<WDP0 | 1<<WDP3;
  WDTCSR |= _BV(WDIE);
  Serial.println("Initialisation complete.");
  delay(100);
}
void loop ()
{
  if (f_wdt == 1)
  {
    digitalWrite(LED_PIN, !digitalRead(LED_PIN));
    f_wdt=0; enterSleep();
  }
}

     Kesimpulan ya adalah bahwa fungsi dari WatchDog Timer adalah untuk mengaktifkan atau membangun lagi mikrokontroller yang di Sleep atau di istirahatkan .
      Manfaat penggunaan watchdog timer pada mikrokontroller untuk mereset kembali program ketika terjadi masalah atau program tersebut macet. Jadi ketika program yang sedang berjalan macet maka kita gunakan watchdog timer untuk mereset kembali program.