LA MODUL 3 PRAKTIKUM uP & uC




Percobaan 1
LED, Buzeer, dan LDR

1. Prosedur
[Kembali]

  1. Rangkai semua komponen pada breadboard yang terhubung ke 2 buah Raspberry Pi Pico.
  2. Hubungkan Raspberry Pi Pico dengan aplikasi Thony IDE menggunakan kabel  USB.
  3. Build program yang telah dibuat, lalu inputkan program ke dalam mikrokontroler melalui stlink.
  4. Setelah program diinputkan, uji rangkaian yang telah dirangkai sesuai dengan output yang ditentukan.
  5. Selesai.

2. Hardware dan Diagram Blok [Kembali]

Hardware :

a) Raspberry Pi Pico


2. Potensiometer




3. LCD

4. Breadboard
BREADBOARD / PROJECTBOARD / PROTOBOARD 400 HOLES di M-kontrol | Tokopedia
 

Diagram Blok  :



3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

Rangkaian Simulasi:



Prinsip Kerja : 

Potensiometer digunakan untuk mengatur resistansi yang masuk ke raspberry, Prinsip kerja dari rangkaian yang menggunakan kode tersebut adalah sebagai berikut: sistem terdiri dari dua mikrokontroler, yaitu sebagai pengirim (transmitter/TX) dan penerima (receiver/RX), yang saling terhubung melalui komunikasi serial UART. Pada sisi pengirim, sebuah potensiometer terhubung ke pin ADC0 (GPIO26) dari mikrokontroler. Nilai tegangan analog dari potensiometer dibaca secara berkala menggunakan fungsi read_u16() dan dikonversi menjadi nilai digital 16-bit (rentang 0–65535). Nilai tersebut kemudian diformat ke dalam string dengan awalan "POT:" dan dikirim melalui jalur UART setiap 0,5 detik.

Di sisi penerima, mikrokontroler menerima data tersebut melalui antarmuka UART yang telah disesuaikan baud rate-nya. Data yang diterima dibaca dan di-decode dari format byte menjadi string. Jika data memiliki format yang sesuai (berawalan "POT:"), maka nilai digital potensiometer diekstrak dan ditampilkan pada LCD 16x2 yang terhubung melalui komunikasi I2C. Jika format data tidak sesuai atau terjadi kesalahan saat pemrosesan, maka sistem akan menampilkan pesan "ERROR" pada LCD serta menampilkan pesan kesalahan untuk mempermudah proses debugging. Dengan demikian, rangkaian ini berfungsi sebagai sistem monitoring nilai potensiometer secara real-time yang ditampilkan dalam bentuk digital pada layar LCD.


4. Flowchart dan Listing Program [Kembali]

Flowchart :




Listing Program :


import utime

import gc


from lcd_api import LcdApi

from machine import I2C


# PCF8574 pin definitions

MASK_RS = 0x01       # P0

MASK_RW = 0x02       # P1

MASK_E  = 0x04       # P2


SHIFT_BACKLIGHT = 3  # P3

SHIFT_DATA      = 4  # P4-P7


class I2cLcd(LcdApi):

    

    #Implements a HD44780 character LCD connected via PCF8574 on I2C


    def init(self, i2c, i2c_addr, num_lines, num_columns):

        self.i2c = i2c

        self.i2c_addr = i2c_addr

        self.i2c.writeto(self.i2c_addr, bytes([0]))

        utime.sleep_ms(20)   # Allow LCD time to powerup

        # Send reset 3 times

        self.hal_write_init_nibble(self.LCD_FUNCTION_RESET)

        utime.sleep_ms(5)    # Need to delay at least 4.1 msec

        self.hal_write_init_nibble(self.LCD_FUNCTION_RESET)

        utime.sleep_ms(1)

        self.hal_write_init_nibble(self.LCD_FUNCTION_RESET)

        utime.sleep_ms(1)

        # Put LCD into 4-bit mode

        self.hal_write_init_nibble(self.LCD_FUNCTION)

        utime.sleep_ms(1)

        LcdApi.init(self, num_lines, num_columns)

        cmd = self.LCD_FUNCTION

        if num_lines > 1:

            cmd |= self.LCD_FUNCTION_2LINES

        self.hal_write_command(cmd)

        gc.collect()


    def hal_write_init_nibble(self, nibble):

        # Writes an initialization nibble to the LCD.

        # This particular function is only used during initialization.

        byte = ((nibble >> 4) & 0x0f) << SHIFT_DATA

        self.i2c.writeto(self.i2c_addr, bytes([byte | MASK_E]))

        self.i2c.writeto(self.i2c_addr, bytes([byte]))

        gc.collect()

        

    def hal_backlight_on(self):

        # Allows the hal layer to turn the backlight on

        self.i2c.writeto(self.i2c_addr, bytes([1 << SHIFT_BACKLIGHT]))

        gc.collect()

        

    def hal_backlight_off(self):

        #Allows the hal layer to turn the backlight off

        self.i2c.writeto(self.i2c_addr, bytes([0]))

        gc.collect()

        

    def hal_write_command(self, cmd):

        # Write a command to the LCD. Data is latched on the falling edge of E.

        byte = ((self.backlight << SHIFT_BACKLIGHT) |

                (((cmd >> 4) & 0x0f) << SHIFT_DATA))

        self.i2c.writeto(self.i2c_addr, bytes([byte | MASK_E]))

        self.i2c.writeto(self.i2c_addr, bytes([byte]))

        byte = ((self.backlight << SHIFT_BACKLIGHT) |

                ((cmd & 0x0f) << SHIFT_DATA))

        self.i2c.writeto(self.i2c_addr, bytes([byte | MASK_E]))

        self.i2c.writeto(self.i2c_addr, bytes([byte]))

        if cmd <= 3:

            # The home and clear commands require a worst case delay of 4.1 msec

            utime.sleep_ms(5)

        gc.collect()


    def hal_write_data(self, data):

        # Write data to the LCD. Data is latched on the falling edge of E.

        byte = (MASK_RS |

                (self.backlight << SHIFT_BACKLIGHT) |

                (((data >> 4) & 0x0f) << SHIFT_DATA))

        self.i2c.writeto(self.i2c_addr, bytes([byte | MASK_E]))

        self.i2c.writeto(self.i2c_addr, bytes([byte]))

        byte = (MASK_RS |

                (self.backlight << SHIFT_BACKLIGHT) |

                ((data & 0x0f) << SHIFT_DATA))      

        self.i2c.writeto(self.i2c_addr, bytes([byte | MASK_E]))

        self.i2c.writeto(self.i2c_addr, bytes([byte]))

        gc.collect()


5. Video Demo [Kembali]


7. Download File [Kembali]

Download HTML [Download]
Download Video Demo [Download]
Datasheet Raspberry Pi Pico [Download]
Datasheet LCD [Download]
Datasheet Potensiometer [Download]
 

Komentar

Postingan populer dari blog ini

MODUL 1 PRAKTIKUM UP & UC

Modul 1 Praktikum Sistem Digital

Modul 3 Praktikum Sistem Digital