Senin, 19 Mei 2025

Laporan Akhir Modul 3 Percobaan 1 Praktikum Mikroprosesor dan Mikrokontroler






1. Prosedur [kembali]

    Langkah-langkah percobaan :

a. Tentukan percobaan dan kondisi yang akan dilakukan (Kondisi 6)

b. Siapakan alat dan bahan yang akan digunakan

c. Rangkai Rangkaian pada Board sesuai gambar percobaan 1 dengan komponen 4 push button, 2 Mikrokontroler STM32F103C8, 4 Resistor 220 Ohm, 4 LED  hubungkan menggunakan jumper. 

d. Buatlah program  pada software STM32Cube IDE dengan konfigurasi Pin Input dan Output berdasarkan pada Pin GPIO STM32 yang telah dirangkai di simulasi sebelumnya.

e. Kemudian, buatlah program untuk menghasilkan Output LED sesuai kondisi yang telah ditentukan.

f.  Hubungkan Laptop dengan STM32F103C8 dengan STlink 

g. Run Program, dan lihat output yang dihasilkan ketika push button ditekan



2. Hardware dan Diagram Blok [kembali]
        A. Hardware
            1. STM32F103C8



            2. Push Button



            3. LED




            4. Jumper

            5. Resistor



            6. Laptop


        B. Software
            1. STM32Cube IDE


       C. Blok Diagram




3. Rangkaian Simulasi dan Prinsip Kerja [kembali]
           A. Rangkaian Simulasi

            B. Rangkaian Percobaan


            C. Prinsip Kerja
  • Pertama, sistem memulai dengan inisialisasi HAL (Hardware Abstraction Layer) untuk mengatur semua fungsi dasar dari perangkat keras. Kemudian, sistem clock dikonfigurasi agar semua modul bekerja secara sinkron sesuai frekuensi yang diinginkan. Selanjutnya, GPIO diinisialisasi untuk mengatur pin yang digunakan dalam komunikasi dan kontrol perangkat.

    Setelah itu, salah satu pin dikonfigurasi sebagai input untuk membaca status tombol, dan pin lain dikonfigurasi sebagai output untuk mengontrol LED. Di dalam loop utama, mikrokontroler terus membaca status tombol. Jika tombol ditekan, maka LED akan dinyalakan dan mikrokontroler dapat mengirimkan sinyal melalui UART ke mikrokontroler kedua, menandakan bahwa tombol ditekan. Jika tombol tidak ditekan, LED akan dimatikan dan mikrokontroler juga dapat mengirimkan sinyal status tersebut ke mikrokontroler kedua.

    Setiap pembacaan tombol dan pengiriman sinyal melalui UART disertai dengan delay selama 100 ms untuk menghindari bouncing tombol dan mengatur timing komunikasi. Mikrokontroler penerima yang juga terhubung melalui UART akan membaca data dari UART, kemudian mengontrol LED-nya sendiri sesuai dengan data yang diterima, misalnya jika menerima sinyal tombol ditekan maka LED menyala, dan sebaliknya. Dengan demikian, kedua mikrokontroler berkomunikasi secara serial menggunakan protokol UART untuk menyinkronkan status tombol dan LED di kedua sistem.

    
        

4. Flowchart dan Listing Program [kembali]
        A. Flowchart



        B. Listing Program  

Pada Tx
#include "main.h" UART_HandleTypeDef huart1; uint8_t buttonStates[4] = {'0', '0', '0', '0'}; uint8_t charToTransmit[5]; int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART1_UART_Init(); while (1) { buttonStates[0] = (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1) == GPIO_PIN_SET) ? '1' : '0'; buttonStates[1] = (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_2) == GPIO_PIN_SET) ? '1' : '0'; buttonStates[2] = (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_3) == GPIO_PIN_SET) ? '1' : '0'; buttonStates[3] = (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_4) == GPIO_PIN_SET) ? '1' : '0'; HAL_UART_Transmit(&huart1, buttonStates, 4, 100); HAL_Delay(100); } } void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK |
RCC_CLOCKTYPE_SYSCLK
| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
{
Error_Handler();
}
}
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;
if (HAL_UART_Init(&huart1) != HAL_OK)    
{ Error_Handler(); } } static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } void Error_Handler(void) { __disable_irq(); while (1) { } } #ifdef USE_FULL_ASSERT void assert_failed(uint8_t *file, uint32_t line) { } #endif


