DS1307 merupakan IC Real Time Clock (RTC) yang dapat diakses dengan mikrokontroler menggunakan komunikasi serial I2C. Berikut ini saya beri contoh untuk menampilkan RTC DS1307 pada LCD dan Hyperterminal menggunakan Bascom AVR. Dengan adanya RTC ini maka kita dapat menampilkan waktu yang berupa jam, menit, dan detik, serta tanggal, yaitu hari, bulan dan tahun, untuk selengkapnya bisa dilihat di datasheet.
Berhubung gambar dibawah ini dimaksudkan untuk kepentingan simulasi langsung dengan Proteus, maka kalau ingin mempraktekkannya dengan alat yang nyata, virtual terminal ini dapat diganti dengan rangkaian serial atau biasanya menggunakan IC MAX232, sebagai berikut:
Hyperterminal dapat diakses dengan meng-klik Start --> All Programs --> Accessories --> Communications --> Hyperterminal. Kemudian lakukan pengaturan sesuai yang diminta pada wizard jika Hyperterminal baru pertama kali dibuka, selanjutnya pilih COM port yang digunakan atau terhubung dengan kabel DB9 atau USB, dan baud rate yang digunakan, dalam program ini saya menggunakan baud rate 9600.
Contoh tampilan pada Hyperterminal sbb:
Hyperterminal dapat diakses dengan meng-klik Start --> All Programs --> Accessories --> Communications --> Hyperterminal. Kemudian lakukan pengaturan sesuai yang diminta pada wizard jika Hyperterminal baru pertama kali dibuka, selanjutnya pilih COM port yang digunakan atau terhubung dengan kabel DB9 atau USB, dan baud rate yang digunakan, dalam program ini saya menggunakan baud rate 9600.
Contoh tampilan pada Hyperterminal sbb:
Dan jangan lupa, agar jam dan tanggal pada RTC tetap dapat berjalan pada alat, pasang baterai lithium 3 volt pada kaki 3 atau VBat.
Simulasi dengan Proteus:
Data jam dan tanggal pada RTC dapat diubah pada Hyperterminal, tekan huruf "A" pada keyboard untuk mengganti data jam, dan huruf "B" untuk mengganti data tanggal.
Listing program Bascom AVR nya:
'=======================================================
'Programmer: Wahyu Rahmaniar'Company : Technologination
'
'RTC DS1307
'=======================================================
$regfile = "m32def.dat"
$crystal = 8000000
$baud = 9600
Config Lcdpin = Pin , Rs = Portc.2 , E = Portc.3 , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7
Config Lcd = 16 * 2
$lib "ds1307clock.lib"
Config Sda = Portc.1
Config Scl = Portc.0
Const Ds1307w = &HD0
Const Ds1307r = &HD1
Config Clock = User
Dim Weekday As Byte
Dim Char As String * 10 , Tanda As String * 1
Dim Jam As String * 10 , Menit As String * 10 , Detik As String * 10
Dim Hari As String * 10 , Bulan As String * 10 , Tahun As String * 10
Dim A As Byte , B As Byte , C As Byte
Dim X As Byte , Y As Byte , Z As Byte
Dim Waktu As String * 10
Dim Tanggal As String * 10
Print "DS1307"
Waitms 100
Time$ = "15:30:00"
Date$ = "04-30-11"
Print "Tanggal: " ; Date$
Print "Waktu:" ; Time$
Cls
Cursor Off
Locate 1 , 1
Lcd "Tanggal: " ; _day ; ":" ; _month ; ":" ; _year
Locate 2 , 1
Lcd "Waktu : " ; _hour ; "-" ; _min ; "-" ; _sec
Wait 1
Mulai:
Do
Tanda = Inkey()
If Tanda = "A" Then
'untuk ganti settingan waktu RTC tekan huruf A pada keyboard
Input "Masukkan waktu (hh:mm:ss):" , Waktu
Jam = Mid(waktu , 1 , 2)
Menit = Mid(waktu , 4 , 2)
Detik = Mid(waktu , 7 , 2)
Time$ = Jam + ":" + Menit + ":" + Detik
A = Val(jam)
B = Val(menit)
C = Val(detik)
_hour = A
_min = B
_sec = C
Gosub Settime
End If
If Tanda = "B" Then
'untuk ganti settingan tanggal RTC tekan huruf A pada keyboard
Input "Masukkan Tanggal (mm-dd-yy):" , Tanggal
Bulan = Mid(tanggal , 1 , 2)
Hari = Mid(tanggal , 4 , 2)
Tahun = Mid(tanggal , 7 , 2)
Date$ = Bulan + "-" + Hari + "-" + Tahun
X = Val(bulan)
Y = Val(hari)
Z = Val(tahun)
_day = Y
_month = X
_year = Z
Gosub Setdate
End If
Print "Tanggal: " ; Date$
Print "Waktu:" ; Time$
Cls
Cursor Off
Locate 1 , 1
Lcd "Tanggal: " ; _day ; ":" ; _month ; ":" ; _year
Locate 2 , 1
Lcd "Waktu : " ; _hour ; "-" ; _min ; "-" ; _sec
Wait 1
Loop
End
'Pengambilan data RTC DS1307
Getdatetime:
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cstart
I2cwbyte Ds1307r
I2crbyte _sec , Ack
I2crbyte _min , Ack
I2crbyte _hour , Ack
I2crbyte Weekday , Ack
I2crbyte _day , Ack
I2crbyte _month , Ack
I2crbyte _year , Nack
I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return
Setdate:
_day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 4
I2cwbyte _day
I2cwbyte _month
I2cwbyte _year
I2cstop
Return
Settime:
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cwbyte _sec
I2cwbyte _min
I2cwbyte _hour
I2cstop
Return
atau download simulasi RTC DS1307 dan source code.
Jika sudah didownload sekali, maka download kembali dengan menghapus bagian program:
Time$ = "15:30:00"
Date$ = "04-30-11"
Date$ = "04-30-11"
Karena RTC sekali download sudah tersimpan datanya dan jika ingin diubah bisa menggunakan Hyperterminal seperti yang telah dijelaskan diatas.
Kalau bagian tsb tidak dihapus maka jam dan tanggal akan terus mengulang dari pengaturan tsb.
-ayuchan-