Anda di halaman 1dari 14

PRAKTIKUM MIKROKONTROLLER

PENGAPLIKASIAN PWM

Dibuat Oleh :
Ircham Badrus Rahmadani
2321600024
2 D4 Elektro Industri A

Dosen Pengampu :
Farid Dwi Murdianto, S.ST ., M.T

PROGRAM STUDI D4 TEKNIK ELEKTRO INDUSTRI

POLITEKNIK ELEKTRONIKA NEGERI SURABAYA

TAHUN AJARAN 2022-2023


I. TUJUAN
1. Mahasiswa mampu menggunakan software STM32 CubeMX dan Keil uVision
2. Mahasiswa mampu mengintegrasikan program STM32 dengan Hardware
3. Mahasiswa mampu memprogram dengan STM32 di keil uVision
4. Mahasiswa mampu membuat aplikasi sederhana yang ditampilkan pada LCD
Mikrokontroler menggunakan Matrix Keypad 4 x 4
5. Mahasiswa mampu mengaplikasikan PWM pada modul Hardware dengan aplikasi
sederhana

II. ALAT DAN BAHAN


1. Laptop pribadi
2. Software STM32CubeMX
3. ARM Keil
4. Modul STM32F407
5. LCD Character
6. Kabel konektor dan kabel serial

III. LANGKAH PERCOBAAN


1. Buka software STM32 CubeMX

2. Lalu klik File dan pilih New Project


3. Pilih MCU/MPU Selector, kemudian pilih Series.

4. Muncul beberapa jenis dari package dan core yang telah dipilih lalu pilih STM32F407VG.

5. Klik Start Project.


6. Klik Pinout & Configuration, kemudian klik System Core dan pilih RCC. Lalu pada High
Speed Clock (HSE) pilih Crsytal/Ceramic Resonator

7. Lalu pada bagian kaki chip mikrokontroler tersebut, kemudian klik dan atur kaki pin
sebagai berikut :
• Kaki PD0 – PD7 = Sebagai kaki output
• Kaki PE8 – PE11 = Sebagai kaki input (dengan label “Kolom”)
• Kaki PE12 – PE15 = Sebagai kaki output (dengan label “Baris”)
8. Setelah kaki pin diatur maka akan tampil seperti gambar dibawah ini.

9. Kemudian isi sesuai dengan parameter berikut ini.

10. Pada menubar klik “system core” dan pilih “GPIO” dengan aturan GPIO output level High
11. Kemudian klik “Generator Code”

12. Selanjutnya klik open project

13. Setelah dialihkan pada software arm keil uVision, maka akan tampil program file main.c

14. Buat program yang diinginkan pada MX GPIO Init


15. Sambungkan USB dari laptop ke moudl mikrokontroler. Kemudian klik “Build” dan
“Load” mpodul mikrokontroler siap bekerja. Lalu tekan tombol “Reset” pada modul
untuk menampilkan hasil program di layer LCD
IV. PROGRAM
#include "main.h"

/* Private includes ----------------------------------------------------------*/


/* USER CODE BEGIN Includes */
#include "lcd_character.h"
#include "stm32f4xx_hal.h"
#include "stdio.h"
#include "stdlib.h"
#include "keypad_4x4.h"

void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_TIM2_Init(void);

/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/


/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
char buffer[20];
char key_val;
int a;
int pass=123;
HAL_Init();
/* USER CODE BEGIN Init */

/* Configure the system clock */


SystemClock_Config();

/* Initialize all configured peripherals */


MX_GPIO_Init();
MX_TIM2_Init();
/* USER CODE END 2 */
lcd_init();
keypad_init();
lcd_gotoxy(0,0);
lcd_puts("Test Point");
HAL_Delay(3000);
lcd_clear();
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_4);
/* Infinite loop */
/* USER CODE BEGIN WHILE */
MX_GPIO_Init();
MX_TIM2_Init();
/* USER CODE END 2 */
lcd_init();
keypad_init();
lcd_gotoxy(0,0);
lcd_puts("Test Point");
HAL_Delay(3000);
lcd_clear();
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_4);
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
#define maxdigit 3
static unsigned char index = 0;
static char bufferkey[maxdigit+1];
static short int datakey;

lcd_gotoxy (0,0); lcd_puts("MASUKKAN PASSWORD !");


lcd_gotoxy (0,1); lcd_puts("PASSWORD : ");

key_val = keypad_get_key_value();

sprintf(buffer, "PASSWORD : %c", keypad_get_key_value());