Pada Rx
#include "main.h" UART_HandleTypeDef huart1; uint8_t receivedData[4];
void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_USART1_UART_Init(void); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART1_UART_Init(); while (1) { if(HAL_UART_Receive(&huart1, receivedData, 4, 100) == HAL_OK) { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, (receivedData[0] == '0') ? GPIO_PIN_SET : GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, (receivedData[1] == '0') ? GPIO_PIN_SET : GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, (receivedData[2] == '0') ? GPIO_PIN_SET : GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, (receivedData[3] == '0') ? GPIO_PIN_SET : GPIO_PIN_RESET); HAL_UART_Transmit(&huart1, receivedData, 4, 100); } HAL_Delay(50); } } void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) { Error_Handler(); } } 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; if (HAL_UART_Init(&huart1) != HAL_OK) { Error_Handler();    

} } static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_GPIOA_CLK_ENABLE(); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4, GPIO_PIN_RESET); GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } void Error_Handler(void) { __disable_irq(); while (1) { } }

    

5. Analisa [kembali]
       

1. Bagaimana protokol komunikasi UART pada kedua STM32F103C8?
Jawab:
        Dari percobaan yang telah dilakukan, digunakan 2 mikrokontroler STM32F103C8 yang dimana akan melakikan komunikasi keduanya. Dimana salah satu menjadi transmitter dan satu lagi menjadi receiver (Penerima) dimana pada bagian transmitter terdapat komponen input berupa push button, sementara pada receiver terdapat komponen output berupa LED. Berdasarkan percobaan, protokol komunikasinya secara UART dimulai dari konfigurasi pin baik RCC, SYS, dan GPIO pada kedua mikrokontroler Tx Rx dalam komunikasi UARTnya. Dalam percobaan input output dikedua STM32 berada pada pin PA1-Pa4, sementara pada pin PA9-PA10 menjadi Tx dan Rx dari kedua mikrokontroler. Perlu diperhatikan bahwa baudrate di kedua STM sama (di 9600 bps). Lalu dilakukan penguploadan kondisi pada program melalui software STM32CubeIDE. Pastikan dalam program terdapat fungsi:

HAL_UART_HandleType(&huart1)
HAL_UART_Transmit(&huart1, (uint8-t)
HAL_UART_Receive(&huart1, (uint8-t)

        Disini mengisyaratkan bahwa pada kedua mikrokontroler siap mengirim menerima data. Lalu dibuat kondisi yang mnyalakan 1 push button mewakili 1 LED yang aktif jika button di tekan. 

6. Video Demo [kembali]

7. Download file [kembali]

Jumat, 16 Mei 2025

Tugas Pendahuluan Modul 3 Up & Uc


TUGAS PENDAHULUAN 
MODUL 3
COMMUNICATION



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



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


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

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

MODUL 3 PRAKTIKUM MIKROPROSESOR DAN MIKROKONTROLER




MODUL 3
COMMUNICATION

    a) Asistensi dilakukan 1x

    b) Praktikum dilakukan 1x

2. Tujuan[Kembali]

a) Memahami cara penggunaan protokol komunikasi UART, SPI, dan I2C pada Development Board yang digunakan

b) Memahami cara penggunaan komponen input dan output yang berkomunikasi secara UART, SPI, dan I2C pada Development Board yang digunakan 

3. Alat dan Bahan[Kembali]

 a) Raspberry Pi Pico

b) STM32F103C8

c) LED

