Tugas Pendahuluan 1


1. Tugas Pendahuluan [Kembali]

SOAl TUGAS PENDAHULUAN

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

Jawab:

·  UART (Universal Asynchronous Receiver Transmitter):

UART adalah protokol komunikasi serial asinkron yang menggunakan dua jalur utama, yaitu TX (transmit) dan RX (receive). Tidak menggunakan sinyal clock bersama, melainkan mengandalkan kecepatan baud rate yang disepakati antara pengirim dan penerima. Banyak digunakan untuk komunikasi jarak pendek antara mikrokontroler dan modul seperti GPS, Bluetooth, dan komputer.

·  SPI (Serial Peripheral Interface):

SPI adalah protokol komunikasi serial sinkron yang menggunakan empat jalur utama:

  • MOSI (Master Out Slave In)
  • MISO (Master In Slave Out)
  • SCLK (Serial Clock)
  • SS/CS (Slave Select/Chip Select)

SPI bersifat full-duplex dan cepat, cocok untuk komunikasi antar-perangkat seperti sensor, EEPROM, atau layar LCD. Hanya satu master yang mengontrol komunikasi dengan satu atau lebih slave.

·  I2C (Inter-Integrated Circuit):

I2C adalah protokol komunikasi serial sinkron yang menggunakan dua jalur utama:

  • SDA (Serial Data Line)
  • SCL (Serial Clock Line)

I2C memungkinkan satu master dan banyak slave berbagi dua jalur komunikasi yang sama. Setiap slave memiliki alamat unik. I2C sangat hemat pin dan ideal untuk sistem yang kompleks dengan banyak perangkat.

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

Jawab:

STM32

TX : Pin PA9

RX : Pin PA10

Rangkaian dasar UART STM32 ke USB-TTL (ex: CH340/FTD1)

STM32 PA9 (TX) -->  RX USB-TTL

STM32 PA10 (RX) -->  TX USB-TTL

GND STM32 -->  GND USB-TTL

Contoh rangkaiannya:

Program

#include "main.h"

#include "stm32f1xx_hal.h"

#include <string.h>

 

// Inisialisasi handle UART

UART_HandleTypeDef huart1;

 

// Deklarasi fungsi

void SystemClock_Config(void);

static void MX_GPIO_Init(void);

static void MX_USART1_UART_Init(void);

 

int main(void)

{

    // Inisialisasi HAL

    HAL_Init();

 

    // Konfigurasi sistem clock

    SystemClock_Config();

 

    // Inisialisasi GPIO dan UART

    MX_GPIO_Init();

    MX_USART1_UART_Init();

 

    // Pesan yang akan dikirim

    char msg[] = "Hello from STM32 via UART!\r\n";

 

    // Loop utama

    while (1)

    {

        HAL_UART_Transmit(&huart1, (uint8_t*)msg, strlen(msg), HAL_MAX_DELAY);

        HAL_Delay(1000); // Delay 1 detik

    }

}

 

// Konfigurasi USART1

static 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);

}

 

Raspberry Pi Pico

TX (transmit) : GPIO0 (UARTO TX)

RX (receive) : GPIO1 (UARTo RX)

 

Rangkaian dasar UART Pico ke USB-TTL:

Pico GPIO0 (TX) --> RX USB-TTL

Pico GPIO1 (RX) --> TX USB-TTL

Pico GND --> GND USB-TTL

 

Program dengan kode micropython:

from machine import UART, Pin

import time

 

# Inisialisasi UART0 dengan baudrate 9600

uart0 = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1))

 

# Loop utama

while True:

    uart0.write('Hello from Raspberry Pi Pico!\r\n')

    time.sleep(1)  # Delay selama 1 detik

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

Jawab:

STM32

MOSI: Pin PA7

MISO: Pin PA6

SCK: Pin PA5

NSS (CS): Pin PA4

 

Contoh koneksi ke sensor SPI (ex: nRF24L01)

STM32 PA5 (SCK) --> SCK nRF24L01

STM32 PA6 (MISO) --> MISO nRF24L01

STM32 PA7 (MOSI) --> MOSI nRF24L01

STM32 PA4 (NSS) --> NSS nRF24L01

STM32 3,3V --> VCC nRF24L01

STM32 GND --> GND nRF24L01

 

Rangkaian:

Program:

Inisialisasi SPI1:

