Minggu, 15 Desember 2013

SLEEP MODE DAN WATCHDOG TIMER

Tujuan :
1. Memahami penggunaan mode sleep pada mikrokntroler
2. Memahami penggunaan watchdog timer pada mikrokntroler

PERALATAN :
1.  Komputer               : 1 set
2.  Arduino Uno           : 1 pcs
3.  Kabel USB tipe B   : 1 pcs
4.  Project board          : 1 pcs
5.  Kabel jumper          : 1 pcs
6.  LED                        : 1 pcs
7.  Resistor 330 Ohm     :1 pcs




PERCOBAAN :
9.1 Sleep Mode   Selama 4 Detik dan Wake Up Saat Terjadi Timer Overflow


Prosedur :
1.  Rangkailah rangkaian pada Gambar 9.1 berikut ini.
2.   Tuliskan  sintaks  program  berikut  ini  pada  Arduino  IDE,       kemudian   lakukan
       kompilasi dan upload program
#include  p.h>
#include  r.h>
#define  LED_PIN  (13)
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();
sleep_disable();                  power_all_enable();
}
void  setup()  {
pinMode(LED_PINOUTPUT);
TCCR1A  =  0x00;     TCNT1=0x0000;
TCCR1B  =  0x05;     TIMSK1=0x01;
}
void  loop()  {
if(f_timer==1)  {
  
f_timer  =  0;
digitalWrite(LED_PIN,  !digitalRead(LED_PIN));
enterSleep();
}
}

9.2 Sleep Mode   Selama 8 Detik dan Wake Up Saat Watchdog Timer Aktif

Prosedur :1.   Gantilah sintaks program pada Percoban 9.1 menjadi seperti berikut ini, lakukankompilasi dan upload program ke mikrokontroler.

#include  p.h>
#include  r.h>
#include  h>
#define  LED_PIN  (13)
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 dari percobaan in ialah fungsi nya untuk menghemat daya  suatu mikrokontroler saat suatu fungsi tidak di gunakan dalam program maka fungsi itu akan di off kan, dan hanya fungsi yang di gunakan lah  yang tetep aktif.....

Sekianlah percobaan kali ini.....TERIMA KASIH....




Tidak ada komentar:

Posting Komentar