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_PIN, OUTPUT);
TCCR1A = 0x00; TCNT1=0x0000;
TCCR1B = 0x05; TIMSK1=0x01;
}
void loop() {
if(f_timer==1) {
f_timer = 0;
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();
}
}
Tidak ada komentar:
Posting Komentar