SOAl TUGAS PENDAHULUAN
1. Jelaskan apa itu protokol komunikasi UART, SPI, dan I2C
Jawab :
Pengertian Protokol Komunikasi
Protokol UART (Universal Asynchronous Receiver/Transmitter) adalah metode komunikasi serial asinkron yang paling sederhana dan banyak digunakan pada sistem embedded. Protokol ini tidak memerlukan sinyal clock terpisah untuk sinkronisasi; sebaliknya, data dikemas dalam frame yang terdiri dari start bit, bit data, parity bit opsional, dan one atau dua stop bit. UART ideal untuk komunikasi jarak pendek—misalnya antara mikrokontroler dan modul Bluetooth atau sensor—namun tidak menyediakan mekanisme pemeriksaan kesalahan bawaan, sehingga seringkali ditambahkan lapisan protokol di atasnya untuk menjamin integritas data.
Protokol SPI (Serial Peripheral Interface) adalah protokol sinkron penuh-dupleks yang dirancang untuk transfer data berkecepatan tinggi antar perangkat master dan satu atau beberapa slave. SPI menggunakan empat jalur utama—clock dari master, jalur data MOSI (Master Out Slave In), MISO (Master In Slave Out), dan pin CS (Chip Select) untuk tiap slave—sehingga memungkinkan koordinasi yang presisi dan latency rendah. Karena kemampuannya mentransfer byte demi byte secara terus-menerus, SPI banyak dipakai untuk membaca/menulis memori eksternal (EEPROM, flash) atau berkomunikasi dengan sensor ADC/DAC yang membutuhkan throughput tinggi.
Protokol I²C (Inter-Integrated Circuit) adalah protokol sinkron half-dupleks yang dirancang untuk menghubungkan banyak perangkat pada dua jalur: SDA (Serial Data) dan SCL (Serial Clock). Dengan menggunakan konfigurasi open-drain dan resistor pull-up, I²C memungkinkan arsitektur bus yang sederhana namun fleksibel, mendukung multi-master dan multi-slave dengan penentuan alamat 7-bit atau 10-bit. Keunggulan I²C terletak pada efisiensi penggunaan pin dan kemudahan penambahan node, sehingga sering dipakai untuk menghubungkan perangkat berkecepatan sedang seperti real-time clock, sensor suhu, atau EEPROM kapasitas kecil.
2. Bagaimana konfigurasi komunikasi UART pada STM32 dan Raspberry Pipico secara hardware (rangkaian) maupun software (program)
Jawab :
Konfigurasi UART pada STM32 dan Raspberry Pi Pico. Konfigurasi UART pada STM32 dan Raspberry Pi Pico
2.1. Hardware
STM32
Gunakan pin TX/RX yang sesuai (misal PA9=TX dan PA10=RX pada STM32F103).
Sambungkan TX MCU ke RX perangkat serial, dan RX MCU ke TX perangkat.
Ground bersama.
Tambahkan level shifter jika interfacing dengan TTL lain.
Raspberry Pi Pico
Gunakan pin UART0 (GPIO0 TX, GPIO1 RX) atau UART1 (GPIO4 TX, GPIO5 RX).
Sambungkan TX ke RX, RX ke TX, dan GND bersama.
2.2. Software
STM32 (HAL Library, CubeIDE)
UART_HandleTypeDef huart1;
// Inisialisasi UART1
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
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);
// Mengirim data
char msg[] = "Hello UART\r\n";
HAL_UART_Transmit(&huart1, (uint8_t*)msg, strlen(msg), 100);
Raspberry Pi Pico (SDK C/C++)
#include "pico/stdlib.h"
#include "hardware/uart.h"
int main() {
// Inisialisasi baud rate dan pin
uart_init(uart0, 115200);
gpio_set_function(0, GPIO_FUNC_UART);
gpio_set_function(1, GPIO_FUNC_UART);
// Kirim data
uart_puts(uart0, "Hello UART Pico\r\n");
while (1) tight_loop_contents();
}
3. Bagaimana konfigurasi komunikasi SPI pada STM32 dan Raspberry Pipico secara hardware (rangkaian) maupun software (program)
Jawab :
Konfigurasi SPI pada STM32 dan Raspberry Pi Pico
3.1. Hardware
STM32
Pilih SPI peripheral, misal SPI1:
PA5 = SCK
PA6 = MISO
PA7 = MOSI
Tambahkan pin PB6 sebagai CS (GPIO output)
Sambungkan SCLK, MISO, MOSI, dan CS sesuai perangkat.
Raspberry Pi Pico
Gunakan SPI0 (GPIO2 SCK, GPIO3 MOSI, GPIO4 MISO) atau SPI1 (GPIO10 SCK, GPIO11 MOSI, GPIO12 MISO).
Sambungkan CS pada pin GPIO lain sebagai chip-select.
3.2. Software
STM32 (HAL Library)
SPI_HandleTypeDef hspi1;
// Inisialisasi SPI1
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;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
HAL_SPI_Init(&hspi1);
// Transmit data
uint8_t data = 0xA5;
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_RESET); // CS LOW
HAL_SPI_Transmit(&hspi1, &data, 1, 100);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_SET); // CS HIGHRaspberry Pi Pico (SDK C/C++)
#include "hardware/spi.h"
int main() {
// Konfigurasi SPI0: SCK=GPIO2, MOSI=GPIO3, MISO=GPIO4
spi_init(spi0, 1000 * 1000);
gpio_set_function(2, GPIO_FUNC_SPI);
gpio_set_function(3, GPIO_FUNC_SPI);
gpio_set_function(4, GPIO_FUNC_SPI);
gpio_init(5);
gpio_set_dir(5, GPIO_OUT);
// Transmit data
uint8_t msg = 0xA5;
gpio_put(5, 0);
spi_write_blocking(spi0, &msg, 1);
gpio_put(5, 1);
while (1) tight_loop_contents();
}4. Bagaimana konfigurasi komunikasi I2C pada STM32 dan Raspberry Pipico secara hardware (rangkaian) maupun software (program)
Jawab :
Konfigurasi I²C pada STM32 dan Raspberry Pi Pico
4.1. Hardware
STM32
Pilih I2C peripheral, misal I2C1:
PB6 = SCL
PB7 = SDA
Tambahkan resistor pull-up (4.7 kΩ – 10 kΩ) pada SDA dan SCL.
Raspberry Pi Pico
Gunakan I2C0 (GPIO8 SDA, GPIO9 SCL) atau I2C1 (GPIO2 SDA, GPIO3 SCL).
Pasang pull-up resistor pada SDA dan SCL.
4.2. Software
STM32 (HAL Library)
I2C_HandleTypeDef hi2c1;
// Inisialisasi I2C1
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);
// Transmit data ke alamat 0x50
uint8_t data = 0x37;
HAL_I2C_Master_Transmit(&hi2c1, 0x50<<1, &data, 1, 100);Raspberry Pi Pico (SDK C/C++)
#include "hardware/i2c.h"
int main() {
// Inisialisasi I2C0 pada 100 kHz
i2c_init(i2c0, 100 * 1000);
gpio_set_function(8, GPIO_FUNC_I2C);
gpio_set_function(9, GPIO_FUNC_I2C);
gpio_pull_up(8);
gpio_pull_up(9);
// Write ke device address 0x50
uint8_t data = 0x37;
i2c_write_blocking(i2c0, 0x50, &data, 1, false);
while (1) tight_loop_contents();
}
Tidak ada komentar:
Posting Komentar