Tugas Pendahuluan 2 Modul 1
(Percobaan 6 kondisi 4)
1. Prosedur[Kembali]
2. Buat program untuk mikrokontroler STM32F103C8 di software STM32 CubeIDE.
3. Compile program dalam format hex, lalu upload ke dalam mikrokontroler.
4. Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.
2. Hardware dan Diagram Blok[Kembali]
3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]
Lau save project dan kemudian akan ditampilkan halaman pemrograman. Disini sudah langsung tersedia beberapa program. Untuk pemrogramannya dimulai dari #include “main.h” yang merupakan fungsi utamanya. Yang perlu ditambahkan disini adalah codingan pada bagian loopnya, yang terletak di dalam kurung kurawal pada bagian while. Program ini menunjukkan dimana pada kondisi awal, seluruh outputnya dalam keadaan reset atau tidak aktif. Disini digunakan fungsi if yang mana jika sensor infrared berlogika 1, maka outputnya akan mengaktifkan RGB LED berwarna merah dan juga mengaktifkan buzzer. Kemudian jika push buttonnya ditekan atau berlogika 1, maka outputnya akan mengaktifkan RGB LED berwarna hijau dan juga mengaktifkan buzzer.
Setelah programnya selesai, dilanjutkan dengan mengcompile programnya ke dalam tipe hex, dan build program tersebut sehingga menghasilkan file dengan tipe hex. Kemudian upload file hex tersebut ke dalam mikrokontroler pada proteus. Setelah rangkaiannya dijalankan, kondisi awal adalah ketika sensor infrared diberi logika 0 dan push button tidak ditekan, maka output yang ditampilkan adalah RGB LED dan buzzernya tidak aktif. Ketika sensor infrared berlogika 1, maka outputnya adalah mengaktifkan RGB LED berwarna merah dan juga mengaktifkan buzzer, sedangkan jika push buttonnya ditekan, maka outputnya adalah mengaktifkan RGB LED berwarna biru dan juga mengaktifkan buzzer. Kemudian apabila sensor infrared diberi logika 1 dan push button ditekan, maka output yang ditampilkan adalah RGB LED gabungan merah dan hijau yaitu warna kuning dan buzzernya akan aktif.
4. Flowchart dan Listing Program[Kembali]
#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, RED_Pin | BUZZER_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, BLUE_Pin, GPIO_PIN_RESET); // BLUE ada di GPIOB
if (ir_status == GPIO_PIN_SET)
{
HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET); // LED Red ON
HAL_GPIO_WritePin(GPIOA, BUZZER_Pin, GPIO_PIN_SET); // Buzzer ON
}
if (button_status == GPIO_PIN_SET)
{
HAL_GPIO_WritePin(GPIOB, BLUE_Pin, GPIO_PIN_SET); // LED Blue ON (GPIOB)
HAL_GPIO_WritePin(GPIOA, BUZZER_Pin, GPIO_PIN_SET); // Buzzer ON
}
HAL_Delay(100); // Delay kecil untuk stabilisasi
}
}
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
0 komentar:
Posting Komentar