d) Push Button

e) LED RGB

f) Touch Sensor

g) LCD I2C 16 x 2

h) Potensiometer

i) Gas Sensor Mq-2

j) LCD OLED   

k) LDR dan Photodioda

l) Breadboard

m) Resistor



4. Dasar Teori[Kembali]

1.4.1 UART (Universal Asynchronous Receiver Transmitter)

    UART (Universal Asynchronous Receiver-Transmitter) adalah bagian perangkat keras komputer yang menerjemahkan antara bit-bit paralel data dan bit-bit serial. UART biasanya berupa sirkuit terintegrasi yang digunakan untuk komunikasi serial pada komputer atau port serial perangkat periperal.

   

Gambar 1. Cara Kerja Komunikasi UART

Data dikirimkan secara paralel dari data bus ke UART1. Pada UART1 ditambahkan start bit, parity bit, dan stop bit kemudian dimuat dalam satu paket data. Paket data ditransmisikan secara serial dari Tx UART1 ke Rx UART2. UART2 mengkonversikan data dan menghapus bit tambahan, kemudia di transfer secara parallel ke data bus penerima.

1.4.2 I2C (Inter-Integrated Circuit)
    
Inter Integrated Circuit atau sering disebut I2C adalah standar komunikasi serial dua arah menggunakan dua saluran yang didisain khusus untuk mengirim maupun menerima data. Sistem I2C terdiri dari saluran SCL (Serial Clock) dan SDA (Serial Data) yang membawa informasi data antara I2C dengan pengontrolnya.


Pada I2C, data ditransfer dalam bentuk message yang terdiri dari kondisi start, Address Frame, R/W bit, ACK/NACK bit, Data Frame 1, Data Frame 2, dan kondisi Stop. Kondisi start dimana saat pada SDA beralih dari logika high ke low sebelum SCL. Kondisi stop dimana saat pada SDA beralih dari logika low ke high sebelum SCL. R/W bit berfungsi untuk menentukan apakah master mengirim data ke slave atau meminta data dari slave. (logika 0 = mengirim data ke slave, logika 1 = meminta data dari slave) ACK/NACK bit berfungsi sebagai pemberi kabar jika data frame ataupun address frame telah diterima receiver.

1.4.3  SPI (Series Peripheral Interface)
    Serial Peripheral Interface (SPI) merupakan salah satu mode komunikasi serial synchronous berkecepatan tinggi yang dimiliki oleh STM32F407VGT6 dan Raspberry Pi Pico. Komunikasi SPI membutuhkan 3 jalur utama yaitu MOSI, MISO, dan SCK, serta jalur tambahan SS/CS. Melalui komunikasi ini, data dapat saling dikirimkan baik antara mikrokontroler maupun antara mikrokontroler dengan perangkat periferal lainnya. 

• MOSI (Master Output Slave Input) Jika dikonfigurasi sebagai master, maka pin MOSI berfungsi sebagai output. Sebaliknya, jika dikonfigurasi sebagai slave, maka pin MOSI berfungsi sebagai input. 
• MISO (Master Input Slave Output) Jika dikonfigurasi sebagai master, maka pin MISO berfungsi sebagai input. Sebaliknya, jika dikonfigurasi sebagai slave, maka pin MISO berfungsi sebagai output. 
• SCLK (Serial Clock) Jika dikonfigurasi sebagai master, maka pin SCLK bertindak sebagai output untuk memberikan sinyal clock ke slave. Sebaliknya, jika dikonfigurasi sebagai slave, maka pin SCLK berfungsi sebagai input untuk menerima sinyal clock dari master. 
• SS/CS (Slave Select/Chip Select) Jalur ini digunakan oleh master untuk memilih slave yang akan dikomunikasikan. Pin SS/CS harus dalam keadaan aktif (umumnya logika rendah) agar komunikasi dengan slave dapat berlangsung.
Sinyal clock dialirkan dari master ke slave yang berfungsi untuk sinkronisasi. Master dapat memilih slave mana yang akan dikirimkan data melalui slave select, kemudian data dikirimkan dari master ke slave melalui MOSI. Jika master butuh respon data maka slave akan mentransfer data ke master melalui MISO.

