Advertise here

Selasa, 05 Maret 2019


Introduction
Proyek selanjutnya adalah membuat tampilan tanggal dan Waktu yang real (Real Time Clock) yang akan ditampilkan pada LCD 16x2. 

Kali ini RTC yang kita gunakan tentunya sangat berbeda karena kita memanfaatkan RTC internal yang telah dimiliki Board STM32F103C Blue Pill, jadi kita tidak perlu lagi untuk membeli modul RTC dan ini bisa menghemat pengeluaran kita untuk modul RTC. 

Pengembangan program yang didasari RTC sangat penting sekali dimana suatu saat anda membuat aplikasi yang berbasis waktu seperti data logger, absen sidik jari, pewaktuan alarm, dll. 

Dengan mengetahui pemograman RTC pada Board STM32F103C Blue Pill anda dapat membuat rangkaian proyek anda menjadi lebih simpel dan hemat biaya. Sebelum mencoba tutorial ini diharapakan anda sudah MemasangBoard STM32F103C Series Pada Arduino IDE, Mengerti cara melakukan flash program atau uploadprogram kedalam sistem blue pill STM32F103C Series.

Bill Of Material
Kebutuhan alat dan bahan yang anda perlukan dalam membuat proyek RTC dengan LCD I2C 2x16 adalah :
·         Board LCD I2C dengan ukuran 16x2
·         Board STM32F103C Blue Pill
·         Bread Board 400 dot point
·         Dan beberapa kabel Jumper Female to Male, dan Male to Male
·         Liblary LiquidCrystal_I2C.h yang dapat di unduh pada link berikut https://github.com/johnrickman/LiquidCrystal_I2C
·         Liblary STM32RTC.h yang dapat di unduh pada link berikut

Circuit Wiring
Tidak diperlukan rangkaian pengkabelan yang khusus pada proyek ini, karena sama halnya dengan proyek sebelumnya yaitu Interfacing LCD I2C 16x2. Dengan menghubungkan pin SCL ke PB6, pin SDA ke PB7, Pin GND ke G, dan pin VCC ke 5V



Program
Buka jendela arduino IDE dan kopikan program dibawah ini ke workspace, setelah selesai lakukan verify untuk mengetahui kesalahan dalam memprogram. Tapi yang paling penting adalah liblary STM32RTC.h dan LiquidCrystal_I2C.h harus sudah terpasang pada directory C:\Users\PC_Home\Documents\Arduino\libraries

#include <STM32RTC.h>
#include <LiquidCrystal_I2C.h>


/* Get the rtc object */
STM32RTC& rtc = STM32RTC::getInstance();
/* Set the Address I2C LCD and Matrix 16x2 */
LiquidCrystal_I2C lcd(0x27,16,2);

/* Change these values to set the current initial time */
const byte seconds = 0;
const byte minutes = 59;
const byte hours = 21;

/* Change these values to set the current initial date */
const byte day = 1;
const byte month = 3;
const byte year = 19;

volatile int alarmMatch_counter = 0;
byte detik;
byte menit;
byte jam;
byte tanggal;
byte bulan;
byte tahun;


void setup()
{
  Serial.begin(115200);

  rtc.begin(); // initialize RTC 24H format
  rtc.setTime(hours, minutes, seconds);
  rtc.setDate(day, month, year);
  rtc.attachInterrupt(alarmMatch);
  rtc.setAlarmDay(day);
  rtc.setAlarmTime(22, 0, 0);
  rtc.enableAlarm(rtc.MATCH_DHHMMSS);

  startup_LCD();
 
}

void loop()
{
    update_RTC();
    view_time();
    view_date();
    delayMicroseconds(500);
}

void update_RTC()
{
    detik=rtc.getSeconds();
    menit=rtc.getMinutes();
    jam=rtc.getHours();
    tanggal=rtc.getDay();
    bulan=rtc.getMonth();
    tahun=rtc.getYear();
}

void startup_LCD()
{
  // Initialize LCD
  lcd.init();            
  // Print a message to the LCD for startup.
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print(" RTC- STM32F103 ");
  lcd.setCursor(0,1);
  lcd.print("  SIMPLE ALARM  ");
  delay(3000);
  lcd.clear();
}

void view_time()
{
    lcd.setCursor(0, 0);
    lcd.print("TIME ");
    if (jam <=9){lcd.print("0");}
    lcd.print(jam);
    lcd.print(":");
    if (menit <=9){lcd.print("0");}
    lcd.print(menit);
    lcd.print(":");
    if (detik <=9){lcd.print("0");}
    lcd.print(detik);
    lcd.setCursor(13, 0);
    lcd.print("  "); 
}

void view_date()
{
    lcd.setCursor(0, 1);
    lcd.print("DATE ");
    if (tanggal <=9){lcd.print("0");}
    lcd.print(tanggal);
    lcd.print("/");
    if (bulan <=9){lcd.print("0");}
    lcd.print(bulan);
    lcd.print("/");
    if (tahun <=9){lcd.print("0");}
    lcd.print(tahun);
    lcd.setCursor(13, 1);
    lcd.print("  "); 
}
void alarmMatch(void *data)
{
     uint32_t sec = 1;
  if(data != NULL) {
    sec = *(uint32_t*)data;
    // Minimum is 1 second
    if (sec == 0){
      sec = 1;
    }
  }
  alarmMatch_counter++;
  Serial.print("Alarm Match ");
  Serial.println(alarmMatch_counter);
  rtc.setAlarmEpoch( rtc.getEpoch() + sec);
}

