Jumat, 16 Mei 2025

Tugas Pendahuluan M3

 SOAl TUGAS PENDAHULUAN

1. Jelaskan apa itu protokol komunikasi UART, SPI, dan I2C     

    

1. UART (Universal Asynchronous Receiver Transmitter)

Definisi:
UART adalah protokol komunikasi serial asinkron yang digunakan untuk pertukaran data antar dua perangkat elektronik. Asinkron berarti tidak menggunakan sinyal clock terpisah; kedua perangkat harus menyepakati kecepatan (baud rate) sebelumnya.

Cara kerja:

  • Data dikirim dalam bentuk bit serial (satu per satu).

  • Umumnya menggunakan 2 pin: TX (transmit) dan RX (receive).

  • Protokol ini mengatur sendiri pengiriman dan penerimaan data melalui bit awal (start bit), data bit, dan bit akhir (stop bit).

2. I2C (Inter-Integrated Circuit)

Definisi:
I2C adalah protokol komunikasi serial sinkron yang memungkinkan banyak perangkat (multi-master/multi-slave) berkomunikasi melalui hanya dua kabel. Diciptakan oleh Philips untuk komunikasi antar chip pada papan sirkuit.

Cara kerja:

  • Menggunakan dua jalur: SDA (Serial Data Line) dan SCL (Serial Clock Line).

  • Master mengontrol clock (SCL) dan mengatur komunikasi ke perangkat slave berdasarkan alamat unik.

  • Bisa menghubungkan banyak perangkat hanya dengan dua kabel.

3. SPI (Serial Peripheral Interface)

Definisi:
SPI adalah protokol komunikasi serial sinkron yang dirancang untuk komunikasi cepat antar mikrokontroler dan perangkat periferal seperti sensor, memori, dan display. Dikembangkan oleh Motorola.

Cara kerja:

  • Menggunakan empat sinyal utama: MOSI (Master Out Slave In), MISO (Master In Slave Out), SCK (Serial Clock), dan SS/CS (Slave Select/Chip Select).

  • Master mengontrol clock dan memilih slave yang ingin diajak komunikasi.

  • Data ditransmisikan secara full-duplex (kirim dan terima bersamaan).


2. Bagaimana konfigurasi komunikasi UART pada STM32 dan Raspberry Pipico secara hardware (rangkaian) maupun software (program)

jawab :

STM32 – Konfigurasi UART

a. Hardware (Rangkaian):

  • STM32 memiliki beberapa pin USART/UART (misal: PA9 (TX) dan PA10 (RX) untuk USART1).

  • Hubungkan:

    • PA9 (TX STM32)RX perangkat lain

    • PA10 (RX STM32)TX perangkat lain

  • Tambahkan resistor pull-up jika diperlukan (tergantung board).

  • Level logika umumnya 3.3V.

Contoh koneksi STM32 ke USB-TTL converter:

  • STM32 TX (PA9) → RX USB-TTL

  • STM32 RX (PA10) ← TX USB-TTL

  • GND STM32 ↔ GND USB-TTL

b. Software (Program):

Menggunakan STM32CubeIDE:

// Inisialisasi UART (USART1 contoh)

void MX_USART1_UART_Init(void)

{

  huart1.Instance = USART1;

  huart1.Init.BaudRate = 9600;

  huart1.Init.WordLength = UART_WORDLENGTH_8B;

  huart1.Init.StopBits = UART_STOPBITS_1;

  huart1.Init.Parity = UART_PARITY_NONE;

  huart1.Init.Mode = UART_MODE_TX_RX;

  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;

  huart1.Init.OverSampling = UART_OVERSAMPLING_16;

  HAL_UART_Init(&huart1);

}


// Contoh mengirim data

HAL_UART_Transmit(&huart1, (uint8_t *)"Halo STM32\r\n", strlen("Halo STM32\r\n"), HAL_MAX_DELAY);

Raspberry Pi Pico – Konfigurasi UART

a. Hardware (Rangkaian):

  • Pico punya 2 UART: UART0 dan UART1.

  • Default pin UART0:

    • GPIO0 (TX)

    • GPIO1 (RX)

  • Hubungkan Pico TX ke RX perangkat lain, dan sebaliknya. Gunakan level logika 3.3V juga.

Contoh koneksi ke USB-TTL:

  • GPIO0 (TX) → RX USB-TTL

  • GPIO1 (RX) ← TX USB-TTL

  • GND Pico ↔ GND USB-TTL

b. Software (Program):

Dengan C/C++ SDK:

#include "pico/stdlib.h"
#include "hardware/uart.h"

int main() {
    uart_init(uart0, 9600);
    gpio_set_function(0, GPIO_FUNC_UART); // TX
    gpio_set_function(1, GPIO_FUNC_UART); // RX

    uart_puts(uart0, "Halo dari Raspberry Pi Pico!\r\n");

    while (true) {
        if (uart_is_readable(uart0)) {
            char ch = uart_getc(uart0);
            uart_putc(uart0, ch); // echo
        }
    }
}


3. Bagaimana konfigurasi komunikasi SPI pada STM32 dan Raspberry Pipico secara hardware (rangkaian) maupun software (program)

jawab :

STM32 – Konfigurasi SPI