1.4.4 Raspberry Pi Pico
Raspberry Pi Pico adalah papan rangkaian elektronik yang di dalamnya terdapat komponen utama chip mikrokontroler RP2040, yang dirancang dan diproduksi oleh Raspberry Pi Foundatio. Tidak seperti komputer mini raspberry Pi lainnya yang menjalankan sistem operasi seperti Linux, Pico dirancang untuk tugas-tugas yang lebih sederhana dan langsung (embedded system), seperti membaca sensor, mengontrol perangkat, atau melakukan pengolahan data pada tingkat hardware.
Adapun spesifikasi dari Raspberry Pi Pico adalah sebagai berikut:
Gambar 1. Arduino Uno

1.4.5 STM32F103C8
    STM32F103C8 adalah mikrokontroler berbasis ARM Cortex-M3 yang dikembangkan oleh STMicroelectronics. Mikrokontroler ini sering digunakan dalam pengembangan sistem tertanam karena kinerjanya yang baik, konsumsi daya yang rendah, dan kompatibilitas dengan berbagai protokol komunikasi. Pada praktikum ini, kita menggunakan STM32F103C8 yang dapat diprogram menggunakan berbagai metode, termasuk komunikasi serial (USART), SWD (Serial Wire Debug), atau JTAG untuk berhubungan dengan komputer maupun perangkat lain. Adapun spesifikasi dari STM32F4 yang digunakan dalam praktikum ini adalah sebagai berikut:
Gambar 3. STM32F103C8

A. BAGIAN-BAGIAN PENDUKUNG

1. Raspberry Pi Pico
1. RAM (Random Access Memory)
Raspberry Pi Pico dilengkapi dengan 264KB SRAM on-chip. Kapasitas RAM yang lebih besar ini memungkinkan Pico menjalankan aplikasi yang lebih kompleks dan menyimpan data lebih banyak.
2. Memori Flash Eksternal
Raspberry Pi Pico tidak memiliki ROM tradisional. Sebagai gantinya, ia menggunakan memori flash eksternal. Kapasitas memori flash ini dapat bervariasi, umumnya antara 2MB hingga 16MB, tergantung pada konfigurasi. Memori flash ini digunakan untuk menyimpan firmware dan program pengguna. Penggunaan memori flash eksternal pada Pico memberikan fleksibilitas lebih besar dalam hal kapasitas penyimpanan program.
3. Crystal Oscillator
Raspberry Pi Pico menggunakan crystal oscillator untuk menghasilkan sinyal clock yang stabil. Sinyal clock ini penting untuk mengatur kecepatan operasi mikrokontroler dan komponen lainnya.
4. Regulator Tegangan
Untuk memastikan pasokan tegangan yang stabil ke mikrokontroler.
5. Pin GPIO (General Purpose Input/Output):
Untuk menghubungkan Pico ke berbagai perangkat eksternal seperti sensor, motor, dan LED.

2. STM32
1. RAM (Random Access Memory)
STM32F103C8 dilengkapi dengan 20KB SRAM on-chip. Kapasitas RAM ini
memungkinkan mikrokontroler menjalankan berbagai aplikasi serta menyimpan data sementara selama eksekusi program.
2. Memori Flash Internal
STM32F103C8 memiliki memori flash internal sebesar 64KB atau 128KB, yang digunakan untuk menyimpan firmware dan program pengguna. Memori ini memungkinkan penyimpanan kode program secara permanen tanpa memerlukan media penyimpanan eksternal.
3. Crystal Oscillator
STM32F103C8 menggunakan crystal oscillator eksternal (biasanya 8MHz) yang bekerja dengan PLL untuk meningkatkan frekuensi clock hingga 72MHz. Sinyal clock yang stabil ini penting untuk mengatur kecepatan operasi mikrokontroler dan komponen lainnya.
4. Regulator Tegangan
STM32F103C8 memiliki sistem pengaturan tegangan internal yang memastikan pasokan daya stabil ke mikrokontroler. Tegangan operasi yang didukung berkisar antara 2.0V hingga 3.6V.
5. Pin GPIO (General Purpose Input/Output)
STM32F103C8 memiliki hingga 37 pin GPIO yang dapat digunakan untuk menghubungkan berbagai perangkat eksternal seperti sensor, motor, LED, serta komunikasi dengan antarmuka seperti UART, SPI, dan I²C.

