LCD 4 bit + ADC dengan STM32

STM32 memiliki kemampuan untuk memunculkan output pada LCD dengan mode 4bit maupun 8bit. Jika menggunakan mode 4 bit maka hanya 4 pin yang digunakan sebagai output pada STM32.

Pada tutorial ini konfigurasi pin yang digunakan adalah sebagai berikut:

LCD STM32
RS PB11
RW PB10
EN PB1
D4 PB0
D5 PA7
D6 PA6
D7 PA5

Berikut adalah langkah-langkah membuat program LCD 4 bit dengan STM32.

  1. Buat Project STM32 pada STM32CubeIDE

  2. Pilih part STM32F103C8T6

  3. Berikan nama project dengan sesuai

  4. Pada bagian Pinout & Configuration > RCC, atur HSE dan LSE ke Crystal/Ceramic Resonator

  5. Pada bagian SYS, Debug jadi Serial Wire dan Timebase Source jadi SysTick

  6. Pada TIM1 Clock Source jadi Internal Clock

  7. Beralih dulu ke Clock Configuration, ubah HCLK menjadi 72

  8. Kembali ke TIM1, Prescaller (PSC - 16 bits value) diubah menjadi 72 -1

  9. Counter Periode (AutoReload Register.... diubah menjadi 0xffff - 1

  10. Pada bagian GPIO, Ubah PA5, PA6, PA7, PB0, PB1, PB10 dan PB11 (sesuai konfigurasi) menjadi GPIO_Output

  11. Pada bagian Analog > ADC1 lalu ceklis IN3 (Karena pin untuk potensio itu ada di PA3)

  12. Continous Coversion Mode ubah menjadi Enable

  13. Generate Code dengan klik Project> Generate Code atau dengan shortcut Alt + K

  14. Tambahkan library untuk LCD yaitu LCD1602.h dan LCD1602.c dengan cara mendrag satu persatu file tersebut ke folder. LCD1602.h ke folder Inc sedangkan untuk LCD1602.c ke folder Src. File tersebut bisa didapat di bagian bawah tutorial ini

  15. Klik LCD1602.c pada folder Src lalu modifikasi bagian --- Define the LCD PINS below --- menjadi seperti berikut (sesuai rangkaian, pada PCB trainer LCD, RS, RW dst)

    #define RS_Pin GPIO_PIN_11
    #define RS_GPIO_Port GPIOB
    #define RW_Pin GPIO_PIN_10
    #define RW_GPIO_Port GPIOB
    #define EN_Pin GPIO_PIN_1
    #define EN_GPIO_Port GPIOB
    #define D4_Pin GPIO_PIN_0
    #define D4_GPIO_Port GPIOB
    #define D5_Pin GPIO_PIN_7
    #define D5_GPIO_Port GPIOA
    #define D6_Pin GPIO_PIN_6
    #define D6_GPIO_Port GPIOA
    #define D7_Pin GPIO_PIN_5
    #define D7_GPIO_Port GPIOA
    
  16. Tambahkan baris program setelah #include "main.h"

    #include "LCD1602.h"
    
uint16_t readValue;
  1. Tambahkan baris program ini pada bagian User Code Begin 2
HAL_TIM_Base_Start(&htim1);
HAL_ADC_Start(&hadc1);
lcd_init();
lcd_put_cur(0, 0);
  lcd_send_string("   LOADING...   ");
  HAL_Delay(1000);
  lcd_clear();
  1. Tambahkan baris program berikut pada while (1)
while (1)
  { 
    HAL_ADC_PollForConversion(&hadc1,1000);
    readValue = HAL_ADC_GetValue(&hadc1);
    lcd_clear();
    lcd_put_cur(0,0); //y,x
    sprintf(min,"ADC: %d",readValue);
    lcd_send_string(min);
    HAL_Delay(10);
  1. Build program lalu download program ke STM32

Download Section

LCD1602.c

LCD1602.c

LCD1602.h

LCD1602.h

Referensi

Interface LCD 1602 with STM32 || Parallel Connection || 4 bit mode || noI2C