ย
ย
ย
Percobaan Real Time Clock (RTC) DS1307
1. Dasar RTC
Real Time Clock berhubungan dengan waktu mulai dari detik, menit, jam, hari, tanggal, bulan dan tahun. Tetapi IC RTC ini juga bisa dipakai untuk menyimpan data di dalam internal RAM RTC ini, di mana data tersebut tidak bisa hilang meskipun supply diputus, hal ini karena di dalam
IC RTC tersebut ada battery-nya yang selalu hidup untuk menjalankan clock-nya jadi waktu (clock) tetap berjalan meskipun supply dimatikan. IC RTC ini masih mempunyai kelebihan bisa dipakai sebagai timer atau alarm. Untuk hitungan detik, menit, jam, hari, tanggal, bulan dan tahun dengan tahun kabisat yang valid sampai 2100 karena compensation valid up to 2100. Mode yang dipilih juga bisa 12 or 24 hour clock with AM dan PM in 12 hour mode.
RTC 1307 menggunakan teknik I2C yaitu memakai 2 jalur untuk keperluan transfer data secara seri, sedangkan SPI dan MicroWire memakai 3 jalur. Semua teknik mempunyai 1 jalur untuk Clock, I2C hanya punya satu jalur data 2 arah, sedangkan SPI dan MicroWire mempunyai 2 jalur data satu arah, masing-masing untuk jalur data masuk dan jalur data keluar.
Komunikasi dengan protokol I2C pada RTC 1307 mempunyai cara yang sama seperti mengakses eeprom serial tipe 24C04 misalnya. Pertama kirim start-bit, alamat RTC(0xC0) dengan bit R/W low, kemudian nomor register yang ingin diakses.
2. Konfigurasi PIN
Untuk lebih jelas mengenai fungsi dan kegunaan dari IC ini terlebih dahulu akan dijelaskan fungsi dari tiap-tiap pin pada IC keluarga DS1307, di mana diketahui bahwa IC DS1307 memiliki 8 pin atau kaki, seperti pada Gambar 1.
Fungsi dari tiap pin RTC DS1307 antara lain :
1. X1, X2
Terhubung dengan kaki kristal 32768kHz
2. Vbat
Terhubung dengan battery 3,3 volt
3. GND, Vcc
Input tegangan Vcc adalah +5V.
4. SQW (Square Wave Output)
Pin SQW dapat mengeluarkan sinyal salah satu dari 13 taps yang disediakan oleh 15 tingkat pembagi internal dari RTC.
5. SCL
Pin SCL mengeluarkan sinyal clock. Pin ini harus diberi resistor Pull Up.
6. SDA
Pin SDA mengeluarkan sinyal data
Fungsi-fungsi pengaksesan register RTC DS1307 yang terdapat pada file โds1307.h.โ fungsi-fungsi tersebut antara lain:
unsigned char rtc_read(unsigned char address); โ> untuk membaca pada alamat tertentu dari register timekeeper RTC
void rtc_write(unsigned char address,unsigned char data); โ> untuk menulis pada alamat tertentu dari register timekeeper RTC
void rtc_init(unsigned char rs,unsigned char sqwe,unsigned char out); โ> untuk inisialisasi IC DS1307
void rtc_get_time(unsigned char *hour,unsigned char *min,unsigned char *sec); โ> untuk membaca waktu ( jam, menit dan detik ) dari RTC dalam satu kali akses
void rtc_set_time(unsigned char hour,unsigned char min,unsigned char sec); โ> untuk mensetting waktu sekarang ( jam, menit dan detik ) dari RTC dalam satu kali akses
void rtc_get_date(unsigned char *date,unsigned char *month,unsigned char *year); โ> untuk membaca tanggal, bulan dan tahun dari RTC dalam satu kali akses
void rtc_set_date(unsigned char date,unsigned char month,unsigned char year); โ> untuk mensetting tanggal, bulan dan tahun dari RTC dalam satu kali akses.
ย
1. Percobaan RTC dengan display LED
#include <mega8535.h>
#include <ds1307.h>
#include <delay.h>
#include <stdio.h>
#include <i2c.h>
// I2C Bus functions
#asm
.equ __i2c_port=0x12 ;PORTD
.equ __sda_bit=2
.equ __scl_bit=3
#endasm
void main(void)
unsigned char jam, menit, detik, tanggal, bulan, tahun;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
DDRC=0xFF;
DDRD=0xFF;
// I2C Bus initialization
i2c_init();
// DS1307 Real Time Clock initialization
// Square wave output on pin SQW/OUT: Off
// SQW/OUT pin state: 0
rtc_init(0,0,0);
rtc_set_time(8,19,0); // set jam 08:19:00
rtc_set_date(24,4,11); // set tanggal: 24 april 2011
while (1)
// Place your code here
rtc_get_time(&jam,&menit,&detik); // baca jam
rtc_get_date(&tanggal,&bulan,&tahun); //bacca tanggal
PORTC=detik;
};
2. Percobaan RTC dengan display 7 Segmen
int data, ubah,menitsat, menitpul, detiksat, detikpul;
#include <mega8535.h>
#include <ds1307.h>
#include <delay.h>
#include <stdio.h>
// I2C Bus functions
#asm
.equ __i2c_port=0x12 ;PORTD
.equ __sda_bit=2
.equ __scl_bit=3
#endasm
#include <i2c.h>
void ubah_ke_format7segment()//fungsi ubah ke format 7segment
if (ubah==0){ubah=0xc0;}
if (ubah==1){ubah=0xf9;}
if (ubah==2){ubah=0xa4;}
if (ubah==3){ubah=0xb0;}
if (ubah==4){ubah=0x99;}
if (ubah==5){ubah=0x92;}
if (ubah==6){ubah=0x82;}
if (ubah==7){ubah=0xf8;}
if (ubah==8){ubah=0x80;}
if (ubah==9){ubah=0x90;}
void tampil_7segment()
PORTC=menitpul;//mengirimkan data kedigit5
PORTD.5=0;
PORTD.6=0;
delay_ms(10);
PORTC=menitsat;//mengirimkan data kedigit6
PORTD.5=1;
PORTD.6=0;
delay_ms(10);
//
PORTC=detikpul;//mengirimkan data kedigit7
PORTD.5=0;
PORTD.6=1;
delay_ms(10);
//
PORTC=detiksat;//mengirimkan data kedigit8
PORTD.5=1;
PORTD.6=1;
delay_ms(10);
//lamanya waktu scanning ditentukan oleh intruksi delay
void main(void)
unsigned char jam, menit, detik, tanggal, bulan, tahun;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
DDRC=0xFF;
DDRD=0xFF;
// I2C Bus initialization
i2c_init();
// DS1307 Real Time Clock initialization
// Square wave output on pin SQW/OUT: Off
// SQW/OUT pin state: 0
rtc_init(0,0,0);
rtc_set_time(8,19,0); // set jam 08:19:00
rtc_set_date(24,4,11); // set tanggal: 24 april 2011
while (1)
// Place your code here
rtc_get_time(&jam,&menit,&detik); // baca jam
rtc_get_date(&tanggal,&bulan,&tahun); //baca tanggal
data = detik;
detiksat = data % 10; // sat = sisa dari data dibagi 10
detikpul = data / 10;
data = menit;
menitsat = data % 10; // sat = sisa dari data dibagi 10
menitpul = data / 10;
ubah=detiksat;
ubah_ke_format7segment();
detiksat=ubah;
ubah=detikpul;
ubah_ke_format7segment();
detikpul=ubah;
ubah=menitsat;
ubah_ke_format7segment();
menitsat=ubah;
ubah=menitpul;
ubah_ke_format7segment();
menitpul=ubah;
tampil_7segment();
delay_ms(10);
};
ย
ย