Untuk melakukan setting tanggal dan waktu saat ini anda dapat merubah parameter berikut dalam program
/* Change these values to set the current initial time */
const byte seconds = 0;
const byte minutes = 59;
const byte hours = 21;

/* Change these values to set the current initial date */
const byte day = 1;
const byte month = 3;
const byte year = 19;

pada contoh program diatas setting variabel hours pada pukul 21, minutes 59, dan seconds 0 yang berarti pukul 21:59:00, kemudian setting variabel day 1, month 3, year 19 yang berarti tanggal 1 maret 2019. Anda dapat merubah nilai pada parameter ini untuk menyesuaikan waktu sekarang.

Jika program telah di upload untuk pertama kalinya dengan setting waktu dan tanggal saat ini maka display akan menampilkan waktu yanng sesuai. Tapi ada masalah ketika sistem anda di reset atau tidak ada daya tegangan, sistem akan kembali ke settingan jam dan tanggal waktu seperti semula.

Untuk mengatasinya maka anda perlu upload program kedua kalinya dengan menon aktifkan baris program setting rtc.setTime(hours, minutes, seconds); dan rtc.setDate(day, month, year); dengan double slash didepan “//” pada fungsi void setup seperti berikut:

void setup()
{
  Serial.begin(115200);

  rtc.begin(); // initialize RTC 24H format
  //rtc.setTime(hours, minutes, seconds);
  //rtc.setDate(day, month, year);
  rtc.attachInterrupt(alarmMatch);
  rtc.setAlarmDay(day);
  rtc.setAlarmTime(22, 0, 0);
  rtc.enableAlarm(rtc.MATCH_DHHMMSS);

  startup_LCD();
 
}

Sampai disini permasalahan pertama sudah selesai, dan permasalahan kedua sistem akan kembali ke waktu 00:00:00 saat catu daya tidak ada, untuk mengatasinya anda dapat menambahkan batrey backup pada Board STM32F103C Blue Pill yaitu pin 3VB dengan tegangan bateray sebesar 3 Volt.

Test Result



Comments 8

Senin, 18 Maret 2019 pukul 22.52.00 WIB

mas mau nanya saya punya masalah dengan I2C, saya pake MPU6050 di STM32F1 kendala saya tidak dapat mengscan address yg dimiliki MPU6050, saya bingung apakah Library saya yg bermasalah? karna di test menggunakan Arduino. addres MPU6050 terbaca mas.
tolong bantuannya mas.

Reply
avatar
Selasa, 19 Maret 2019 pukul 14.52.00 WIB

Baik pak TanTan Sultan, Saya dapat memahami permasalahan anda, jadi antara liblary arduino dengan liblary STM32F1, itu jelas berbeda, sehingga ketika anda menggunakan liblari tersebut ke papan arduino jelas bisa terbaca addres MPU6050, untuk itu saya sarankan anda mencari liblari addres MPU6050 khusus untuk hardware yang mendukung board STM32F1 tersebut.

Reply
avatar
Rabu, 01 Mei 2019 pukul 18.40.00 WIB

WARNING: library STM32RTC-master claims to run on (stm32) architecture(s) and may be incompatible with your current board which runs on (STM32F1) architecture(s).
In file included from C:\Users\Aristu\Documents\Arduino\RTC\RTC.ino:5:0:

C:\Program Files (x86)\Arduino\libraries\STM32RTC-master\src/STM32RTC.h:46:2: error: #error "RTC configuration is missing. Check flag HAL_RTC_MODULE_ENABLED in variants/board_name/stm32yzxx_hal_conf.h"

#error "RTC configuration is missing. Check flag HAL_RTC_MODULE_ENABLED in variants/board_name/stm32yzxx_hal_conf.h"

^

Multiple libraries were found for "LiquidCrystal_I2C.h"
Used: C:\Users\Aristu\Documents\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master
Not used: C:\Program Files (x86)\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master
Not used: C:\Program Files (x86)\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master
Not used: C:\Program Files (x86)\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master
Not used: C:\Program Files (x86)\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master
Multiple libraries were found for "Wire.h"
Used: C:\Program Files (x86)\Arduino\hardware\STM32\STM32F1\libraries\Wire
Not used: C:\Users\Aristu\Documents\Arduino\libraries\Wire-master
Not used: C:\Program Files (x86)\Arduino\hardware\STM32\STM32F1\libraries\WireSlave
exit status 1
Error compiling for board Generic STM32F103C series.

error saya seperti itu, kenapa ya? mohon bantuannya

Reply
avatar
Ali
Rabu, 09 Oktober 2019 pukul 06.23.00 WIB

Pagi admin...Masaalah gue juga sama seprti @ARISTU BAGUS E ...Mohon dijawab dong...Trim'S

Reply
avatar
Ali
Minggu, 27 Oktober 2019 pukul 18.35.00 WIB



Gue tlh berhasil dengan cara ini...
Klik File-->Preferences.
Di board Manager tambahkan url ini
https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json

Klik tools--->Board--->Board Manager
Install Board "STM32 Cores by STMicroelectronic version 1.7.0" atau yang terbaru.

Trim'S Selamat mencoba...

Reply
avatar
Ali
Minggu, 27 Oktober 2019 pukul 18.39.00 WIB

refrensi:...
https://github.com/stm32duino/wiki/wiki/Getting-Started
http://stm32duinoforum.com/forum/viewtopic_f_2_t_3111.html#p40039
http://stm32duinoforum.com/forum/viewtopic_f_2_t_4421.html

Reply
avatar
Ali
Sabtu, 23 November 2019 pukul 06.10.00 WIB

Bener...Install Boardnya agak lama karena banyak file librarynya...

Reply
avatar
Advetise banner