Blog Archive

Arduino Indonesia. Gambar tema oleh Storman. Diberdayakan oleh Blogger.

Supported by Electronics 3 in 1

1. Jasa pencetakan PCB single layer dengan harga paling murah.

(Metode Pembuatan dengan Transfer Toner)
>PCB design sendiri (siap cetak) : Rp.150,-/Cm2
>PCB design dari kami : Rp.250,-/Cm2

(Metode Sablon Full Masking dan Silk Screen minimal pemesanan 100 Pcs)
>PCB design sendiri (siap cetak) : Rp.200,-/Cm2
>PCB design dari kami : Rp.250,-/Cm2

2. Jasa perancangan, perakitan, dan pembuatan trainer pembelajaran elektronika untuk SMK dan Mahasiswa.

3. Jasa perancangan, perakitan, dan pembuatan berbagai macam kontroller, sensor, aktuator, dan tranduser.
>Design Rangkaian / Sistem Elektronika
>Design Rangkaian / Sistem Instrumentasi
>Design Rangkaian / Sistem Kendali
>Kerjasama Riset (data atau peralatan)
>Kerjasama Produksi Produk-Produk KIT Elektronika
>Produksi Instrumentasi Elektronika

4. Jasa Pembuatan Proyek, Tugas Akhir, Tugas Laboratorium, PKM, Karya Ilmiah, SKRIPSI, dll

Like My Facebook

Popular Posts

Selasa, 05 Agustus 2025

Penjelasan Timer dan Delay di Raspberry Pi Pico: Cara Kerja dan Contoh Program

Raspberry Pi Pico adalah mikrokontroler berbasis chip RP2040 yang sangat fleksibel untuk digunakan dalam proyek IoT (Internet of Things), robotika, maupun embedded system. Salah satu fitur penting dalam pemrograman mikrokontroler adalah penggunaan Timer dan Delay. Kedua fungsi ini memungkinkan developer mengatur waktu eksekusi program, menjadwalkan tugas, atau membuat jeda antara operasi. Artikel ini akan membahas secara mendalam tentang perbedaan antara timer dan delay, cara kerja timer dan delay di Raspberry Pi Pico, serta contoh program menggunakan MicroPython dan C/C++.

 

Perbedaan Timer dan Delay 

 

1. Delay

Delay adalah metode paling sederhana untuk memberi jeda waktu dalam program.

a. Karakteristik

- Fungsi Blocking:

Ketika fungsi delay() atau sleep() dalam MicroPython dipanggil, seluruh eksekusi program akan berhenti sementara hingga waktu yang ditentukan selesai. Artinya, selama fungsi delay berjalan, tidak ada proses lain yang bisa dijalankan oleh mikrokontroler.

- Mudah Digunakan:

Sangat cocok untuk tugas-tugas sederhana yang tidak perlu multitasking.

- Kurang Efisien untuk program kompleks:

Misalnya, Anda ingin LED berkedip dan membaca tombol sekaligus, delay akan menghambat respon tombol, karena program tidak bisa melakukan dua hal bersamaan.

b. Contoh Kasus


# LED nyala-mati dengan delay

led.value(1)

sleep(1)   # LED menyala selama 1 detik (program berhenti sementara)

led.value(0)


2. Timer

Timer memungkinkan pengaturan waktu secara non-blocking, sehingga cocok digunakan dalam sistem yang memerlukan multitasking atau reaksi cepat terhadap kejadian tertentu.

a. Karakteristik

- Non-Blocking Function:

Program utama tetap berjalan saat timer aktif di latar belakang.

- Presisi Tinggi:

Cocok untuk menjalankan tugas secara periodik dengan waktu yang tepat (misalnya, membaca sensor setiap 100 ms).

- Interrupt-based:

Dengan bantuan timer, Anda bisa mengatur interrupt agar suatu fungsi dapat dijalankan secara otomatis ketika waktu habis, tanpa harus menunggu atau menghentikan program utama.

- Lebih kompleks, tapi sangat powerful dan fleksibel.

b. Contoh Kasus

# Timer untuk membaca sensor suhu setiap 1 detik

 

from machine import Timer


def read_sensor(timer):

    temp = sensor.read()

    print(temp)


timer = Timer()

timer.init(period=1000, mode=Timer.PERIODIC, callback=read_sensor)


