SLEEP MODE DAN WATCHDOG TIMER
TUJUAN :
1.
Memahami penggunaan mode sleep pada mikrokontroler.
2. Memahami penggunaan watchdog timer pada program.
2. Memahami penggunaan watchdog timer pada program.
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
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
Pada
percobaan kali ini akan dibuat program untuk mengakses mode sleep pada mikrokontroler. Mode
sleep akan terjadi selama 4 detik, kemudian mikrokontroler akan aktif kembali (wake up). Pada
saat wake up, mikrokontroler akan melakukan perubahan terhadap kondisi LED yang
terhubung pada pin 12. Sehingga jika program dijalankan, seakan-akan LED akan
berkedip dengan selang waktu 4 detik. Namun, sebenarnya selama 4 detik tersebut
mikrokontroler sedang dalam sleep mode (tidak melakukan apa-apa).
Prosedur :
1. Rangkailah rangkaian pada Gambar 9.1 berikut ini.
1. Rangkailah rangkaian pada Gambar 9.1 berikut ini.

2. Tuliskan sintaks
program berikut ini
pada Arduino IDE, kompilasi dan upload program.
#include
<avr/sleep.h>
#include <avr/power.h>
#define LED_PIN (13)
volatile int f_timer=0;
#include <avr/power.h>
#define LED_PIN (13)
volatile int f_timer=0;
kemudian
lakukan
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_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();
}
}
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_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();
}
}
Tugas dan Pertanyaan :
1.
Amati hasil Percobaan 9.1, buatlah kesimpulan !
Dari percobaan 9.1 dapat diketahui bahwa setiap 8 detik, led yang ada pada pin 13 akan mengalami toogle.
Dari percobaan 9.1 dapat diketahui bahwa setiap 8 detik, led yang ada pada pin 13 akan mengalami toogle.
2.
Apakah manfaat penggunaan sleep mode pada mikrokontroler ? Jelaskan !
Manfaat penggunaan sleep mode yaitu untuk menghemat daya atau power, ketika mikrokontroller tidak digunakan dapat dengan mudah untuk mengaktifkan mikrokontroller dengan cepat.
Manfaat penggunaan sleep mode yaitu untuk menghemat daya atau power, ketika mikrokontroller tidak digunakan dapat dengan mudah untuk mengaktifkan mikrokontroller dengan cepat.
9.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
mikrokontroler. Watchdog timer akan digunakan untuk mengaktifkan kembali mikrokontroler
dari mode sleep. Watchdog timer akan terjadi tiap 8 detik.
Prosedur :
1.
Gantilah sintaks program pada Percoban 9.1 menjadi seperti berikut ini,
lakukan kompilasi dan upload program ke mikrokontroler.
#include
<avr/sleep.h>
#include <avr/power.h>
#include <avr/wdt.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();
}
}
#include <avr/power.h>
#include <avr/wdt.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();
}
}
Tugas dan Pertanyaan :
1.
Amati hasil Percobaan 9.2, buatlah kesimpulan !
Dari percobaan 9.2 dapat diketahui bahwa apabila program yang dijalankan HANG maka watchdog akan aktif setelah 8 detik , hal ini dapat dibuktikan dengan berkedipnya led dan watchdog akan me-reset ulang program tersebut.
Dari percobaan 9.2 dapat diketahui bahwa apabila program yang dijalankan HANG maka watchdog akan aktif setelah 8 detik , hal ini dapat dibuktikan dengan berkedipnya led dan watchdog akan me-reset ulang program tersebut.
2.
Apakah manfaat penggunaan watchdog timer pada mikrokontroler ? Jelaskan
!
Manfaat penggunaan watchdog timer pada mikrokontroller adalah untuk menghindari program dari HANG permanen sehingga program masih dapat melakukan eksekusi program.
Manfaat penggunaan watchdog timer pada mikrokontroller adalah untuk menghindari program dari HANG permanen sehingga program masih dapat melakukan eksekusi program.
0 komentar:
Posting Komentar