Real Time Clock
Real Time Clock
Real Time Clock merupakan suatu chip (IC) yang memiliki fungsi sebagai
penyimpan waktu dan tanggal. Ada dua buah jenis IC RTC yaitu:
yang dapat meyimpan data-data detik, menit, jam, tanggal, bulan, hari dalam
menyimpan data detik, menit, jam, tanggal, bulan dan tahun. RTC ini
memiliki 128 lokasi RAM yang terdiri dari 15 byte untuk data waktu serta
bus yang termultipleks untuk menghemat pin. Timing yang digunakan untuk
mengakses RTC dapat menggunakan intel timing atau motorola timing. RTC
ini juga dilengkapi dengan pin IRQ untuk kemudahan dalam proses.
DS1307 merupakan Real-time clock (RTC) dengan jalur data parallel yang
fail) dan rangkaian switch, Konsumsi daya kurang dari 500nA menggunakn mode
baterei cadangan dengan operasional osilator. Tersedia fitur industri dengan ketahana
suhu: -40C hingga +85C. Tersedia dalam kemasa 8-pin DIP atau SOIC
Sedangkan daftar pin DS1307:
GND - Ground
1. X1
2. X2
Berfungsi sebagai keluaran/ output dari crystal yang digunakan. Trhubung
juga dengan X1
3. VBAT
Merupakan backup supply untuk seril RTC dalam menjalankan fungsi waktu
atau sumber energy lain. Jika pin ini tidak di gunakan maka harus terhubung
dengan Ground. Sumber teganggan dengan 48mAH atau lebih besar dapat
digunakan sebagai cadangan energy sampai lebih dar 10 tahun, namun dengan
4. GND
5. SDA
Barfungsi sebagai masukan / keluaran (I/O) untuk I2C serial interface. Pin ini
bersifat open drain, oleh sebab itu membutuhkan eksternal pull up resistor.
6. SCL
7. SWQ/OUT
Sebagai square wafe / Output Driver . jika di aktifkan, maka akan menjadi 4
frekuensi gelombang kotak yaitu 1 Hz, 4kHz, 8kHz, 32kHz sifat dari pin ini
sama dengan sifat pin SDA dan SCL sehingga membutuhkan eksternal pull up
baik, maka pengaksesan data dan pembacaan data dapat dilakukan dengan
baik. Namun jika backup supply terhubung juga dengan VCC, namun besar
DS12C887 mempunyai 14 buah register yang terdiri dari 4 Register Kontrol dan
10 Register Data. Register Data sendiri terpisah menjadi register waktu dan Register
diinisialisasi, maka data waktu ataupun alarm dapat dibaca atau ditulisi dengan cara
a. Register-register Kontrol
DS12C887 memiliki empat register kontrol yang bisa diakses sepanjang waktu,
bernilai 1, maka Update Transfer akan segera muncul, namun bila bit ini bernilai 0,
maka Update transfer hanya akan muncul setelah 244 uDetik kemudian.
DV0, DV1, DV2 : Ketiga bit ini berfungsi untuk mengatur osilator ON atau OFF, dan
me-RESET hitung mundur. Kofigurasi 010 digunakan untuk mengatur osilator ON,
RS0, RS1, RS2 dan RS3 : Bit-bit ini digunakan untuk memilih 15 tingkat pembagi
frekwensi yang dapat digunakan untuk membangkitkan sinyal luaran pada pin SQW
frekuensi luaran SQW dan laju Interupsi Peiodik berdasar nilai-nilai RS0, RS1, RS2,
dan RS3.
SET : Apabila bit ini bernilai 0, maka register data dapat diupdate setiap detiknya,
namun apabila bit ini bernilai 1, maka register data tidak dapat diupdate. Bit ini tidak
membolehkan bit PF atau Periodic Interrupt Flag pada Register C meng-nol-kan pin
luaran IRQ. Jika PIE = 1, maka interupsi periodik akan dihasilkan dengan meng-nol-
kan pin luaran IRQ dengan laju yang ditentukan oleh RS0 s/d RS2 (lihat penjelasan
sebelumnya).
AIE : Alarm Interrupt Enable, bit yang membuat bit Alarm Flag dapat
membangkitkan kondisi LOW pada pin IRQ. Kondisi RESET akan mengubah bit ini
UIE : Update Ended Interrupt Enable, bit yang membuat bit Update End Flag (UF)
dapat membangkitkan kondisi LOW pada pin IRQ. Kondisi RESET atau logika 1
pada bit SET akan membuat bit ini berubah menjadi clear (bernilai 0).
SQWE : Apabila bit ini bernilai 1, maka gelombang kotak dengan frekwensi yang
ditentukan oleh pembagi frekwensi pada RS0 s/d RS3 akan dihasilakn melalui pin
SQW.
DM : DM = 1 untuk mode binary dan DM = 0 untuk data BCD pada Register Data.
24/12: Apabila bit ini bernilai 1, maka waktu berjalan berdasarkan 24 jam dan
sebaliknya bila bit ini bernilai 0, maka waktu berjalan berdasarkan 12 jam.
DSE : Daylight Saving Enable, apabila bit ini bernilai 1, maka akan terjadi proses
update pada saat 1:59:59 AM menjadi 3:00:00 AM pada Hari Minggu pertama bulan
April dan saat 1:59:59 AM menjadi 1:00:00 AM pada Hari Minggu terakhir Bulan
Oktober.
IRQF : Interrupt Request Flag, bit ini akan bernilai 1 apabila salah satu dari bit PF,
PF : Periodic Interrupt Flag, bit ini akan bernilai 1 secara periodik (tergantung bit
RS0 s/d RS3). Apabila bit PIE aktif, maka kondisi SET pada bit PF akan
membangkitkan kondisi LOW pada pin IRQ. Bit ini akan bernilai 0 saat pembacaan
AF : Alarm Interrupt Flag, bit ini akan bernilai 1 saat waktu sekarang cocok dengan
waktu yang diatur pada alarm. Apabila bit AIE aktif, maka kondisi SET pada bit AF
akan membangkitkan kondisi LOW pada pin IRQ. Bit ini akan bernilai 0 saat
UF: Update Ended Interrupt Flag, bit ini siklus update. Apabila bit UIE aktif maka
kondisi SET pada bit ini akan membangkitkan kondisi LOW pada pin IRQ. Bit ini
akan bernilai 0 (Clear) saat pembacaan pada Register C atau kondisi RESET
VRT: Bit The Valid RAM and Time ini merupakan indikator kondisi baterai yang
terhubungkan ke pin Vbat. Bit ini tidak bisa ditulisi, dan seharusnya bernilai 1 terus
saat dibaca. Jika terjadi nilai 0, artinya terjadi pelemahan arus/tegangan pada baterai,
dan simpanan data RTC dan RAM menjadi dipertanyakan. Bit ini tidak dipengaruhi
RESET.
Berikut ini gambar pin-pin dari RTC DS 12C887, jumlah total pin-nya sebanyak 13
buah :
Gambar 1 Pin RTC DS 12C887
Terlihat dari diagram blok tersebut bawhwa RTC terbagi menjadi beberapa bagian
DS - Data Strobe
GND - Ground
Bus yang ter-multipleks akan menghemat penggunaan pin karena informasi alamat
dan data menggunakan jalur sinyal yang sama. Siklus bus pertama digunakan untuk
jalur alamat, dan siklus bus kedua digunakan untuk jalur data (bergantian antara
alamat dan data). Intinya, kirim alamat melalui AD0-AD7 kemudian lakukan
dengan proses pembacaan atau penulisan data ke alamat tersebut. RTC menghasilkan
luaran 8 bit data pada saat pin DS dan RD diberi pulsa. Bus akan menjadi
berimpedansi tinggi saat pulsa LOW diberikan pada pin DS (motorola) atau pulsa
dihubungkan dengan VCC, maka pewaktuan bus Motorolla yang dipilih, sedangkan
ketika dihubungkan ke ground atau dibiarkan (tak dihubungkan) maka pewaktuan bus
Intel yang dipilih. Pin ini memiliki pull down internal sekitar 20 kOhm.
CS ke GND supaya selalu aktif, atau bisa melalui salah satu pin dari mikrokontroler
yang digunakan, jika ada beberapa piranti pada modul aplikasi Anda, sehingga kita
bisa melakukan aktivasi secara manual di dalam program. Saat Vcc berada dibawah
4.25 volt, maka DS12C887, secara internal, akan menahan akses siklus bus dengan
cara menon-aktifkan masukan CS. Aksi ini akan melindungi data jam real time dan
AS (Address Strobe)
sebagai alamat memori DS12C887. Perintah akses (apakah baca atau tulis) harus
DS/RD aktif LOW sebagai pin RD sama seperti pada RAM-RAM umum
Pin RESET tidak berpengaruh terhadap jam, kalender atau RAM. Pada saat
penyalaan RTC, pin RESET dapat dijaga LOW untuk beberapa saat untuk
menstabilkan catu daya. Lamanya waktu pin RESET diberikan low tergantung dari
aplikasi yang digunakan. Akan tetapi jika reset digunakan saat power up (penyalaan),
waktu RESET dijaga low harus melebihi 200 ms untuk meyakinkan bahwa timer
Pin IRQ adalah keluaran active low dari RTC 12C887 yang digunakan sebagai
masukan interupsi pada prosessor. Keluaran IRQ tetap low selama selama bit status
menyebabkan interupsi terjadi dan bit yang berhubungan yaitu interrupt-enable di-set.
RESET juga menghapus interupsi yang dilakukan atau yang belum terjadi (pending).
Ketika tidak terjadi interupt maka level IRQ berada pada kondisi high impedance.
Beberapa peralatan interupsi dapat dihubungkan dengan IRQ bus. Bus IRQ adalah
Pin SQW dapat mengeluarkan sinyal kotak, dari satu sampai 13 pembagian yang
disediakan oleh 15 buah tingkat pembagi (divider) internal dari RTC. Frekuensi dari
SQW dapat dipilih dengan memprogram register A seperti pada tabel. Sinyal SQW
dapat dihidupkan dan dimatikan dengan mengatur bit SQWE pada register B. Sinyal
GND, Vcc
Merupakan pin untuk atu daya RTC. Vcc diberikan input +5volt. Ketika tegangan 5
volt diberikan dalam batas yang normal, RTC bebas diakses dan data dapat ditulis
atau dibaca. Sedangkan ketika Vcc dibawah 4.25 volt, maka proses baca dan tulis
tidak dapat dilakukan. Akan tetapi, proses pewaktu (timekeeping) tetap dilakukan
oleh RTC tanpa dipengaruhi oleh tegangan masukan yang rendah. Saat Vcc turun
dibawah 3 volt, catu daya untuk RAM dan pewaktu dipindahkan ke internal lithium
batery yang terdapat pada RTC. Fungsi pewaktu dari RTC memiliki akurasi 1 menit
per bulan pada suhu 250 C walaupun tanpa adanya catu pada Vcc.
APLIKASI
Dan sekarang ke contoh program, sengaja saya gunakan bahasa tingkat tinggi -
$regfile = "89s8252.dat"
$crystal = 11059200
$baud = 9600
Keterangan:
$regfile digunakan untuk mendefinisikan mikrokontroler yang digunakan, yaitu
89s8252;
$crystal kita gunakan untuk mendefinisikan frekuensi kristal yang terpasang pada
rangkaian kita, dan ini penting banget soalnya akan menentukan proses kompilasi
perintah-perintah I2C yang terkait. Jika Anda salah menuliskan angkanya atau angka
$baud digunakan untuk menentukan kecepatan komunikasi serial, yaitu 9600 bps,
Keterangan:
yang digunakan untuk menyimpan hasil pembacaan RTC DS1307 yang masing-
yang digunakan untuk menyimpan hasil pembacaan RTC DS1307 yang masing-
yang digunakan untuk menyimpan hasil konversi BCD (pembacaan RTC) ke desimal,
yang akan dikirim melalui komunikasi serial, masing-masing untuk detik, menit, dan
jam;
byte yang digunakan untuk menyimpan hasil konversi BCD (pembacaan RTC) ke
desimal, yang akan dikirim melalui komunikasi serial, masing-masing untuk tanggal,
Masuk sebagai variabel untuk menyimpan sebuah karakter (string * 1) kiriman dari
RTC-nya (DS1307):
'------------------------------------------
'-------------------------------------------
Keterangan:
Hanya 2 kabel utama (selain menyamakan GND - ground) yang digunakan untuk
komunikasi dengan mikrokontroler, yaitu SCL dan SDA (perhatikan diagram pin-
nya);
SCL (serial clock) dihubungkan dengan P2.0, sedangkan SDA (serial data)
Keterangan:
Instruksi atau perintah yang digunakan untuk penulisan data ke RTC DS1307 adalah
Alamat-alamat yang berhubungan dengan jam untuk detik, menit dan jam, masing-
untuk baca jam, dan baca tanggal. Selain kedua perintah tersebut, mikrokontroler
akan mengirimkan er sebagai tanda salah kirim perintah. Selain itu akan dikirim
data jam atau tanggal, perhatikan potongan program utamanya berikut ini
CASE):
Do
Input Masuk
Case Else
Print "er"
End Select
Loop
End
Perhatikan pada program utama. Terdapat dua subrutin: (1) Read_time digunakan
Sub Read_time
'-=-=-=-=-=-=-=-=-=-=-=-=-=
I2CStart
I2CWbyte Ds1307w
I2CWbyte Sec_addmap
I2Cstop
I2Cstart
I2CWbyte Ds1307r
I2CStop
If Reg_hour.6 = 1 Then
Reg_hour = Reg_hour And &B00011111
Else
End If
'=-=-=-=-=-=-=-=-=-=-=-
Num_hour = Makedec(reg_hour)
Num_min = Makedec(reg_min)
Num_sec = Makedec(reg_sec)
End Sub
Keterangan:
Proses pembacaan jam dan tanggal pada dasarnya sama saja, diawali dengan (lihat
Langkah selanjutnya adalah mulai membaca dari data detik, diawali dengan I2Cstart
perintah I2CRbyte Reg_sec, Ack untukmembaca data detik, Ack digunakan untuk
indikator masih ada data yang lain perlu dibaca (kebalikannya adalah NAck). Dan
berturut-turut membaca data menit (I2CRbyte Reg_min, Ack), dan detik (I2CRbyte
Reg_hour, NAck), NAck artinya tidak ada lagi data yang perlu dibaca, jangan lupa
di-stop;
Untuk proses normalisasi terhadap mode jam, apakah mode 12 jam atau 24 jam,
Langkah terakhir adalah merubah hasil pembacaan yang masih dalam format BCD ke
'-=-=-=-=-=-=-=-=-=-=-=-=-=
Sub Read_date
'-=-=-=-=-=-=-=-=-=-=-=-=-=
I2cstart
I2cwbyte Ds1307w
I2cwbyte Date_addmap
I2cstop
I2cwbyte Ds1307r
I2cstop
Num_date = Makedec(reg_date)
Num_month = Makedec(reg_month)
Num_year = Makedec(reg_year)
End Sub
saja yang diterjemahkan, perintah atau huruf lain ditanggapi dengan er: