LA Modul 3 - Percobaan 4




Percobaan 4

1. Prosedur
[Kembali]
  • Persiapan Alat dan Bahan 
  • Pemahaman Skematik/Wiring Diagram
  • Pengawatan (Wiring)
  • Pemrograman STM32
  • Pengujian dan Pengamatan

2. Hardware dan Diagram Blok [Kembali]

Hardware :

1. Raspberry Pi Pico






2. Potensiometer


3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

Rangkaian Simulasi :
 
Prinsip Kerja : 
Prinsip kerja percobaan 4 (I2C - STM32 LCD I2C) adalah memanfaatkan protokol I2C untuk komunikasi antara mikrokontroler STM32 dan modul LCD.  Protokol I2C menggunakan dua jalur, yaitu SDA (Serial Data) untuk transfer data dan SCL (Serial Clock) untuk sinkronisasi.  STM32 bertindak sebagai master yang mengontrol komunikasi, sementara LCD I2C menjadi slave yang menerima perintah dan data.

Proses komunikasi dimulai dengan master mengirimkan alamat slave (LCD I2C) bersama dengan perintah atau data yang akan ditampilkan.  LCD I2C kemudian menerima informasi ini dan menampilkannya pada layar.  Dengan menggunakan I2C, komunikasi antara STM32 dan LCD menjadi lebih efisien dalam hal penggunaan pin mikrokontroler.

4. Flowchart dan Listing Program [Kembali]

Flowchart :


Listing Program :

TX: 
# Pengirim: Mengirim data potensiometer via UART from machine import Pin, ADC, UART import time pot = ADC(26) # GPIO 26 (ADC0) uart = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1)) while True: pot_value = pot.read_u16() # Baca nilai (0-65535) data = f"POT:{pot_value}\n" # Format: "POT:<nilai>\n" uart.write(data) print("Sent:", data.strip()) # Debug: Cek di Thonny time.sleep(0.5)
RX:
# Penerima: Menampilkan data UART di LCD I2C
from machine import UART, I2C, Pin
from i2c_lcd import I2cLcd
from time import sleep

uart = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1))
i2c = I2C(0, sda=Pin(4), scl=Pin(5))

lcd = I2cLcd(i2c, 0x27, 2, 16)  # Ganti 0x27 jika perlu

while True:
    if uart.any():
        raw_data = uart.readline()
        try:
            decoded_data = raw_data.decode('utf-8').strip()
            print("Received RAW:", repr(raw_data))
            print("Decoded:", decoded_data)

            if decoded_data.startswith("POT:"):
                pot_value = int(decoded_data.split(':')[1])
                lcd.clear()
                lcd.putstr(f"Value: {pot_value}")
            else:
                raise ValueError("Format salah")
        except Exception as e:
            lcd.clear()
            lcd.putstr("ERROR")
            lcd.move_to(0, 1)
            lcd.putstr(str(e)[:16])  # Tampilkan pesan error
            print("Error:", e, "| Data:", raw_data)
    sleep(0.1)

5. Video Demo [Kembali]


6. Analisa [Kembali]



7. Download File [Kembali]
Download Video Demo [Download]

Komentar

Postingan populer dari blog ini