Jumat, 28 Maret 2025

Laporan Akhir Modul 1 Percobaan 2 Praktikum Mikroprosesor dan Mikrokontrole






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 kondisi 6 dengan komponen 1 input push button, 1 sensor infrared STM32F103C8, 3 Resistor 220 Ohm, 1 Output LED-RGB dam 1 Buzzer  hubungkan menggunakan jumper. 

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

e. Kemudian, buatlah program untuk menghasilkan Output LED-RGB dan Buzzer 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-RGB


            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

    
        Rangkaian ini terdiri dari beberapa komponen, yakni mikrokontroler STM32F103C8, sensor infrared, buzzer, led-rgb, jumper, push button dan resistor 220 ohm. Pada rangkaian, yang menjadi inputan berupa sensor infrared dan push button sementara buzzer dan led-rgb menjadi outputnya. Pada rangkaian sensor infrared yang memiliki 3 kaki yang perlu terhubung dengan dengan sumber daya (3,3V), ground dan output data berupa apakah terdeteksi objek (logika 1)  atau tidak. Lalu inputan kedua berupa push button yang ketika ditekan memberi logika 1. Lalu dari inputan yang terhubung oleh jumper dihubungkan dengan mikrokontroler dengan memperhatikan port berapa saja yang terhubung agar dapat di deklarasikan oleh program nantinya. Sesuai kondisi yang diinginkan, output yang diharapkan yakni: 

- Jika Infrared aktif (mendeteksi objek), maka led akan berwarna hijau diiringi dengan buzzer berbunyi.
- Jika Button ditekan (logika 1), maka led akan berwarna merah diiringi dengan bunyi buzzer. 
- Jika kedua inpuitan dalam kondisi aktif, maka led-rgb akan berwarna jingga/kuning dengan iringan bunyi buzzer. 


          Rangkaian dihubungkan pada board, setelah itu lanjut ke Program. Dimana program ini dibuat pada software STM32Cube IDE. Program ini menggunakan bahasa Python sebagai berikut:

  1. Inisialisasi Sistem:

    • HAL_Init(); → Inisialisasi hardware abstraction layer.

    • SystemClock_Config(); → Konfigurasi clock sistem menggunakan HSI (High-Speed Internal).

    • MX_GPIO_Init(); → Inisialisasi GPIO.

  2. Loop utama (while (1)):

    • Membaca status tombol dan sensor IR:

      uint8_t button_status = HAL_GPIO_ReadPin(GPIOB, BUTTON_Pin);
      uint8_t ir_status = HAL_GPIO_ReadPin(GPIOB, IR_Pin);
      
    • Reset output GPIO (LED & Buzzer):

      HAL_GPIO_WritePin(GPIOA, GREEN_Pin | RED_Pin | BUZZER_Pin, GPIO_PIN_RESET);
      
    • Jika tombol ditekan (BUTTON_Pin bernilai GPIO_PIN_SET):

      if (button_status == GPIO_PIN_SET)
      {
          HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET);
          HAL_GPIO_WritePin(GPIOA, BUZZER_Pin, GPIO_PIN_SET);
      }
      

      → LED merah menyala dan buzzer berbunyi.

    • Jika sensor IR mendeteksi sesuatu (IR_Pin bernilai GPIO_PIN_SET):

      if (ir_status == GPIO_PIN_SET)
      {
          HAL_GPIO_WritePin(GPIOA, GREEN_Pin, GPIO_PIN_SET);
          HAL_GPIO_WritePin(GPIOA, BUZZER_Pin, GPIO_PIN_SET);
      }
      

      → LED hijau menyala dan buzzer berbunyi.

    • Delay 100ms untuk debounce tombol/sensor.

  3. Konfigurasi Clock (SystemClock_Config()):

    • Menggunakan HSI (High-Speed Internal) 16MHz sebagai sumber clock.

    • Tidak menggunakan PLL.

    • Mengatur pembagian clock untuk AHB, APB1, dan APB2.

  4. Inisialisasi GPIO (MX_GPIO_Init()):

    • Output:

      • RED_Pin, GREEN_Pin, BUZZER_Pin, BLUE_Pin sebagai push-pull output.

    • Input:

      • BUTTON_Pin dan IR_Pin sebagai input tanpa pull-up/pull-down.

  5. Error Handler (Error_Handler()):

    • Menonaktifkan interrupt dan masuk ke loop infinite jika terjadi error.


Peningkatan & Perbaikan yang Bisa Dilakukan

  1. Tambahkan debounce untuk tombol

    • Saat ini, tombol bisa mendeteksi banyak input akibat bouncing. Bisa ditambahkan debounce software.

    if (button_status == GPIO_PIN_SET)
    {
        HAL_Delay(50); // Delay debounce
        if (HAL_GPIO_ReadPin(GPIOB, BUTTON_Pin) == GPIO_PIN_SET)
        {
            HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET);
            HAL_GPIO_WritePin(GPIOA, BUZZER_Pin, GPIO_PIN_SET);
        }
    }
    
  2. Gunakan else if untuk menghindari kondisi tumpang tindih

    • Jika tombol dan IR aktif bersamaan, LED hijau & merah bisa berkedip tidak stabil. Bisa diubah menjadi:

    if (button_status == GPIO_PIN_SET)
    {
        HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOA, BUZZER_Pin, GPIO_PIN_SET);
    }
    else if (ir_status == GPIO_PIN_SET)
    {
        HAL_GPIO_WritePin(GPIOA, GREEN_Pin, GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOA, BUZZER_Pin, GPIO_PIN_SET);
    }
    
  3. Matikan buzzer jika tidak ada input

    else
    {
        HAL_GPIO_WritePin(GPIOA, BUZZER_Pin, GPIO_PIN_RESET);
    }

