Dalam desain
rangkaian elektronika digital, kita kadang membutuhkan sebuah sistem berbasis
waktu yang memiliki akurasi yang tinggi. Tengoklah satu contoh pada sistem
komputer di mana kita menjumpai fungsi tersebut untuk menjaga agar informasi
waktu meliputi jam, menit dan detik senantiasa upto date, begitupun dengan
hari, tanggal, bulan dan tahun. Apalagi jika perangkat memang khusus dirancang
sebagai penunjuk waktu seperti jam tangan atau meja berbasis digital yang
menggunakan tampilan LCD atau LED 7 segmen. Bahkan pada sistem panel kendali
baik itu berfungsi sebagai pintu akses atau panel alarm sudah banyak yang
melengkapi rancangannya dengan sistem waktu. Bagaimana dengan sistem absensi
digital? So pasti mutlak menggunakannya.
Pada sistem digital
untuk keperluan menjaga informasi waktu digunakan sebuah komponen khusus yang
disebut RTC atau real time clock dalam bentuk serpih atau IC. Kebanyakan bahkan
dilengkapi dengan RAM atau random access memory untuk keperluan menyimpan data
yang dibutuhkan oleh sistem utama.
Jika Sobat mencoba
menelusuri melalui internet untuk mencari jenis-jenis RTC khususnya jika Sobat
ingin mengoleksi datasheet, maka dengan kata kunci “RTC” saja akan dijumpai
puluhan bahkan ratusan jenis komponen yang memiliki fungsi tersebut.
Nah, salah satu
jenis yang akan penulis utarakan dalam ulasan topik kali ini adalah sebuah
RTC-RAM dari Dalas Semiconductor bernama DS1302. Pada datasheet, jenis ini
disebutkan sebagai “Trickle Charge Timekeeping Chip”.
Serpih DS1302 yang
akan kita bahas, di samping memiliki fasilitas informasi waktu yang valid
hingga hitungan tahun 2100 juga memiliki RAM dengan kapasitas 31 byte. Sebagai
perancang amatiran meski kadang dijadikan sebuah profesi, penulis menggunakan
jenis ini dengan kemasan DIP dengan 8 penyemat. Untuk antarmuka dengan
mikrokontroler, serpih DS1302 menyediakan 3 saluran komunikasi serial yaitu RST
(reset aktif rendah), SCLK dan I/O.
Untuk akurasi
waktu, DS1302 menggunakan sebuah kristal bernilai 32,768 kHz yang terhubung
pada penyemat 2 dan 3. Secara internal frekuensi yang dihasilkan akan dibagi
oleh pencacah mundur yang berjumpah 16 bit sehingga memperoleh nilai 1 detik
disamping sinyal osilasi juga dimanfaatkan untuk operasi internal dari serpih itu
sendiri.
Sesuai fungsinya
sebagai penjaga waktu, DS1302 memiliki penyemat yang terhubung pada batere
(backup battery) yaitu VCC1. Sobat bisa menggunakan jenis batere
NiCD atau Lithium yang umum dan menjadi standar namun penggunaan jenis lain
juga tidak menjadi soal selama sesuai dengan rancangan dan spesifikasi dari
serpih ini. Sebagai informasi, serpih ini beroperasi dengan baik pada tegangan
kerja 2 volt hingga 5,5 volt. Konsumsi arus yang diperlukan bisa Sobat lihat
pada tabel berikut:
Untuk informasi
lengkap berkenaan dengan serpih DS1302 ini dapat Sobat lihat pada datasheet.
Penulis akan melanjutkan pembahasan dengan bagaimana membuat modul antarmuka
pada serpih ini.
Kita sudah
mengetahui jika serpih DS1302 memiliki 3 penyemat sebagai antarmuka komunikasi
serial dengan mikrokontroler atau perangkat di luarnya. Antarmuka ini tidak
lain diperlukan untuk membaca atau menulis ke dalam serpih. Adapun diagram
pewaktuannya untuk mempermudah pengertian bagaimana melakukan antarmuka dapat
dilihat berikut ini:
Diagram di atas
adalah antarmuka komunikasi standar baca tulis yang dapat dilaksanakan pada
serpih. Antarmuka dapat dilaksanakan dengan kondisi RST bernilai tinggi. Data
akan ditransfer masuk ke serpih pada tepi naik dan ditransfer keluar pada tepi
turun dari sinyal SCLK. Penyemat I/O berisi data atau informasi yang akan
ditransfer. Sobat bisa melihat pada bagian bawah komposisi dari bit-bit dalam
byte perintah atau alamat yang menunjukkan bahwa transfer data secara serial
dimulai dari LSB ke MSB atau Bit0 ke Bit7 begitu pun
dengan data yaitu D0 ke Dn.
Formasi perintah
atau alamat sendiri terdiri dari Bit7 yang selalu bernilai 1. Bit6
untuk memilih register yang akan dibaca atau ditulis, 0 untuk RTC dan 1 untuk
RAM. Kemudian Bit5 sampai Bit1 adalah alamat yang
bersesuaian dengan register yang diinginkan. Terakhir Bit0 digunakan
untuk menentukan operasi membaca atau menulis, 0 untuk tulis dan 1 untuk baca.
Setelah kita
memahami bagaimana cara membaca dan menulis, sekarang adalah register apa saja
dalam serpih DS1302 yang disediakan.
Untuk RTC atau
CLOCK, kita menjumpai sebanyak 8 alamat register yang dapat dilihat secara
berurutan yaitu SEC, MIN, HR, DATE, MONTH, DAY, YEAR, CONTROL dan TRICKLE
CHARGER. Sementara untuk RAM terdapat 31 register yang dimulai dari RAM0
hingga RAM30. Semua alamat register ini dibaca atau ditulis secara
independen sesuai alamat masing-masing dan menggunakan operasi SINGLE BYTE
karena setiap register terdiri dari 8 bit data.
Pada gambar di atas
terdapat format pengalamatan CLOCK BURST dan RAM BURST. Pada CLOCK BURST maka
setiap operasi baca atau tulis setelah pengiriman perintah atau alamat diikuti
oleh sebanyak 8 byte data yang dimulai dari informasi SEC hingga TRICKLE
CHARGER. Sementara pada RAM BURST, setelah pengiriman perintah atau alamat
diikuti oleh data sebanyak 31 byte. Kegunaan dari operasi baca tulis mode BURST
adalah untuk mempercepat prosedur pembacaan register sehingga kita bisa
menghemat waktu operasi dari mikrokontroler.
Dari
register-register di atas terutama pada grup CLOCK ada beberapa hal yang perlu
diketahui berkenaan dengan pengoperasian dan format yang disediakan oleh serpih
ini. Untuk register yang berkaitan dengan informasi waktu menggunakan format
data BCD (binary coded decimal). Sementara untuk setingan masing-masing data
waktu juga disisipkan pada bit yang bersesuai dengan isi register tersebut.
Register SEC untuk
informasi detik memiliki format BCD menggunakan Bit6 – Bit0
untuk data 00H sampai 59H. Bit7 atau CH dari register ini berfungsi
sebagai “Clock Halt Flag” di mana jika bernilai 0 maka osilator akan START
sementara jika bernilai 1 maka osilator menjadi STOP.
Register MIN untuk
informasi menit juga menggunakan Bit6 – Bit0 untuk data
00H sampai 59H. Bit7 selalu dibernilai 0.
Register HR untuk
informasi jam memiliki 2 mode untuk format jam yang digunakan yaitu mode 12 dan
24 jam. Jika Bit7 dibernilai 1 maka serpih beroperasi pada mode 12 jam. Bit6
selalu diberi nilai 0. Pada mode 12 jam, Bit5 berisi informasi AM/PM di
mana nilai 0 adalah AM dan 1 untuk PM. Pada mode 12 jam informasi waktu
diberikan oleh Bit4 – Bit0 untuk data 01H sampai 12H.
Sebaliknya jika Bit7 bernilai 0 maka serpih beroperasi pada mode 24 jam. Bit6
selalu dibernilai 0. Pada mode 24 jam informasi waktu diberikan oleh Bit5
– Bit0 untuk data 00H sampai 23H.
Register DATE untuk
informasi tanggal menggunakan Bit5 – Bit0 dengan data 01H
sampai 28/29/30/31H sesuai dengan jumlah hari pada masing-masing bulan yang
bersesuaian. Register MONTH untuk informasi bulan menggunakan Bit4 –
Bit0 dengan data 01H sampai 12H. Register DAY untuk informasi hari
dalam seminggu menggunakan Bit2 – Bit0 dengan data 1H
sampai 7H. Bit-bit yang tidak digunakan pada masing-masing register ini selalu
bernilai 0.
Register YEAR
menggunakan seluruh bit untuk informasi tahun antara 00H hingga 99H.
Register CONTROL
menggunakan Bit7 sebagai proteksi data atau WP (write protect).
Operasi tulis hanya dapat dilakukan bilamana nilai Bit7 adalah 0.
Jika Bit7 bernilai 1 maka operasi menulis tidak dapat dilaksanakan. Bit6
– Bit0 pada register ini selalu bernilai 0.
Register
terakhir dari grup CLOCK adalah TRICKLE CHARGER untuk keperluan seting yang
berkaitan dengan batere pada VCC1. Ada 3 kelompok seting yang dapat
dikelola melalui register ini yaitu Bit7 – Bit4 untuk
seting TCS (trickle charge select), Bit3 – Bit2 untuk
seting DS (diode select) dan Bit1 – Bit0 untuk seting RS
(resistor select). Bit-bit TCS digunakan untuk mengaktifkan atau menon-aktifkan
pengisian dan hanya menyediakan format 1010 saja untuk membolehkan pengisian.
Bit-bit DS digunakan untuk memilih diode, DS dapat berisi 01 untuk 1 dioda atau
10 untuk penggunaan 2 dioda sementara nilai 00 atau 11 akan menon-aktifkan TCS
secara independen. Bit-bit RS untuk memilih nilai resistansi pada pengisian
batere.
Nah,
sepertinya perkenalan dengan serpih DS1302 sudah cukup. Sekarang saatnya untuk mulai membahas modul
antarmuka yang diinginkan termasuk bagaimana mengelola seting yang diperlukan.
Modul yang akan dibahas adalah antarmuka dengan keluarga MCS51 dengan
mikrokontroler AT89.
Berikut
hanyalah contoh penentuan konfigurasi penyemat untuk antarmuka. Sobat bisa
menggunakan penyemat lainnya sesuai dengan rancangan rangkaian yang dibuat.
Tapi pada modul ini dicontohkan menggunakan P1.2 untuk RST, P1.3 untuk SCLK dan
P1.4 untuk I/O.
RST_RTC bit p1.2
CLK_RTC bit p1.3
DIO_RTC bit p1.4
Pada modul berikut ada beberapa register yang mungkin digunakan
antara lain Register R0 yang berisi alamat register untuk menampung data pada
mode BURST. Sementara untuk lokasi register DS1302 menggunakan DPL dari DPTR, isi
dari DPH diabaikan meskipun nanti akan ikut terpengaruh pada operasi INC DPTR
yang mungkin saja digunakan. Bit0 dari DPL juga
diabaikan karena akan dimanipulasi pada subrutin baca atau tulis yang dipanggil
maka jika menggunakan perintah INC DPTR setidaknya perlu diulang sebanyak 2
kali.
Berikut adalah subrutin yang berhubungan dengan rutin di luar dari
modul yang dimulai dari subrutin DS1302_ClockRun yang berguna untuk
mengaktifkan osilator serpih DS1302. Disini register DPL harus bernilai 00H
sebagai alamat dari register SEC. Setelah pemanggilan operasi subrutin DS1302_Read
maka selanjutnya memanipulasi data akumulator agar nilai ACC.7 bernilai 0 untuk
kemudian ditulis kembali dengan subrutin DS1302_Write.
DS1302_ClockRun:
mov dpl,
#0
acall DS1302_Read
anl a,
#01111111b
acall DS1302_Write
ret
Subrutin di atas tidak berdiri sendiri karena mengandung operasi
subrutin DS1302_Write yang mana hanya dapat dilakukan dengan menon-aktifkan bit
WP dari serpih terlebih dahulu menggunakan operasi subrutin DS1302_Enable.
Untuk mencegah terjadinya penulisan ke dalam register maka rutin harus
memanggil DS1302_Disable sebagai penutupnya.
Operasi subrutin DS1302_Enable dan DS1302_Disable dapat dilihat
di bawah ini. Kedua subrutin sama-sama menggunakan DPL dengan nilai 10001110
yaitu alamat register CONTROL. Pada subrutin DS1302_Enable register akumulator
berisi 0 untuk ACC.7 bernilai 0 dan subrutin DS1302_Disable ACC.7 harus
bernilai 1.
DS1302_Enable:
mov a,
#0
mov dpl,
#10001110b
acall DS1302_RTC_Write
ret
DS1302_Disable:
mov a,
#10000000b
mov dpl,
#10001110b
acall DS1302_RTC_Write
ret
Pada operasi subrutin menulis berikut, informasi data
ditempatkan pada akumulator dan alamat register yang akan diproses ditempatkan
pada DPL. Pada subrutin DS1302_Write nilai DPL dimanipulasi agar Bit7
berharga 1 dan Bit0 berharga 0. Sementara pada DS1302_Read nilai DPL
juga dimanipulasi agar Bit7 berharga 1 tetapi Bit0
menjadi 1.
Yang harus diperhatikan pada kedua operasi subrutin baik
DS1302_Write maupun DS1302_Read adalah keduanya dapat digunakan untuk operasi
pada kelompok register CLOCK atau RAM. Untuk operasi pada kelompok register RTC
atau CLOCK maka pastikan bahwa nilai DPL pada Bit6 harus bernilai 0
sementara untuk operasi RAM Bit6 dari DPL harus bernilai 1.
DS1302_Write:
push acc
setb RST_RTC
mov a,
dpl
orl a,
#10000000b
anl a,
#11111110b
acall DS1302_WriteSerial
pop acc
acall DS1302_WriteSerial
clr RST_RTC
ret
DS1302_Read:
setb RST_RTC
mov a,
dpl
orl a,
#10000001b
acall DS1302_WriteSerial
acall DS1302_ReadSerial
clr RST_RTC
ret
Berikut ini adalah 2 operasi subrutin yang berkaitan dengan mode
BURST baik untuk CLOCK maupun RAM. Sebelum memanggil dan menjalankan subrutin-subrutin
ini ada beberapa register yang harus ditentukan agar sesuai pengoperasiannya.
Untuk operasi CLOCK BURST maka nilai register R7 maksimal berisi
8 sesuai jumlah register pada kelompok CLOCK kemudian register DPL bernilai
sembarang yang penting bit DPL.6 harus bernilai 0. Untuk mudahnya maka
sebaiknya DPL diisi dengan 00H. Karena operasi CLOCK BURST membutuhkan maksimal
8 byte data yang harus ditampung maka register R0 setidaknya harus berisi
lokasi RAM yang mampu menerima sebanyak 8 byte data.
Untuk operasi RAM BURST maka nilai register R7 maksimal berisi
1FH atau 31 sesuai jumlah register pada kelompok RAM kemudian register DPL
bernilai sembarang yang penting bit DPL.6 harus bernilai 1. Untuk mudahnya maka
sebaiknya DPL diisi dengan 0FFH atau 255. Karena operasi RAM BURST membutuhkan maksimal
31 byte data yang harus ditampung maka register R0 setidaknya harus berisi
lokasi RAM yang mampu menerima sebanyak 31 byte data.
DS1302_WriteBurst:
push 07h
setb RST_RTC
mov a,
dpl
orl a,
#10111110b
anl a,
#11111110b
acall DS1302_WriteSerial
pop 07h
WriteBurst:
mov a,
@r0
acall DS1302_WriteSerial
inc r0
djnz r7,
WriteBurst
clr RST_RTC
ret
DS1302_ReadBurst:
push 07h
setb RST_RTC
mov a,
dpl
orl a,
#10111111b
acall DS1302_WriteSerial
pop 07h
ReadBurst:
acall DS1302_ReadSerial
mov @r0,
a
inc r0
djnz r7,
ReadBurst
clr RST_RTC
ret
Semua operasi subrutin yang tertulis pada modul di atas
membutuhkan operasi subrutin internal. Ada 2 buah subrutin yang berkaitan
langsung dengan antarmuka antara mikrokontroler dengan serpih DS1302. Kedua
subrutin tersebut adalah DS1302_WriteSerial dan DS1302_ReadSerial. Kedua
subrutin ini beroperasi dengan menulis atau membaca bit per bit dari data
serpih secara serial hingga mencapai 1 byte atau 8 bit.
DS1302_WriteSerial:
push 07h
mov r7,
#8
WriteDataRTC:
rrc a
jnc WriteDataRTC_0
setb DIO_RTC
ajmp PulsaWriteRTC
WriteDataRTC_0:
clr DIO_RTC
PulsaWriteRTC:
clr CLK_RTC
setb CLK_RTC
djnz r7,
WriteDataRTC
rrc a
pop 07h
ret
DS1302_ReadSerial:
push 07h
clr a
setb DIO_RTC
mov r7,
#8
PeriksaDataRTC:
setb CLK_RTC
clr CLK_RTC
jnb DIO_RTC,
BacaDataRTC_0
setb c
ajmp GeserDataRTC
BacaDataRTC_0:
clr c
GeserDataRTC:
rrc a
djnz r7,
PeriksaDataRTC
pop 07h
ret
Demikian modul
antarmuka dengan DS1302 pada keluarga MCS51 dan aku menamai modul ini
DS1302.TXT untuk penggunaan pada aplikasi lainnya nanti.
Udah ya, makasih
udah baca postingan aku. Semoga bisa bermanfaat, sukur-sukur bisa diterapkan
oleh sobat semua.
Salam....
mas mohon bantuannya, cara membuat modul I2C.txt gmana caranya atau minta file I2C.txt, 24c64.txt trimakasih. kirim ke email : luthfan_5091@yahoo.co.id
BalasHapusSoal list program I2C.txt dan AT24C64 sudah saya kirim via email. Artikel tentang AT24C64 juga sudah ada. Silahkan baca :
BalasHapushttp://electronicdesignportal.blogspot.com/2012/09/antarmuka-i2c-untuk-memori-at24c3264.html
smoga bisa jadi inspirasi. Ditunggu komentar selanjutnya.
trims
Apa bisa mengunakan 2ic DS1302 secara bersamaan sebagai RAM penampung memory 60 bytes? klo bisa bagaimana cara nya mas Sigit ? mohon pencerahan nya.
BalasHapusBisa saja....
BalasHapusDS1302 memiliki 3 pin antar muka RST, SCLK dan I/O. Masing2 pin SCLK dan I/O bisa diparalel untuk beberapa IC. RST tidak bisa karena berfungsi memilih IC yang akan diproses atau harus dialamati. Bisa pakai dekoder atau paling simpel pakai saja port mikrokontroler yang ada. Satu pin RST dari masing2 DS1302 dihubungkan ke port uC. Jadi kalau 2 IC maka butuh 2 port. Jadi kebutuhan port total adalah 4 untuk 2 IC DS1302 yang dikaskade.
Smoga cukup jelas ya....