Kamis, 08 Mei 2025

Laporan Akhir Modul 2 Percobaan 2 Praktikum Mikroprosesor dan Mikrokontroler






1. Prosedur [kembali]

    Langkah-langkah percobaan :

a. Tentukan percobaan dan kondisi yang akan dilakukan

b. Siapakan alat dan bahan yang akan digunakan

c. Rangkai Rangkaian pada Board sesuai gambar percobaan dengan komponen 7 input push button, Raspberry Pi Pico, 7 Resistor 220 Ohm, 7 Output LED hubungkan menggunakan jumper. 

d. Buatlah program micropython pada software Thony dengan konfigurasi Pin Input dan Output berdasarkan pada Pin GPIO Raspberry Pi Pico yang telah dirangkai sebelumnya.

e. Kemudian, buatlah program untuk menghasilkan Output LED sesuai kondisi yang telah ditentukan.

f.  Hubungkan Laptop dengan Raspberry Pi Pico 

g. Run Program, dan lihat output yang dihasilkan ketika push button ditekan



2. Hardware dan Diagram Blok [kembali]
        A. Hardware
            1. Rapsberyy Pi Pico




            2. Push Button







            3. LED



            4. Jumper

            5. Jumper




            6. Laptop



        B. Software
            1. Thonny IDE


          C. Blok Diagram



3. Rangkaian Simulasi dan Prinsip Kerja [kembali]
           A. Rangkaian Simulasi



            B. Rangkaian Percobaan




            C. Prinsip Kerja

    Rangkaian ini terdiri dari beberapa komponen,  yaitu Raspberry Pi Pico, 7 input Push button, 7 Resistor dan 7 output LED merah. Pada Raspberry terdapat 26 pin GPIO, dimana GPIO (General Purpose Input Output) adalah pin yang berfungsi sebagai input dan output untuk komponen yang memiliki tugasnya masing - masing. Pada raspberry juga terdapat tegangan sebesar 3.3 Volt, ground dan pin lainnya. Push button bekerja pada pull down, dimana saat tidak dialiri arus listrik akan berlogika 0 dan ketika di aliri aliran listrik akan berlogika 1. Masing - masing kaki atas push button dihubungkan ke VCC secara paralel sebagai input, lalu keluarannya akan disambungkan ke Pin GPIO Raspberry Pi Pico sebagai inputan, yaitu pada Pin [9,10,11,12,13,14,17]. LED merah ini mempunyai 2 kaki, dimana untuk masing - masing kaki katoda (-) LED dihubungkan ke ground secara paralel. Untuk masinng - masing kaki Anoda (+) dihubungkan ke masing - masing resistor, dimana resistornya bernilai 220 Ohm. dari resistor nanti dihubungkan ke Pin GPIO, dimana untuk ouput LED pada pin [2,3,4,5,6,7,16].
  
  Rangkaian dihubungkan pada board, setelah itu lanjut ke Program. Dimana program ini dibuat pada software THONNY. program ini menggunakan bahasa Python sebagai berikut:

1) Impor Library
- machine.Pin: Digunakan untuk mengakses pin GPIO Raspberry Pi Pico.
- time: Digunakan untuk memberikan delay agar menghindari efek bouncing pada tombol.

