Jam Digital dan alarm dengan RTC berbasis AtMega8535
LAPORAN
LABORATORIUM MIKROKONTROLLER
1
JAM DIGITAL DAN ALARM DENGAN RTC BERBASIS AT MEGA 8535
Dosen Pengampu:
Dr. Samuel Beta
K. K., Ing.Tech., M.T.
Disusun Oleh:
KELOMPOK 2
Aditomo Wibowo
Mukti RE-2B (4.34.22.1.02)
Maulida Muthmainah
RE-2B
(4.34.22.1.13)
Muhammad Rafi RE-2B
(4.34.22.1.16)
PROGRAM STUDI
TEKNOLOGI REKAYASA ELEKTRONIKA
JURUSAN TEKNIK
ELEKTRO
POLITEKNIK
NEGERI SEMARANG
2023
BAB 1
PENDAHULUAN
1.1.
Latar Belakang
Di
era modern ini jam digital dengan alarm bisa membantu menyeselaikan banyak masalah
bisa jadi pengingat kegiatan apabila kita mudah lupa akan sesuatu bisa juga. Alat
ini juga berfungsi dengan sangat baik untuk pengingat waktu dalam ujian karena terkadang
karena fokus mengerjakan sehingga lupa waktu segera berakhir
1.2. Rumusan
Masalah
Berdasarkan
uraian di atas, beberapa rumusan masalah yang harus diperhatikan, yaitu:
1. Bagaimana
waktu yang ditampilkan bisa sesuai dengan masa kini?
2. Bagaimana
cara menseting alarm sebagai pesan pengingat?
1.3. Solusi
Berdasarkan masalahan
di atas kita dapat membuat program untuk menampilkan waktu
yang akurat dengan bantuan RealTimeClock untuk mengakses waktu terkini
Kita juga bisa
mengatur waktu alarm dan menyesuaikan pesan yang akan dimunculkan didalam
program sesuai kebutuhan kita
BAB 2
LANDASAN TEORI
2.1. Mikrokontroller Atmega8535
Mikrokontroler
adalah keseluruhan sistem komputer yang dikemas dalam sebuah chip yang mencakup
mikroprosesor, I/O, memori, dan bahkan ADC. Mikrokontroler AVR (prosesor Risc
Alfi dan Vegard) memiliki arsitektur 8-bit dimana seluruh instruksi dikemas ke
dalam kode 16-bit dan sebagian besar instruksi dieksekusi dalam 1 siklus clock
atau dikenal dengan teknologi RISC (Reduksi Instruksi Set Computing). Secara
umum AVR dapat dikelompokkan menjadi empat kategori yaitu keluarga AT90Sxx,
keluarga ATMega dan kategori AT86RFxx. Pada dasarnya berbeda dalam hal
kapasitas memori, periferal dan fungsinya, sedangkan dari segi arsitektur dan
instruksi yang digunakan dapat dikatakan hampir sama. pinnya dapat digambarkan
sebagai berikut:
1. VCC Input sumber tegangan (+)
2. GND Ground (-)
3. Port A (PA7 … PA0) berfungsi sebagai
input analog dari ADC (Analog to Digital Converter). Port ini juga berfungsi
sebagai port I/O dua arah jika ADC tidak digunakan.
4. Port B (PB7 … PB0) berfungsi sebagai
port I/O dua arah. Port PB5, PB6 dan PB7 juga berfungsi sebagai MOSI, MISO dan
SCK yang dipergunakan pada proses downloading.
5. Port C (PC7 … PC0) berfungsi sebagai
port I/O dua arah.
6. Port D (PD7 … PD0) Berfungsi sebagai
port I/O dua arah. Port PD0 dan PD1 juga berfungsi sebagai RXD dan TXD, yang
dipergunakan untuk komunikasi serial.
7. RESET input reset.
8. XTAL1 input ke amplifier inverting
osilator dan input ke sirkuit clock internal.
9. XTAL2 output dari amplifier inverting
osilator.
10. AVCC input tegangan untuk Port A dan ADC.
11. AREF tegangan referensi untuk ADC. 11. AREF tegangan referensi untuk ADC. Arsitektur
Atmega8535Dari diagram blok di atas terlihat bahwa ATMega8535 memiliki
bagian-bagian sebagai berikut:D
1. Saluran
I/O sebanyak 32 buah, yaitu Port A,Port B,Port C dan Port D.
2. ADC 8
channel 10 bit.
3. Tiga
buah Timer/Counter dengan kemampuan pembanding.
4. CPU
yang terdiri atas 32 buah register.
5. Watchdog
timer dengan osilator internal.
6. SRAM
sebesar 512 byte.
7. Memori
Flash sebesar 8 KB dengan kemampuan Read While Write.
8. Interrupt
internal dan eksternal.
9. Port
antarmuka SPI (Serial Peripheral Interface).
10. EEPROM
sebesar 512 byte yang dapat diprogram saat operasi.
11. Antarmuka
komparator analog.
12. Port
USART untuk komunikasi serial.
2.2. RTC Ds 1307
RTC atau Real-Time Clock adalah modul yang
digunakan untuk mengukur waktu dan tanggal secara real-time. RTC digunakan
dalam berbagai aplikasi seperti jam digital, sistem alarm, pemantauan energi,
dan lain-lain. Salah satu RTC yang populer adalah RTC DS1307.
RTC
DS1307 module adalah chip RTC yang memungkinkan penggunaannya dalam
berbagai aplikasi yang memerlukan pengukuran waktu dan tanggal secara
real-time. RTC DS1307 memiliki fitur-fitur seperti deteksi daya rendah,
konsumsi daya rendah, dan memori SRAM 56-byte yang dapat diakses oleh
mikrokontroler.
2.3. Buzzer
Buzzer adalah
sebuah komponen elektronika yang berfungsi untuk mengubah getaran listrik
menjadi getaran suara. Pada dasarnya prinsip kerja buzzer hampir
sama dengan loud speaker, jadi buzzer juga terdiri dari
kumparan yang terpasang pada diafragma dan kemudian kumparan tersebut dialiri
arus sehingga menjadi elektromagnet, kumparan tadi akan tertarik ke dalam atau
keluar, tergantung dari arah arus dan polaritas magnetnya, karena kumparan
dipasang pada diafragma maka setiap gerakan kumparan akan menggerakkan
diafragma secara bolak-balik sehingga membuat udara bergetar yang akan
menghasilkan suara. Buzzer biasa digunakan sebagai indikator
bahwa proses telah selesai atau terjadi suatu kesalahan pada sebuah alat (alarm).
Gambar 2.3 Buzzer
BAB 3
PEMBAHASAN
3.1. Perancangan Sistem
Berikut
beberapa perancangan sistem yang digunakan dalam mendukung proses pembuatan jam digital dengan alarm berbasis Atmega8535
3.1.1. Alat dan Komponen
Alat
dan komponen yang kami gunakan dalam merancang alat ini, adalah:
-
Mikrokontroller Atmega8535
- Buzzer
-
RTC
- Catu daya
- Jumper
3.1.2. Diagram Balok Jam Digital dan Alarm dengan RTC
Gambar 3.1 Diagran Balok
Input yang digunakan untuk mendapatkan waktu adalah RTC ds1307 dengan
mikrokontroller Atmega8535 dan output berupa buzzer sebagai
alarm untuk menandakan ada kegiatan
3.1.3. Flowchart Jam Digital dan Alarm dengan RTC
Gambar 3.2 Diagran Alir
Waktu diambil menggunakan Real time clock untuk
mengambil waktu masa kini sehingga sesuai dan alarm akan berbunyi sesuai input
yang dimasukan dengan buzzer sebagai penanda
Berikut merupakan keseluruhan rangkaian Jam
Digital dengan Alarm berbasis Atmega8535.
Gambar 3.3 Rangkaian Jam Digital dan alarm dengan RTC melalui Software Proteus
3.2. Program
Berikut merupakan program Jam Digital dan Alarm dengan RTC
#include <mega8535.h>
#include <delay.h>
#include <alcd.h>
#include <i2c.h>
#include <ds1307.h>
// Function prototypes
void intToChar(int value, char *str);
void main(void) {
//
Variable declarations
char
str_jam[3];
char
str_menit[3];
char
str_detik[3];
unsigned char displayMessage1 = 0; // menampilkan
pesan ke1
unsigned char messageStartTime1 = 0; // mengatur
waktu pesan
unsigned char displayMessage2 = 0; // menampilkan
pesan ke2
unsigned char messageStartTime2 = 0; // mengatur
waktu pesan
unsigned char displayMessage3 = 0; // menampilkan
pesan ke3
unsigned char messageStartTime3 = 0; // mengatur
waktu pesan
lcd_init(16);
lcd_clear();
i2c_init(); // initialize I2C communication
rtc_init(); // initialize DS1307 RTC
// Set
buzzer pin as output
DDRB =
0xFF;
PORTB =
0x00;
while (1)
{
//
Read time from DS1307 RTC
unsigned char rtc_hours = ds1307_get_hours();
unsigned char rtc_minutes = ds1307_get_minutes();
unsigned char rtc_seconds = ds1307_get_seconds();
//
Display digital clock on LCD
lcd_gotoxy(0, 0);
//
Using sprintf for string conversion
sprintf(str_jam, "%02d", rtc_hours);
lcd_puts(str_jam);
lcd_putchar(':');
sprintf(str_menit, "%02d", rtc_minutes);
lcd_puts(str_menit);
lcd_putchar(':');
sprintf(str_detik, "%02d", rtc_seconds);
lcd_puts(str_detik);
//
Add a delay of 1 second
delay_ms(1000);
//
Clear the LCD before displaying the updated time
lcd_clear();
//
untuk menampilkan alarm
if
(rtc_hours == 9 && rtc_minutes == 0 && rtc_seconds == 0
&& !displayMessage1) {
PORTB.0 = 1;
lcd_gotoxy(0, 1);
lcd_puts("waktu ujian tinggal 30 menit");
displayMessage1 = 1;
messageStartTime1 = rtc_seconds;
}
else if (displayMessage1 && rtc_seconds - messageStartTime1 < 10) {
lcd_gotoxy(0, 1);
lcd_puts("waktu ujian tinggal 30 menit");
}
else {
displayMessage1 = 0;
PORTB.0 = 0;
}
//
untuk menampilkan alarm
if
(rtc_hours == 9 && rtc_minutes == 15 && rtc_seconds == 0
&& !displayMessage2) {
PORTB.0 = 1;
lcd_gotoxy(0, 1);
lcd_puts("waktu ujian tersisa 10 menit");
displayMessage2 = 1;
messageStartTime2 = rtc_seconds;
}
else if (displayMessage2 && rtc_seconds - messageStartTime2 < 10) {
lcd_gotoxy(0, 1);
lcd_puts("waktu ujian tersisa 10 menit");
}
else {
displayMessage2 = 0;
PORTB.0 = 0;
}
//
untuk menampilkan alarm
if
(rtc_hours == 9 && rtc_minutes == 25 && rtc_seconds == 0
&& !displayMessage3) {
PORTB.0 = 1;
lcd_gotoxy(0, 1);
lcd_puts("waktu ujian tersisa 5 menit");
displayMessage3 = 1;
messageStartTime3 = rtc_seconds;
}
else if (displayMessage3 && rtc_seconds - messageStartTime3 < 10) {
lcd_gotoxy(0, 1);
lcd_puts("waktu ujian tersisa 5 menit");
}
else {
displayMessage3 = 0;
PORTB.0 = 0;
}
}
}
BAB 4
PENUTUP
4.1. Kesimpulan
Kesimpulan yang
dapat diambil untuk mempermudah mendapatkan waktu yang akurat kami menggunakan
RTC ds1307 ,kemudian program ini juga bisa diatur sesuai kebutuhan masing
masing orang ,program diatas hanyalah contoh untuk mengingatkan waktu ujian sudah
hampir habis . kita juga bisa mengatur suara yang dimunculkan dibuzzer dengan mengedit
program buzzer nya atau membeli buzzer khusus. Sekian dan terima kasih.
Comments
Post a Comment