Setelah program selesai dibuat, hubungkan Laptop dengan STM32F103C8, Lanjut ke simulasi, dimana:

- STM32F103C8 terhubung dengan 1 LED-RGB, Buzzer, push button dan sensor infrared.
- 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  

#include "main.h" void SystemClock_Config(void); static void MX_GPIO_Init(void); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); while (1) {
uint8_t button_status = HAL_GPIO_ReadPin(GPIOB, BUTTON_Pin);
uint8_t ir_status = HAL_GPIO_ReadPin(GPIOB, IR_Pin);
HAL_GPIO_WritePin(GPIOA, GREEN_Pin | RED_Pin | BUZZER_Pin,
GPIO_PIN_RESET);
if (button_status == GPIO_PIN_SET)
{
HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, BUZZER_Pin, GPIO_PIN_SET);
}
if (ir_status == GPIO_PIN_SET)
{
HAL_GPIO_WritePin(GPIOA, GREEN_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, BUZZER_Pin, GPIO_PIN_SET);
}
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_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
HAL_GPIO_WritePin(GPIOA, RED_Pin|GREEN_Pin|BUZZER_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, GPIO_PIN_RESET);
GPIO_InitStruct.Pin = RED_Pin|GREEN_Pin|BUZZER_Pin;
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);
GPIO_InitStruct.Pin = BLUE_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(BLUE_GPIO_Port, &GPIO_InitStruct);
GPIO_InitStruct.Pin = BUTTON_Pin|IR_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
void Error_Handler(void)
{
__disable_irq();
while (1)
{
 
}
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t *file, uint32_t line)
{
}
#endif       

    

5. Analisa [kembali]
       



6. Video Demo [kembali]



7. Download file [kembali]

Laporan Akhir Modul 1 Percobaan 1 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 import time # Daftar GPIO untuk LED dan push button led_pins = [2, 3, 4, 5, 6, 7, 16] # Output LED button_pins = [9, 10, 11, 12, 13, 14, 17] # Input dari push button # Inisialisasi LED sebagai output leds = [Pin(pin, Pin.OUT) for pin in led_pins] # Inisialisasi push button sebagai input dengan pull-down buttons = [Pin(pin, Pin.IN, Pin.PULL_DOWN) for pin in button_pins] while True: for i in range(7): if buttons[i].value() == 1: # Jika push button ditekan leds[i].on() # Nyalakan LED else: leds[i].off() # Matikan LED time.sleep(0.05) # Delay untuk debounce sederhana
           

    

5. Analisa [kembali]
       




6. Video Demo [kembali]


7. Download file [kembali]

Minggu, 23 Maret 2025

MODUL 1 PRAKTIKUM MIKROPROSESOR DAN MIKROKONTROLER




MODUL 1
GENERAL INPUT DAN OUTPUT


    a) Asistensi dilakukan 1x

    b) Praktikum dilakukan 1x

2. Tujuan[Kembali]

    a) Memahami cara penggunaan input dan output digital pada mikrokontroler 

    b) Menggunakan komponen input dan output sederhana dengan Raspberry Pi Pico 

    c) Menggunakan komponen Input dan Output sederhana dengan STM32F103C8

3. Alat dan Bahan[Kembali]

    a) Raspberry Pi Pico 

   
     b) STM32F103C8 

    
    c) LED 



    d) Push Button 




    e) LED RGB 

    

    f) Touch Sensor 



    g) PIR Sensor 


    h) Sensor Infrared 

    

    i) Buzzer 


    j) Breadboard 




    k) Resistor





4. Dasar Teori[Kembali]

1.4.1 General Input Output 

        Input adalah semua data dan perintah yang dimasukkan ke dalam memori untuk diproses lebih lanjut oleh mikroprosesor. Sebuah perangkat input adalah komponen piranti keras yang memungkinkan user atau pengguna memasukkan data ke dalam mikroprosesor. Output adalah data hasil yang telah diproses. Perangkat output adalah semua komponen piranti keras yang menyampaikan informasi kepada orang-orang yang menggunakannya.

        Pada STM32 dan Raspberry Pi Pico pin input/output terdiri dari digital dan analog yang jumlah pin-nya tergantung jenis mikrokontroller yang digunakan. Input digital digunakan untuk mendeteksi perubahan logika biner pada pin tertentu. Adanya input digital memungkinkan mikrokontroler untuk dapat menerjemahkan 0V menjadi logika LOW dan 5V menjadi logika HIGH. Membaca sinyal digital pada mikrokontroller dapat menggunakan sintaks digitalRead(pin);

        Output digital terdiri dari dua buah logika, yaitu kondisi logika HIGH dan kondisi logika LOW. Untuk menghasilkan output kita dapat menggunakan sintaks digitalWrite(pin,nilai); yang sebelumnya pin sudah diset ke mode OUTPUT, lalu parameter kedua adalah set nilai HIGH atau LOW. Apabila pin diset dengan nilai HIGH, maka voltase pin tersebut akan diset ke 5V atau 3.3V dan bila pin diset ke LOW, maka voltase pin tersebut akan diset ke 0V


1.4.2 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:





1.4.3 STM32103C8 

    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:


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. 

Laporan Akhir Modul 1 Percobaan 2 Praktikum Mikroprosesor dan Mikrokontrole

[KEMBALI KE MENU SEBELUMNYA] DAFTAR ISI 1. Prosedur 2. Hardware dan Diagram Blok 3. Rangkaian Simulasi dan Prinsip Kerja 4. F...