a) Prosedur[Kembali]

  1. Menyusun rangkaian sesuai pada percobaan 6 pada modul di breadboard.
  2. Listing program pada software STM32CubeIDE, sesuaikan konfigurasi pin di program dengan pin yang digunakan pada STM32F103C8 di breadboard.
  3. Generate code pada software untuk mendapatkan file program C, lalu masukkan algoritma rangkaian ke dalam file.
  4. Konversikan file ke dalam ekstensi .hex.
  5. Masukkan file dengan ekstensi .hex ke dalam STM32F103C8 di rangkaian.
  6. Simulasikan/jalankan rangkaian pada breadboard.
  7. Cek apakah setiap komponen rangkaian pada breadboard berfungsi dan berjalan sesuai algoritma program.
  8. Jika terdapat kendala atau masalah pada rangkaian maka lakukan problem solving terlebih dahulu hingga rangkaian berjalan sebagaimana mestinya.
  9. Selesai.

b) Hardware dan Diagram Blok[Kembali]



Gambar 1. Hardware rangkaian percobaan 6.

Gambar 2. Hardware rangkaian percobaan 6.


c) Rangkaian Simulasi dan Prinsip Kerja[Kembali]


Sistem terdiri atas 2 inputan, yaitu dari sensor infrared dan push button, dengan 4 buah pin output diantaranya adalah PA6, PA7, PB0 yang terhubung menuju pin RGB dari LED, dan pin PA8 yang terhubung ke buzzer.

Buzzer akan menyala selama salah satu atau kedua inputan berlogika 1. Sedangkan ketika sensor infrared mendeteksi objek (berlogika 1) dan push button mati (berlogika 0) maka LED akan berwarna hijau, lalu jika sensor infrared tidak mendeteksi objek (berlogika 0) dan push button aktif (berlogika 1) maka LED akan berwarna merah. Dan jika kedua inputan berlogika 1 maka LED akan berwarna campuran hijau dan merah.


d) Flowchart dan Listing Program[Kembali]


  • Flowchart



Gambar 3. Flowchart

  • 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



e) Video Demo[Kembali]

Video percobaan.


f) Analisa[Kembali]

1. Analisa bagaimana pengaruh penggunaan/pemilihan GPIO pada STM32

    Jawab:

Pada percobaan kedua, yaitu menggunakan STM32. Pertama GPIOA, digunakan untuk LED merah (RED_Pin), LED hijau (GREEN_Pin), dan buzzer (BUZZER_Pin). GPIOB, digunakan untuk input push button (BUTTON_Pin) dan sensor IR (IR_Pin). Hal ini terdapat perbedaan yang mana GPIOA dikonfigurasikan untuk output yaitu LED dan buzzer lalu GPIOB dikonfigurasikan untuk input push button dan sensor infrared. Perbedaan pada konfigurasi ini dapat dilakukan untuk memudahkan dalam akses wiring.

2. Analisa bagaimana STM32 menerima inputan dan menghasilkan output

    Jawab:

Terlebih dahulu dideklarasikan sekaligus inisialisasi pin input/outputnya, yang mana juga disertakan tipe data 'uint8'. Setelahnya, 't button_status' artinya adalah untuk memasukkan nilai dari variabel yang akan dideklarasi. Di sini juga memasukkan library HAL pada deklarasi. Lalu ditentukan pula port A/B pada konfigurasi beserta memasukkan nama konfigurasinya seperti 'BUTTON-Pin'. Lalu untuk membacanya sebagai output digunakan 'GPIO_WritePin' dan di sini akan dibaca nilai logikanya antara 'SET' (1)  dengan 'RESET' (0).

3. Analisa bagaimana program deklarasi pin I/O pada STM32

    Jawab:

Karena pada program menggunakan bahasa C, pada deklarasi terlebih dahulu memasukkan tipe data 'uint8' didepan, lalu komponen/variabel 'membaca' status dari variabel dengan karakter 'GPIO_ReadPin', yang mana dalam fungsi tersebut menyertakan konfigurasi port A/B dan juga nama konfigurasinya pada rangkaian:

uint8_t button_status = HAL_GPIO_ReadPin(GPIOB, BUTTON_Pin);
uint8_t ir_status = HAL_GPIO_ReadPin(GPIOB, IR_Pin);

untuk deklarasi output tinggal mengubah 'ReadPin' menjadi 'WritePin', lalu tipe data dan komponen tidak perlu lagi dimasukkan:

HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, BUZZER_Pin, GPIO_PIN_SET);

4. Analisa bagaimana program dalam analisa metode pendeteksian input pada STM32

    Jawab:

Untuk pendeteksian input yaitu bergantung pada deklarasi awal, dimana ada fungsi GPIO_ReadPin yang artinya variabel akan dibaca/diinput nilainya.

5. Analisa Fungsi HAL_Delay(100) pada STM32

    Jawab:

Artinya program akan menunggu selama 100ms dalam setiap loopnya, sehingga respo dapat lebih lambat terhadap perubahan input tombol (button) atau sensor (IR). Hal ini berfungsi untuk memberi jeda waktu pada CPU untuk mencegah perubahan output yang terlalu cepat.

g) Download File[Kembali]