Display the date and time to LCD I2C with STM32F103C Internal RTC
/ 10:31
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.
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:
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
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.
Replytolong bantuannya mas.
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.
ReplyWARNING: library STM32RTC-master claims to run on (stm32) architecture(s) and may be incompatible with your current board which runs on (STM32F1) architecture(s).
ReplyIn 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
Pagi admin...Masaalah gue juga sama seprti @ARISTU BAGUS E ...Mohon dijawab dong...Trim'S
Reply
ReplyGue 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...
refrensi:...
Replyhttps://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
Instal board nya lama ya?
ReplyBener...Install Boardnya agak lama karena banyak file librarynya...
ReplyEmoticonEmoticon