PERALATAN :
|
||
1.
|
Komputer
|
: 1 s et
|
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.
Gambar
9.1 Rangkaian Percobaan 9.1
2. Tuliskan
sintaks p rogram berikut ini pada Arduino IDE, kemudian lakukan kompilasi dan upload
program.
#include
<avr/sleep.h> #include <avr/power.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_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();
}
}
KESIMPULAN
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).
Manfaat
sleep mode adalah menghemat daya. Saat sleep mode beberapa fungsi pada
mikrokontroller yang tidak digunakan dinonaktifkan. Sehingga daya yang terpakai
berkurang.
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 b erikut ini, lakukan kompilasi dan uplo ad
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();
}
}
KESIMPULAN :
Watchdog
timer
akan digunakan untuk mengaktifkan kembali mikrokontroler dari mode sleep.
Saat Watchdog timer aktif, fungsi pada mikrokontroller yang dinonaktifka saat
sleep akan aktif kembali. Watchdog timer digunakan untuk mengatasi sebuah situasi dimana
program yang sedang kita jalankan mengalami kemacetan sehingga menyebabkan
sistem berhenti bekerja. Analoginya adalah seperti kejadian hang-up pada
komputer PC. Kemacetan program ini bisa disebabkan oleh beberapa hal baik
secara software maupun secara hardware. Sebenarnya konsep watchdog timer itu sangatlah sederhana, Seperti halnya timer pada umumnya, watchdog timer terdiri dari
sebuah register yang akan selalu mencacah naik (count up) setiap satu siklus
mesin (1 detak clock). Yang membedakan watchdog timer dengan timer biasa adalah
bahwa pada watchdog timer proses mencacah naik ini akan selalu terus berjalan
dan tidak akan bisa dihentikan oleh kondisi apapun sekalipun dalam kondisi
program macet. Dan setelah register watchdog timer mencapai maksimum (terjadi
overflow) maka secara otomatis mikrokontroler akan mereset dirinya sendiri
sehingga program akan melompat menuju ke awal program lagi.


Tidak ada komentar:
Posting Komentar