Fungsi read_sensor() akan dipanggil setiap 1 detik tanpa menghentikan proses utama.


Cara Kerja Delay di Raspberry Pi Pico

 

Delay bekerja dengan menghentikan eksekusi program untuk waktu tertentu. Di Raspberry Pi Pico, delay dapat diimplementasikan menggunakan:  

- `time.sleep()` (MicroPython)  

- `sleep_ms()` atau `sleep_us()` (C/C++ SDK)  

1. Contoh Program Delay di MicroPython

 

from machine import Pin

import time


led = Pin(25, Pin.OUT)  # LED onboard GPIO25


while True:

    led.toggle()        # Nyalakan/matikan LED

    time.sleep(1)       # Delay 1 detik

 

Penjelasan:  

- Program akan menyalakan/mematikan LED setiap 1 detik.  

- `time.sleep(1)` membuat program berhenti selama 1 detik sebelum melanjutkan.  

GPIO25 adalah LED onboard pada Pico, jadi pengguna tidak perlu menyambungkan LED eksternal.

2. Contoh Program Delay di C/C++

 

#include "pico/stdlib.h"


int main() {

    const uint LED_PIN = 25;

    gpio_init(LED_PIN);

    gpio_set_dir(LED_PIN, GPIO_OUT);


    while (true) {

        gpio_put(LED_PIN, !gpio_get(LED_PIN));  // Toggle LED

        sleep_ms(1000);                         // Delay 1 detik

    }

}

 

Penjelasan:

- Mirip dengan MicroPython, tetapi menggunakan fungsi `sleep_ms()` dari SDK Raspberry Pi Pico.  

 

Cara Kerja Timer di Raspberry Pi Pico

 

Di Raspberry Pi Pico, timer dapat digunakan untuk menjadwalkan eksekusi fungsi secara periodik, baik menggunakan fitur Timer() di MicroPython maupun add_repeating_timer_ms() di C/C++, yang bekerja di latar belakang tanpa menghentikan program utama.

1. Timer dengan Interupsi di MicroPython

 

from machine import Pin, Timer


led = Pin(25, Pin.OUT)

timer = Timer()


def blink(timer):

    led.toggle()


timer.init(freq=1, mode=Timer.PERIODIC, callback=blink)

 

Penjelasan:

- `timer.init()` mengatur timer dengan frekuensi 1Hz (1 kali per detik).  

- `callback=blink` akan dipanggil setiap periode timer.  

2. Timer dengan Interupsi di C/C++

 

#include "pico/stdlib.h"

#include "hardware/timer.h"


bool timer_callback(repeating_timer_t *rt) {

    static bool led_state = false;

    gpio_put(25, led_state);

    led_state = !led_state;

    return true;  // Lanjutkan timer

}


int main() {

    gpio_init(25);

    gpio_set_dir(25, GPIO_OUT);


    repeating_timer_t timer;

    add_repeating_timer_ms(1000, timer_callback, NULL, &timer);


    while (true) {

        // Program utama tetap berjalan

    }

}

 

Penjelasan:

- `add_repeating_timer_ms()` membuat timer berulang setiap 1000ms (1 detik).  

- Fungsi `timer_callback` akan dieksekusi setiap periode tanpa blocking loop utama.  

 

Tips Optimasi Penggunaan Timer dan Delay

  

1. Hindari Delay Panjang di Program Utama

- Delay panjang seperti sleep(5) akan menghentikan semua aktivitas program selama waktu tersebut.

- Ini menyebabkan input seperti tombol, sensor, atau komunikasi serial tidak terbaca tepat waktu.

- Sebaiknya gunakan timer untuk tugas berulang agar program tetap bisa multitasking.

- Contoh kasus: Ketika LED dikedipkan menggunakan sleep(2), maka tombol tidak bisa merespons selama delay berlangsung.

- Solusi: Ganti dengan timer periodik agar LED tetap kedip tanpa mengganggu proses lain.

2. Gunakan sleep_us() untuk Presisi Tinggi

- Jika Anda butuh delay sangat singkat dan presisi (misalnya <1 ms), gunakan:


sleep_us(100)  # delay 100 mikrodetik


