artikel / hibernasi pada attiny13a

Hibernasi pada ATTiny13A

Hibernasi pada ATTiny13A

Kode ini merupakan program untuk mikrokontroler ATTiny13A yang bertujuan untuk mengontrol LED. Di awal, kita mendefinisikan PIN_LED yang terhubung dengan LED pada mikrokontroler. Program ini memiliki dua fungsi utama: blink() dan hibernasi(). Fungsi blink() akan mengaktifkan LED selama 250 milidetik, kemudian mematikannya selama 250 milidetik. Hal ini menciptakan efek kedipan pada LED.

Fungsi hibernasi() adalah inti dari program ini. Fungsi ini mengatur mikrokontroler untuk masuk ke mode tidur yang paling hemat energi, yaitu 'power down'. Selama dalam mode ini, mikrokontroler hampir tidak mengkonsumsi daya. Fungsi ini juga mengaktifkan interrupt global dan memasuki mode tidur. Mikrokontroler akan terbangun setiap dua detik, yang ditandai dengan interrupt dari Watchdog Timer (WDT).

Di bagian setup(), kita mengkonfigurasi pin LED sebagai output dan mengatur WDT untuk timeout selama dua detik. Kita juga mengatur WDT untuk beroperasi dalam mode interrupt, bukan reset.

Bagian loop() akan menjalankan fungsi blink() sekali, kemudian memanggil hibernasi() sebanyak 300 kali. Ini berarti mikrokontroler akan berada dalam mode hibernasi selama total 10 menit (karena 2 detik x 300 = 600 detik atau 10 menit). Setelah 10 menit, siklus ini akan diulang: LED akan berkedip lagi, diikuti oleh periode hibernasi selama 10 menit.

Kode ini efektif untuk aplikasi yang memerlukan penggunaan daya yang sangat rendah, dengan LED sebagai indikator visual bahwa mikrokontroler masih aktif dan berfungsi.

#include  <  avr/sleep.h >
#include  <  avr/wdt.h >
#include  <  avr/interrupt.h >

#define PIN_LED 0 // Sesuaikan dengan pin LED di ATTiny13A

int loop_hibernasi=300; //10 menit = 10 menit * 60 detik / 2 detik

void blink() {
  digitalWrite(PIN_LED, HIGH);  // Menghidupkan LED setelah bangun
  delay(250);                  // Menunggu sejenak
  digitalWrite(PIN_LED, LOW);   // Mematikan LED
  delay(250);                  // Menunggu sejenak
}

void hibernasi() {
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);  // Mengatur sleep mode ke power down
  sleep_enable();                       // Mengizinkan sleep mode
  sei();                                // Mengaktifkan interrupt
  sleep_mode();                         // Masuk ke sleep mode

  // Mikrokontroler akan melanjutkan dari sini setelah bangun
  sleep_disable();  // Menonaktifkan sleep mode
}

// ISR untuk Watchdog Timer
ISR(WDT_vect) {
  // Tidak perlu melakukan apa-apa di sini untuk kasus ini
}

void setup() {
  pinMode(PIN_LED, OUTPUT);
  // Mengatur Watchdog Timer untuk 2 detik
  wdt_enable(WDTO_2S);
  // Mengatur WDT untuk interrupt mode, bukan reset
  WDTCR |= _BV(WDTIE);
}

void loop() {
  blink();
  for (int i = 0; i  <  loop_hibernasi; i++) hibernasi();  // hibernasi 10 menit
}

Selayang pandang proyek Perpustakaan Nirkabel

Perpustakaan Nirkabel (wireless library) is a 12-year-old project bringing digital technology to remote areas in Indonesia, empowering basic education and bridging the gap in education. It enables students in remote areas to access knowledge and resources previously out of reach. Witness the tech enthusiasts' brainchild with a heart for education.

detail