2)Deklarasi Pin GPIO
- led_pins: Menyimpan nomor pin GPIO yang digunakan untuk LED.
- button_pins: Menyimpan nomor pin GPIO yang digunakan untuk push button.

3)Inisialisasi LED sebagai Output
    LED dikonfigurasi sebagai output menggunakan Pin.OUT, sehingga bisa dinyalakan (on()) atau dimatikan (off()).

4) Inisialisasi Push Button sebagai Input dengan Pull-Down Resistor
    Push button dikonfigurasi sebagai input (Pin.IN) dengan pull-down resistor (Pin.PULL_DOWN), sehingga default-nya LOW (0) dan berubah menjadi HIGH (1) saat tombol ditekan.

5) Loop Utama (While Loop)
- Program terus berjalan dalam loop tanpa henti.
- Mengecek setiap push button menggunakan for i in range(7).
- Jika tombol ditekan (value() == 1), LED yang sesuai dinyalakan dengan leds[i].on().
- Jika tombol tidak ditekan, LED dimatikan dengan leds[i].off().
- print() digunakan untuk menampilkan status tombol yang ditekan ke terminal.

6) time.sleep(0.05): Delay kecil untuk menghindari efek bouncing pada tombol.
Dengan kode ini, setiap tombol yang ditekan akan menyalakan satu LED yang sesuai, dan saat tombol dilepas, LED akan mati kembali.

Setelah program selesai dibuat, hubungkan Laptop dengan Raspberry Pi Pico, Lanjut ke simulasi, dimana:
- Raspberry Pi Pico terhubung dengan 7 LED dan 7 push button.
- Saat sebuah tombol ditekan, LED yang sesuai menyala.
- Saat tombol dilepas, LED akan mati kembali.
- Output pada terminal menunjukkan tombol mana yang ditekan.



4. Flowchart dan Listing Program [kembali]
        A. Flowchart




        B. Listing Program  

from machine import Pin, PWM, ADC
from time import sleep
import utime

# Inisialisasi
pot = ADC(26)  # GP26 = ADC0
servo = PWM(Pin(16))
buzzer = PWM(Pin(14))

# Konfigurasi PWM
servo.freq(50)  # 50 Hz untuk servo
buzzer.freq(1000)  # Set awal frekuensi buzzer

def map_value(value, in_min, in_max, out_min, out_max):
    return int((value - in_min) * (out_max - out_min) / (in_max - in_min) + out_min)

while True:
    val = pot.read_u16()  # Nilai ADC 16-bit (0 - 65535)
   
    # Membaca nilai potensiometer
    pot_value = pot.read_u16()
   
    # Karena kamu mau *berlawanan jarum jam* saat potensiometer membesar,
    # maka kita balik mappingnya: besar pot → kecil sudut
    angle = map_value(pot_value, 0, 65535, 180, 0)
   
    # Konversi sudut ke duty cycle untuk servo
    duty = map_value(angle, 0, 180, 1500, 7500)
    servo.duty_u16(duty)
   
    # Print untuk debugging
    print(f"Pot Value: {pot_value}, Angle: {angle}, Duty: {duty}")
   
    # === Buzzer Control ===
    if 0 < angle < 180:
        freq = int(200 + (val / 65535) * (2000 - 200))  # Mapping frekuensi
        buzzer.freq(freq)
        buzzer.duty_u16(30000)  # Buzzer berbunyi
    else:
        buzzer.duty_u16(0)  # Buzzer mati
   
    sleep(0.05)

          
5. Analisa [kembali]





6. Video Demo [kembali]


7. Download file [kembali]

LAPORAN AKHIR DEMO PROJECT PRAKTIKUM MIKROPROSESOR & MIKROKONTROLER

[KEMBALI KE MENU SEBELUMNYA] DAFTAR ISI 1. Pendahuluan 2. Tujuan 3. Alat dan Komponen 4. Landasan Teori 5. Flowchart dan ...