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

Rabu, 06 Agustus 2025

Pengenalan Dasar SPI: Komunikasi Raspberry Pi Pico dengan Perangkat Eksternal

Raspberry Pi Pico adalah mikrokontroler yang dikembangkan oleh Raspberry Pi Foundation, dilengkapi dengan antarmuka komunikasi yang kuat, termasuk SPI (Serial Peripheral Interface). SPI adalah protokol komunikasi serial yang banyak digunakan untuk menghubungkan mikrokontroler dengan perangkat eksternal seperti sensor, modul display, dan memori eksternal. Artikel ini akan membahas dasar-dasar SPI, cara mengkonfigurasinya pada Raspberry Pi Pico, serta contoh implementasi untuk berkomunikasi dengan perangkat eksternal.  


Apa Itu SPI?


SPI (Serial Peripheral Interface) adalah protokol komunikasi sinkron dan full-duplex yang dirancang untuk pertukaran data berkecepatan tinggi antara perangkat master dan slave. Berbeda dengan I2C yang menggunakan dua kabel (SDA dan SCL), SPI menggunakan empat kabel utama.

Perbedaan Utama SPI vs I2C

- I2C: hanya butuh 2 kabel → SDA (data) & SCL (clock).

- SPI: butuh 4 kabel utama, tapi menawarkan kecepatan transfer data lebih tinggi dan komunikasi full-duplex (dua arah secara bersamaan).

Empat Jalur Utama SPI

1. SCLK (Serial Clock)

- Ini adalah sinyal jam (clock) yang dihasilkan oleh master device.

- Digunakan untuk sinkronisasi pengiriman dan penerimaan data antara master dan slave.

- Perangkat slave hanya akan aktif berkomunikasi saat sinyal clock dari master sedang bekerja.

2. MOSI (Master Out Slave In)

- Jalur data keluar dari master dan masuk ke slave.

- Misalnya: jika Raspberry Pi Pico (master) mengirimkan perintah ke sensor (slave), maka perintah itu lewat jalur MOSI.

3. MISO (Master In Slave Out)

- Jalur data keluar dari slave dan masuk ke master.

- Contoh: sensor mengirimkan hasil pengukuran ke Pico lewat MISO.

4. SS / CS (Slave Select / Chip Select)

- Digunakan oleh master untuk memilih slave mana yang aktif.

- Biasanya berupa sinyal LOW (aktif).

- Jika terdapat beberapa slave dalam sistem, masing-masing harus memiliki jalur SS/CS (Slave Select/Chip Select) terpisah, agar master dapat memilih slave yang ingin diakses secara individual.

Tambahan Penting:

- SPI bersifat full-duplex → memungkinkan proses pengiriman dan penerimaan data dilakukan secara bersamaan di kedua arah.

- SPI lebih cepat dari I2C, tetapi menggunakan lebih banyak kabel, terutama jika ada banyak slave.

- Dalam Raspberry Pi Pico, pin SPI bisa dikonfigurasi menggunakan SPI0 atau SPI1, tergantung kebutuhan proyek.

Keunggulan SPI

- Kecepatan tinggi (beberapa Mbps, tergantung perangkat).  

- Full-duplex communication (data dapat dikirim dan diterima secara bersamaan).  

- Sederhana dan efisien untuk komunikasi point-to-point atau multi-slave.  

Keterbatasan SPI  

- Membutuhkan lebih banyak pin dibanding I2C.  

- Tidak memiliki mekanisme acknowledgment seperti I2C.  

- Tidak cocok untuk jaringan dengan banyak perangkat karena setiap slave memerlukan pin CS terpisah.  

Contoh Kode Sederhana SPI

Misalnya contoh komunikasi SPI antara Pico dan OLED atau sensor:

 

from machine import SPI, Pin


spi = SPI(0, baudrate=1000000, polarity=0, phase=0,

          sck=Pin(2), mosi=Pin(3), miso=Pin(4))


cs = Pin(5, Pin.OUT)

cs.value(1)  # Nonaktifkan chip di awal


cs.value(0)  # Aktifkan chip

spi.write(b'\x9F')  # Contoh: perintah baca ID (tergantung perangkat)

cs.value(1)


Konfigurasi SPI pada Raspberry Pi Pico

 

Raspberry Pi Pico memiliki dua antarmuka SPI (SPI0 dan SPI1) yang dapat dikonfigurasi melalui pemrograman MicroPython atau C/C++.  

Pin SPI pada Raspberry Pi Pico

 


Catatan: Pin CS (Chip Select) dapat dipilih bebas karena bersifat software-controlled.  

 

Implementasi SPI dengan MicroPython

 

MicroPython menyediakan modul `machine` untuk mengkonfigurasi SPI. Berikut contoh inisialisasi SPI0:  

 

from machine import Pin, SPI


# Inisialisasi SPI0 dengan pin default

spi = SPI(0, baudrate=1_000_000, polarity=0, phase=0, bits=8,

          firstbit=SPI.MSB, sck=Pin(2), mosi=Pin(3), miso=Pin(4))


cs = Pin(5, Pin.OUT)

cs.value(1)  # Slave tidak aktif di awal


# Fungsi transfer data SPI (full-duplex)

def spi_transfer(data_out): # Kirim data ke slave dan baca responsnya

    data_in = bytearray(len(data_out))

    cs.value(0)  # Aktifkan slave

    spi.write_readinto(data_out, data_in)

    cs.value(1)  # Nonaktifkan slave

    return data_in # data_in: bytearray kosong untuk menerima data dari slave