- sleep_us() lebih akurat dibanding sleep_ms() karena bekerja dalam satuan mikrodetik, ideal digunakan untuk:

    - Protokol komunikasi buatan sendiri

    - Timing sinyal PWM manual

    - Delay sensor ultra-sonik

- Hindari sleep() umum jika Anda butuh kontrol waktu presisi tinggi.

3. Manfaatkan Interrupt Timer untuk Real-Time Task

- Timer dengan callback (interrupt) memungkinkan tugas otomatis dijalankan tanpa gangguan program utama.

- Cocok untuk:

    - PWM software

    - Sampling sensor suhu secara berkala

    - Mengirim data serial tiap interval tetap

- Interrupt membuat program lebih responsif dan efisien, apalagi untuk sistem embedded yang harus selalu aktif.

- Contoh:


timer.init(period=1000, mode=Timer.PERIODIC, callback=baca_sensor)


4. Kombinasikan dengan RTOS (FreeRTOS)

- Untuk aplikasi kompleks seperti robot, smart home, atau perangkat monitoring multi-channel, pakai RTOS.

- RTOS seperti FreeRTOS memungkinkan:

    - Multitasking dengan prioritas

    - Manajemen waktu presisi

    - Komunikasi antar-task (seperti queue, semaphore)

- Cocok bila Anda perlu banyak task berjalan paralel (misalnya: 1 task untuk sensor, 1 untuk motor, 1 untuk komunikasi).

- Raspberry Pi Pico bisa menjalankan FreeRTOS dengan porting yang tepat.

 

Troubleshooting Masalah Timer/Delay

 

1. Timer Tidak Akurat

- Kemungkinan Penyebab:

    - Clock internal tidak diset dengan benar.

    - Timer berbasis software, bukan hardware.

- Solusi:

    - Periksa konfigurasi clock system, terutama jika menggunakan custom firmware atau SDK.

    - Pastikan menggunakan clock default: 125 MHz (default Pico).

    - Penggunaan sleep() sangat bergantung pada interpreter sehingga akurasinya bisa sedikit meleset, terutama pada waktu <10ms.

    - Gunakan fungsi machine.freq() di MicroPython untuk memeriksa dan mengatur clock jika perlu.


import machine

print(machine.freq())  # Harusnya 125_000_000


Catatan: Timer berbasis hardware (seperti machine.Timer) jauh lebih presisi dibanding sleep().

2. Delay Terlalu Lama

- Gejala:

    - Program terlihat “beku” atau tidak merespons masukan (misalnya tombol).

    - Respons sensor lambat.

- Penyebab Umum:

    - Menggunakan time.sleep(2) atau sleep_ms() dalam loop utama.

- Solusi:

    - Ganti delay dengan timer non-blocking.

    - Jika harus pakai delay, pastikan durasinya pendek dan tidak mengganggu proses lain.

- Contoh:

def toggle_led(timer):

    led.toggle()


timer.init(freq=1, mode=Timer.PERIODIC, callback=toggle_led)

 

3. Interupsi Timer Tidak Terjadi

- Gejala:

    - Callback timer tidak dipanggil.

    - LED tidak berkedip / sensor tidak terbaca sesuai jadwal.

- Penyebab:

    - Timer belum di-start atau tidak dikonfigurasi dengan benar.

    - Callback function salah penulisan.

    - Ada interupsi lain yang konflik atau prioritas lebih tinggi.

- Solusi:

    - Pastikan timer.init() dipanggil dengan parameter yang sesuai.

    - Callback function tidak boleh terlalu kompleks atau lambat.

    - Cek apakah callback menyebabkan exception (gunakan try...except untuk debug). Saat callback error, MicroPython sering diam-diam menghentikan callback tanpa pesan jelas, jadi try...except sangat penting untuk menemukan masalah.

    - Gunakan timer yang berbeda jika menggunakan lebih dari satu timer (misalnya Timer(0), Timer(1)).

 

Baca juga : Perbedaan dan Penggunaan GPIO Input vs Output di Raspberry Pi Pico

 

 

 

 

 

 

 

 

 

Siap Untuk Membuat Proyek Impianmu Menjadi Kenyataan?

Klik di sini untuk chat langsung via WhatsApp dan dapatkan dukungan langsung dari tim ahli kami! 

 

0 on: "Penjelasan Timer dan Delay di Raspberry Pi Pico: Cara Kerja dan Contoh Program"