a. Hardware (Rangkaian):

SPI pada STM32 (misal: SPI1) umumnya memakai pin:

FungsiPin STM32 (SPI1, contoh)
SCKPA5
MISOPA6
MOSIPA7
NSS/SSPA4 (opsional, bisa software)

Koneksi ke perangkat SPI lainnya (misal sensor/memori):

  • SCK (PA5) → SCK slave

  • MOSI (PA7) → MOSI slave

  • MISO (PA6) ← MISO slave

  • SS (PA4) → CS slave

  • GND → GND slave

  • Semua level logika umumnya 3.3V

b. Software (Program) – STM32CubeIDE (HAL)

Inisialisasi SPI:

void MX_SPI1_Init(void)

{

  hspi1.Instance = SPI1;

  hspi1.Init.Mode = SPI_MODE_MASTER;

  hspi1.Init.Direction = SPI_DIRECTION_2LINES;

  hspi1.Init.DataSize = SPI_DATASIZE_8BIT;

  hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;

  hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;

  hspi1.Init.NSS = SPI_NSS_SOFT;

  hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;

  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;

  hspi1.Init.TIMode = SPI_TIMODE_DISABLE;

  HAL_SPI_Init(&hspi1);

}

Raspberry Pi Pico – Konfigurasi SPI

a. Hardware (Rangkaian):

Default pin untuk SPI0:

FungsiPin GPIO
SCKGPIO2
MOSIGPIO3
MISOGPIO4
CS/SSGPIO5 (bebas ditentukan manual)

Koneksi ke perangkat SPI slave:

  • SCK (GPIO2) → SCK slave

  • MOSI (GPIO3) → MOSI slave

  • MISO (GPIO4) ← MISO slave

  • CS (GPIO5) → CS slave

  • GND → GND slave

b. Software (Program)

Dengan C SDK:

#include "pico/stdlib.h"
#include "hardware/spi.h"

int main() {
    spi_init(spi0, 1000 * 1000); // 1 MHz
    gpio_set_function(2, GPIO_FUNC_SPI); // SCK
    gpio_set_function(3, GPIO_FUNC_SPI); // MOSI
    gpio_set_function(4, GPIO_FUNC_SPI); // MISO

    gpio_init(5); // CS pin
    gpio_set_dir(5, GPIO_OUT);
    gpio_put(5, 1);

    uint8_t tx[] = {0xAA};
    uint8_t rx[1];
    gpio_put(5, 0); // CS active
    spi_write_read_blocking(spi0, tx, rx, 1);
    gpio_put(5, 1); // CS inactive

    while (1);
}

4. Bagaimana konfigurasi komunikasi I2C pada STM32 dan Raspberry Pipico secara hardware (rangkaian) maupun software (program)

jawab :

STM32 – Konfigurasi I2C

a. Hardware (Rangkaian):

  • STM32 (misalnya I2C1) memiliki pin default seperti:

    • SCL: PB6

    • SDA: PB7

  • Komponen I2C dihubungkan secara paralel pada bus SCL dan SDA.

  • Butuh resistor pull-up (biasanya 4.7kΩ) ke 3.3V di kedua jalur:

    • SCL → resistor → 3.3V

    • SDA → resistor → 3.3V

  • Semua perangkat harus level logika sama (umumnya 3.3V pada STM32)

Contoh koneksi ke OLED I2C:

  • STM32 PB6 (SCL) → SCL OLED

  • STM32 PB7 (SDA) → SDA OLED

  • GND STM32 ↔ GND OLED

  • VCC OLED ↔ 3.3V STM32

b. Software (Program) – STM32CubeIDE (HAL)

Inisialisasi I2C:

void MX_I2C1_Init(void)

{

  hi2c1.Instance = I2C1;

  hi2c1.Init.ClockSpeed = 100000;

  hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;

  hi2c1.Init.OwnAddress1 = 0;

  hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;

  hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;

  hi2c1.Init.OwnAddress2 = 0;

  hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;

  hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;

  HAL_I2C_Init(&hi2c1);

}

Raspberry Pi Pico – Konfigurasi I2C

a. Hardware (Rangkaian):

Default I2C0 menggunakan pin:

FungsiGPIO
SDAGPIO0
SCLGPIO1
  • Sama seperti STM32, gunakan resistor pull-up 4.7kΩ ke 3.3V.

  • Bisa menggunakan banyak device I2C asalkan alamatnya berbeda.

Contoh koneksi ke sensor I2C atau OLED:

  • GPIO0 (SDA) → SDA device

  • GPIO1 (SCL) → SCL device

  • GND ↔ GND

  • VCC device ↔ 3.3V

b. Software (Program)

Dengan C SDK:

#include "pico/stdlib.h"
#include "hardware/i2c.h"

int main() {
    i2c_init(i2c0, 100 * 1000); // 100kHz
    gpio_set_function(0, GPIO_FUNC_I2C); // SDA
    gpio_set_function(1, GPIO_FUNC_I2C); // SCL
    gpio_pull_up(0);
    gpio_pull_up(1);

    uint8_t data = 0xAA;
    i2c_write_blocking(i2c0, 0x3C, &data, 1, false); // alamat 0x3C
    while (1);
}

Related Posts:

0 komentar:

Posting Komentar