# Contoh penggunaan

data_out = bytearray([0x01, 0x02, 0x03])

data_in = spi_transfer(data_out)

print("Data diterima:", list(data_in))


Penjelasan Kode: 

1. SPI Inisialisasi 

    - `baudrate`: Kecepatan komunikasi (1 MHz dalam contoh).  

    - `polarity` dan `phase`: Mengatur mode SPI (0 atau 1).  

    - `bits`: Jumlah bit per transfer (biasanya 8).  

    - `firstbit`: Urutan bit (MSB atau LSB).  

2. Chip Select (CS)

    - Digunakan untuk memilih slave yang aktif (active-low).  

3. spi.write_readinto() 

    - Mengirim data sekaligus membaca respons dari slave.  

 

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

 

Contoh Aplikasi: Komunikasi dengan Modul SPI (MCP3008 ADC)

 

MCP3008 memiliki 8 channel analog (CH0-CH7), dan Anda bisa baca semua dengan mengganti parameter pada fungsi read_adc(channel) sesuai kebutuhan. Nilai ADC 10-bit berarti rentangnya 0-1023 (0V hingga 3.3V), jadi Anda bisa konversi ke tegangan (dalam volt) dengan:

 

tegangan = value * 3.3 / 1023  

 

Berikut ini cara membaca data analog dari sensor menggunakan Raspberry Pi Pico:  

Rangkaian Hardware 

- Hubungkan MCP3008 ke Raspberry Pi Pico:  

  - VDD → 3.3V  

  - VREF → 3.3V  

  - AGND → GND  

  - CLK → GP2 (SCK)  

  - DOUT → GP4 (MISO)  

  - DIN → GP3 (MOSI)  

  - CS/SHDN → GP5 (CS)  

  - CH0 → Sensor (misalnya potensiometer)  

Kode MicroPython

 

from machine import Pin, SPI

import time


# Konfigurasi SPI

spi = SPI(0, baudrate=1_000_000, sck=Pin(2), mosi=Pin(3), miso=Pin(4))

cs = Pin(5, Pin.OUT)

cs.value(1)  # Nonaktifkan CS di awal


def read_adc(channel):

    cmd = bytearray([0x01, (0x08 + channel) << 4, 0x00])

    result = bytearray(3)

    

    cs.value(0)

    spi.write_readinto(cmd, result)

    cs.value(1)

    

    # Konversi data ADC 10-bit

    adc_value = ((result[1] & 0x03) << 8) | result[2]

    return adc_value


# Loop membaca channel 0

while True:

    value = read_adc(0)

    print("Nilai ADC:", value)

    time.sleep(1)


Penjelasan:

1. Format Komunikasi MCP3008

    - Mengirim 3 byte:  

        - Byte 1: `0x01` (start bit).  

        - Byte 2: `(0x08 + channel) << 4` (konfigurasi single-ended + channel).  

        - Byte 3: `0x00` (dummy byte untuk clocking).  

2. Pembacaan Data 

   - Data diterima dalam 3 byte, dengan nilai 10-bit di byte 2 dan 3.  

 

Optimasi Performa SPI

 

1. Gunakan Baudrate Tertinggi yang Didukung

- Baudrate adalah kecepatan transfer data.

- Semakin tinggi baudrate, semakin cepat data ditransmisikan.

- Tapi pastikan perangkat slave mendukung baudrate yang dipilih.

2. Minimalkan Delay di Program

- Hindari fungsi sleep() yang tidak perlu.

- Gunakan algoritma efisien agar komunikasi tidak terganggu.

3. Manfaatkan DMA (Direct Memory Access)

- Khususnya saat menggunakan bahasa C/C++, DMA memungkinkan transfer data langsung antar memori dan periferal tanpa beban CPU.

- Cocok untuk aplikasi real-time atau pengiriman data besar.


Troubleshooting Umum SPI

 

1. Cek Koneksi Pin

- Pastikan koneksi MOSI, MISO, SCLK, dan CS/SS terhubung dengan benar.

- Jangan sampai tertukar antara MOSI ↔ MISO.

2. Periksa Baudrate

- Gunakan baudrate yang sesuai dengan kemampuan slave.

- Jika terlalu tinggi, data bisa korup atau tidak terbaca.

3. Pastikan Mode SPI Cocok

- SPI punya 4 mode (Mode 0 hingga Mode 3) tergantung CPOL (clock polarity) dan CPHA (clock phase).

- Master dan slave harus dalam mode yang sama, jika tidak, data tidak akan sinkron.

4. Cek Level Tegangan

- Raspberry Pi Pico bekerja pada logika 3.3V.

- Jika kamu menggunakan perangkat slave 5V, pastikan memakai logic level shifter agar tidak merusak GPIO.


SPI sangat efisien untuk komunikasi high-speed antara Raspberry Pi Pico dan perangkat eksternal. Dengan memahami konfigurasi dasar dan implementasinya, Anda dapat mengintegrasikan berbagai sensor dan modul dengan mudah. Dengan optimasi yang tepat, SPI dapat menjadi solusi ideal untuk proyek IoT, robotika, dan embedded systems yang membutuhkan transfer data cepat.  

 

Baca juga : Raspberry Pi Pico untuk Edukasi: Kenapa Cocok untuk Belajar Elektronika dan Coding

 

 

 

 

 

 

 

 

 

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: "Pengenalan Dasar SPI: Komunikasi Raspberry Pi Pico dengan Perangkat Eksternal"