Materi ini membahas secara mendalam tentang pengelolaan waktu, mekanisme delay, penggunaan timer, serta sistem interrupt pada mikrokontroler, khususnya ESP32. Berikut adalaha penjelasan setiap bagiannya:
1. Metode Penundaan: Dalam sistem tertanam, pengaturan waktu yang akurat menentukan bagaimana perangkat merespons input, menghasilkan output, atau mengontrol perangkat eksternal. Terdapat dua metode utama dalam mengatur waktu tunda:
A. Metode Blocking (delay): Metode ini menghentikan eksekusi program selama waktu tertentu. Program tidak akan melanjutkan instruksi berikutnya hingga penundaan selesai yang artinya tidak bisa menjalankan proses lain secara bersamaan. Contohnya:

B. Metode Non-Blocking (Timer berbasis Waktu Sistem): Metode ini tidak menghentikan eksekusi program. Program dapat terus berjalan sambil menghitung waktu di latar belakang. Pada arduino menggunakan millis() yang berfungsi untuk mengembalikan jumlah milidetik sejak program mulai dijalankan dan dapat digunakan untuk membuat delay tanpa menghentikan program. Berikut adalah contoh programnya:

2. Timer : Timer terbagi menjadi beberapa jenis, mulai dari fungsi berbasis perangkat lunak hingga modul perangkat keras.
A. Timer Internal ESP32: ESP32 dilengkapi dengan beberapa general-purpose timers dan RTC timers yang dapat digunakan untuk berbagai fungsi.
- Timer Group (TIMG): Terdiri dari 4 timer umum yaitu TIMG0-TIMG3 yang dapat diatur untuk menghitung naik dan turun dan dapat memicu alarm, mengakatifkan interrupt atau mengulang otomatis. Contohnya: mengukur waktu antara dua sinyal input dan mengatur tugas periodik (task scheduler).
- Watchdog Timer (WDT): Berfungsi mendeteksi dan memulihkan sistem dari hang. Jika program berhenti merespons dalam waktu tertentu, WDT akan mereset CPU. Pada ESP32 memiliki 2 Main Watchdog (MWDT) dalam modul timer utama dan 1 RTC Watchdog (RWDT) pada modul RTC.
- RTC Timer: Dengan counter 48-bit berbasis real-time clock. Tetap aktif bahkan dalam deep sleep dan dapat juga digunakan untuk membangunkan CPU pada waktu tertentu.
B. Sleep Timer: Digunakan dalam mode low-power (hemat daya), seperti pada perangkat berbasis baterai. Dengan konsep ESP32 masuk ke deep sleep, hanya RTC aktif dan setelah waktu tertentu, RTC Timer membangunkan sistem. Contohnya seperti berikut:

C. Interrupt: Interrupt memungkinkan mikrokontroler menghentikan tugas utama untuk menangani peristiwa mendesak. Misalnya, ketika tombol ditekan atau data baru tiba dari sensor. Keuntungan menggunakan interrupt yaitu lebih efisien daripada polling dan respon lebih cepat terdapat perubahan eksternal. Berikut adalah komponen utama dari interrupt adalah:
1. ISR (Interrupt Service Routine): Fungsi khusus yang dieksekusi saat interrupt dipicu. ISR harus singkat dan efisien. Berikut adalah contohnya:

2. Attaching Interrupt: Parameter Attaching Interrupt pada mikrokontroler yaitu Pin untuk pin digital yang digunakan. ISR fungsi yang dipanggil dan Mode ada tiga RISING, FALLING dan CHANGE. Berikut contoh sintaknya:

Debouncing: Untuk menghindari efek pantulan (bouncing) saat tombol ditekan, dapat digunakan solusi berupa penundaan singkat (short delay) di dalam Interrupt Service Routine (ISR) atau dengan memanfaatkan variabel waktu menggunakan fungsi millis() untuk mendeteksi jeda antar penekanan tombol.
Contoh implementasi Interrupt:
Skematik