lcd_gotoxy (0,1);
lcd_puts(buffer);
if(key_val >= '0' && key_val <= '9')
{
if(index < maxdigit)
{
bufferkey[index] = key_val;
index++;
HAL_Delay(200);
}
} else if(key_val == 'D')
{
if(index>0)
{
index--;
bufferkey[index] = ' ';
HAL_Delay(200);
}
} else if(key_val == '#')
{
datakey = atoi(bufferkey);

// GPIOE->ODR = datakey;
bufferkey[0] = ' ';
bufferkey[1] = ' ';
bufferkey[2] = ' ';
index=0;
HAL_Delay(50);
if(datakey == pass)
{
lcd_clear();
lcd_gotoxy (1,0);
lcd_puts(" PASSWORD BENAR");
lcd_gotoxy (1,1);
lcd_puts("SILAHKAN MASUK");
HAL_GPIO_WritePin(Motor1_CCW_GPIO_Port,
Motor1_CW_Pin, GPIO_PIN_SET);
TIM2 -> CCR3 = 10000;
HAL_Delay(2000);

lcd_clear();
lcd_gotoxy (1,0);
lcd_puts("PINTU TERTUTUP");
lcd_gotoxy (1,1);
lcd_puts(" INPUT ULANG");
HAL_GPIO_WritePin(Motor1_CCW_GPIO_Port, Motor1_CW_Pin,
GPIO_PIN_RESET);
HAL_GPIO_WritePin(Motor1_CCW_GPIO_Port,
Motor1_CCW_Pin, GPIO_PIN_SET);
TIM2 -> CCR3 = 5000;
HAL_Delay(2000);
HAL_GPIO_WritePin(Motor1_CCW_GPIO_Port,
Motor1_CCW_Pin, GPIO_PIN_RESET);
}
else{
lcd_clear();
lcd_gotoxy (1,4);
lcd_puts("PASSWORD SALAH");
HAL_Delay(2000);
}
lcd_clear();
}
lcd_gotoxy(11,1);
lcd_puts (bufferkey);
}
V. HASIL PERCOBAAN
1. Ketika Masukkan Password Benar

2. Ketika Masukkan Password Salah Pertama kali


3. Ketika Masukkan Password Salah Kedua kali
4. Ketika Masukkan Password Salah Ketiga Kali

VI. ANALISA PERCOBAAN