// Deklarasi handle SPI

SPI_HandleTypeDef hspi1;

 

// Inisialisasi SPI1

void MX_SPI1_Init(void)

{

    hspi1.Instance = SPI1;

    hspi1.Init.Mode = SPI_MODE_MASTER;                         // Mode Master

    hspi1.Init.Direction = SPI_DIRECTION_2LINES;               // Full duplex (2 lines)

    hspi1.Init.DataSize = SPI_DATASIZE_8BIT;                   // Data 8-bit

    hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;                 // Clock idle state low

    hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;                     // Data valid on first clock edge

    hspi1.Init.NSS = SPI_NSS_SOFT;                             // NSS dikontrol secara software

    hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;   // Prescaler baudrate

    hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;                    // MSB dikirim lebih dulu

    hspi1.Init.TIMode = SPI_TIMODE_DISABLE;                    // Tidak menggunakan TI mode

    hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;    // CRC tidak digunakan

    hspi1.Init.CRCPolynomial = 10;                             // Nilai CRC polynomial (jika digunakan)

 

    HAL_SPI_Init(&hspi1);  // Inisialisasi SPI dengan konfigurasi di atas

}

 

Contoh mengirim data via SPI:

uint8_t data[] = {0xAA, 0x55};

 

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); // CS LOW

HAL_SPI_Transmit(&hspi1, data, sizeof(data), HAL_MAX_DELAY);

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);   // CS HIGH

 

Raspberry Pi Pico

SCK: Pin GPIO2

MOSI: Pin GPIO3

MISO: Pin GPIO4

CS: Pin GPIO5

 

Rangkaian koneksi antarmuka periferal serial:

Koneksi ke sensor SPI (ex: EEPROM SPI)

Pico GPIO2 (SCK) --> SCK EEPROM

Pico GPIO3 (MOSI) --> MOSI EEPROM

Pico GPIO4 (MISO) --> MISO EEPROM

Pico GPIO5 (CS) --> CS EEPROM

Pico 3,3V --> VCC EEPROM

Pico GND --> GND EEPROM

 

Program dengan micropython

from machine import SPI, Pin

import time

 

# SPI0 dengan default pin (SCK=2, MOSI=3, MISO=4)

spi = SPI(0, baudrate=1000000, 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)  # CS HIGH (nonaktif)

 

while True:

    cs.value(0)  # CS LOW (aktif)

    spi.write(bytes([0x9F]))  # Contoh: baca JEDEC ID dari flash chip

    cs.value(1)

    time.sleep(1)

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

Jawab:

STM32

SDA: Pin PB7

SCL: Pin PB6

Rangkaian I2C STM32 (ex: OLED SSD1306)

STM32 PB6 (SCL) --> SCL perangkat I2C

STM32 PB7 (SDA) --> SDA perangkat I2C

STM32 3,3V --> VCC perangkat I2C

STM32 GND --> GND perangkat I2C

 

Program

Inisialisasi I2C1:

I2C_HandleTypeDef hi2c1;

 

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);

}

 

Contoh mengirim data I2C (misalnya menulis ke OLED/RTC):

uint8_t data[] = {0x00, 0xAE}; // perintah OLED: Display OFF

HAL_I2C_Master_Transmit(&hi2c1, 0x78, data, 2, HAL_MAX_DELAY);

 

Raspberry Pi Pico

SDA: Pin GPIO0

SCL: Pin GPIO1

 

Rangkaiannya:

Contoh koneksi ke sensor I2C

Pico GPIO0 (SDA) --> SDA perangkat

Pico GPIO1 (SCL) --> SCL perangkat

Pico 3,3V --> VCC perangkat

Pico GND --> GND perangkat

 

Program:

Contoh: scan alamat I2C

from machine import I2C, Pin

import time

i2c = I2C(0, scl=Pin(1), sda=Pin(0), freq=100000)

devices = i2c.scan()

print("I2C devices found:", devices)

 

Contoh kirim data (misalnya OLED SSD1306):

i2c.writeto(0x3C, b'\x00\xAE')  # Display OFF command 

Tidak ada komentar:

Posting Komentar

   BAHAN PRESENTASI UNTUK MATA KULIAH  ELEKTRONIKA 2023 Nama : Hadi Andhika Jafta NIM : 2210951009 Dosen Pengampu : Dr. Darwison, MT...