Pada percobaan kali ini, saya mengimplementasikan PWM dengan keypad dan
LCD, dengan ide program pagar otomatis. Dimana ketika orang ingin masuk maka harus
menginputkan pin yang benar dimana pin yang benar dideklarasikan pada program. Timer
pada mikrokontroler diaktifkan pada pin PB11-12. Berfungsi untuk mengatur siklus kerja
(duty cycle) dan frekuensi sinyal. Siklus kerja mengacu pada persentase waktu di mana
sinyal PWM dalam kondisi aktif (tinggi), sedangkan frekuensi mengacu pada jumlah
siklus yang dihasilkan per detik. Timer digunakan untuk menghitung waktu dan
mengontrol pembentukan sinyal PWM yang akurat.
Untuk menginisialisasi timer PWM dapat memanggil fungsi
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_4); Fungsi HAL_TIM_PWM_Start
(&htim2, TIM_CHANNEL_4) adalah fungsi dari library HAL (Hardware Abstraction
Layer) pada mikrokontroler STM32. Fungsi ini digunakan untuk mengaktifkan output
PWM pada saluran (channel) tertentu dari Timer 2 (TIM2). Dalam contoh yang saya
berikan, fungsi HAL_TIM_PWM_Start() digunakan untuk mengaktifkan output PWM
pada saluran ke-4 (TIM_CHANNEL_4) dari Timer 2 yang dikendalikan oleh variabel
htim2.
Kemudian Untuk memakai library keypad maka terlebih dahulu memiliki fileh .c
dan .h milik keypad yang disatukan di satu file microcontroller pada file core. Kemudian
file keypad.h diletakkan pada file inc, sedangkan file keypad.c diletkkan pada file src.
Untuk mengaktifkan fungsi Keypad 4x4 dan LCD display tersebut saya memberikan
library yaitu #include “lcd_character.h” dan #include “keypad_4x4.h”. Pada tampilan
awal LCD character yang ditampilkan ialah pada baris 1 "MASUKKAN PASSWORD"
dan pada baris 2 "PASSWORD : " menggunakan fungsi gotoxy(..) dan lcd_puts(). Lalu,
terdapat pula fungsi keypad_get_key_value() yang berfungsi sebagai penyimpan data –
data karakter. Fungsi keypad_get_key_value() tersebut akan disimpan dalam variable
key_val dengan tipe data char.
Dalam pemrosesannya, Karakter – karakter tersebut dibatasi oleh angka 0 sampai
9, karakter ‘D’ sebagai fungsi delete (hapus) dan karakter ‘#’ sebagai fungsi Enter
(masuk). Terlihat bahwa karakter sandi atau password yang dimasukkan hanya maksimal
3digit pada fungsi if (index < maxdigit); dengan inisialisasinya yakni #define maxdigit 3.
Dalam pengaplikasiaannya, relay akan aktif apabila password yang diberikan benar.
Sehingga, saya menginisialisasi password tersebut dengan int pass=123. Maka, apabila
menekan tombol dengan memasukkan angka digit pada keypad “123” dan kemudian
menekan tombol ‘#’ ini akan diproses di dalam else if (key_val == '#') dan didalam
program tersebut akan ada beberapa fungsi atoi yang fungsinya untuk mengkonversi nilai
string (berbentuk char array) pada variable – variable array dari nilai indeks variable
bufferkey menjadi nilai integer dan disimpan ke variable datakey bertipe integer. Selain
itu, terdapat fungsi if dan else dalam program else if (key_val == '#') yang mana apabila
fungsi if tersebut terpenuhi LCD akan menampilkan tulisan “PASSWORD BENAR”
pada baris 1, dan tulisan “Silahkan Masuk” pada baris 2 bersamaan dengan relay aktif
yang ditandai oleh LED merah menyala selama 5 detik. Kemudian, setelah waktu 5 detik
terpenuhi akan mengclear tulisan tersebut menggunakan lcd_clear() dan diganti dengan
tulisan “Pintu Tertutup” pada baris 1, dan tulisan “Input ulang” pada baris 2 bersamaan
dengan relay off yang ditandai oleh LED merah padam selama 5 detik. Setelah waktu 5
detik terpenuhi, proses tersebut akan kembali ke tampilan awal LCD.
Dilakukan percobaan kembali ketika salah dalam memasukkan sandi atau password
pada keypad. Apabila dimasukkan tombol digit pada keypad “123” dan kemudian
menekan tombol ‘#’, maka proses else dalam program else if (key_val == '#') bekerja
dengan menampilkan tulisan “PASSWORD SALAH” pada LCD selama 1 detik dan
kemudian kembali ke tampilan awal LCD.
VII. KESIMPULAN
Berdasarkan hasil praktikum yang telah dilakukan dan Analisa yang telah dibuat maka
dapat disimpulkan sebagai berikut:
1. Untuk mengaktifkan fungsi LCD display diperlukan library seperti #include
“lcd_character.h” yang mana di dalam library tersebut terdapat beberapa fungsi yang
digunakan sebagai berikut :
a. lcd_init() berfungsi untuk menginisialisasi tampilan pada layar lcd supaya dapat
menampilkan text dilayarnya.
b. lcd_puts(“..”) berfungsi menampilkan karakter huruf dalam bentuk string yang
akandigunakan untuk menampilkan text pada LCD display.
c. lcd_gotoxy (a,b) berfungsi untuk mengatur posisi karakter pada LCD display.
Untuk (a) difungsikan pada kolom sedangkan (b) difungsikan pada baris. Karena
LCD yang digunakan 16x2, maka untuk memprogram LCD tersebut pada kolom
(a) dimulai dari bit 0 -15 sedangkan pada baris (b) dimulai dari 0 – 1.
d. lcd_clear() berfungsi untuk menghapus posisi karakter layar LCD display
2. Untuk mengaktifkan fungsi Keypad 4x4 diperlukan library seperti #include
“keypad_4x4.h” yang mana di dalam library tersebut terdapat fungsi penting yakni
keypad_get_key_value(). Fungsi tersebut menyimpan data – data character sesuai
dengan tombol digit pada keypad.
3. Terdapat fungsi lain diantaranya :
a. #define variable konstanta; fungsinya untuk membuat deklarasi konstanta (nilai
yang tidak dapat diubah).
b. Fungsi atoi berfungsi untuk mengkonversi dari dari variable string (char array) ke
bentuk variable integer (int).
4. Dalam program ini banyak yang difungsikan sebagai kondisi persyaratan diantara if,
else, dan else if.
5. Maksimal digit yang dimasukkan untuk password berjumlah 3 digit. Oleh karena itu,
digit password yang benar yakni “158”.Dengan prinsip membuka dan menutup pintu
garasi secara otomatis dengan mengendalikan/mengatur kecepatan motor DC pada
proses membuka berputar secara CW dan menutup berputar secara CCW dengan delay
waktu masing – masing 2 detik.

Anda mungkin juga menyukai