Jam Digital Dengan RTC DS1307
RTC yang digunakan dalam project ini adalah RTC DS1307 dengan antarmuka I2C. RTC DS1307 menyediakan pewaktu dalam detik, menit, jam, hari, tanggal, menit, bulan dan tahun yang memiliki akurasi hingga tahun 2100. Selain itu, RTC ini menyediakan pin battery-backup untuk dihubungkan pada baterai lithium 3V atau sumber energi lain sehingga ketika supply energi utama (VCC dan GND) mati, battery-backup mengambil alih supply energi pada RTC dan timer tetap berjalan sebagaimana mestinya. Penggunaan 3V lithium 48mAh battery-backup, RTC hanya mengkonsumsi arus kurang dari 500nA sehingga dengan baterai tersebut mampu bertahan hingga 11 tahun. Pengaksesan alamat perangkat dan register Timekeeper pada RTC ini melalui antar muka I2C dengan format seperti gambar berikut.
Penulisan data pada RTC (slave receive mode)
Pembacaan data dari RTC (slave transmitter mode)
Untuk menampilkan jam dan tanggal dari RTC DS1307 dilakukan dengan pengaksesan register pewaktu pada RTC dan ditampilkan pada LCD dengan program yang dibuat pada CodevisionAVR. Pada Codevision AVR terdapat fitur I2C bus dan koneksi pada RTC DS1307 sehingga hanya tinggal melakukan pengaksesan data pada register timekeeper RTC. Berikut langkah pengaturan pada widzard CodevisionAVR untuk pengaturan fitur I2C bus dan koneksi pada RTC DS1307
Pengaturan I2C bus dan koneksi RTC DS1307 pada widzard Codevision AVR
Dari pengaturan widzard I2C bus dan koneksi RTC DS1307 diatas di ketahui bahwa jalur I2C berada pada PORTA.0 sebagai serial clock (SCL) dan PORTA.1 sebagai serial data (SDA). Dari pengaturan tersebut akan ter-include fungsi-fungsi pengaksesan register RTC DS1307 yang terdapat pada file “ds1307.h.” fungsi-fungsi tersebut antara lain:
- unsigned char rtc_read(unsigned char address) adalah untuk membaca pada alamat tertentu dari register timekeeper RTC
- void rtc_write(unsigned char address,unsigned char data) adalah untuk menulis pada alamat tertentu dari register timekeeper RTC
- void rtc_init(unsigned char rs,unsigned char sqwe,unsigned char out)adalah untuk inisialisasi IC DS1307
- void rtc_get_time(unsigned char *hour,unsigned char *min,unsigned char *sec) adalah 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) adalah 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) adalah 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) adalah untuk mensetting tanggal, bulan dan tahun dari RTC dalam satu kali akses.
Berikut screenshoot jam digital lengkap dengan hari serta tanggal menggunakan RTC DS1307
nB: jika terjadi error/problem silahkan tanyakan dibagian komentar
contoh source code bisa dilihat disini jam.c
by coys -> coys.jrux@gmail.com


coba kunjungi blog saya juga dong mas, lumayan membahas sedikit tentang mikrokontroler.
electrocontrol.wordpress.com
nice blog mas,,,
kita tukeran link yuk,,,,
mas kenapa setelah di download clock rtcnya gak jalan ya,,,
mohon pencerahannya,,,
ga jalannya bagaimana ya,,,???
yang muncul di LCD apa,,,???
nice bro,, semoga bemanfaat,,, mampir t4 gw jg y bro..!! ada dikit tentang MCU.. roborace.wordpress.com
mas, sy lagi buat jam digital, udah jalan, tapi setelah berapa lama dijalankan, sekitar 5 jam, trus saya bandingkan dengan jam di komputer, ternyata tidak persis sma, selisih detik-nya terlambat 5 detik, atau 1 jam 1 detik, kira2 knp mas ya?
kemungkinan itu gara2 cristalnya kurang pas…
selama ini jam digital yang saya buat sama dengan yang da di komputer…
coba crystal pake punya RTC motherboard yang rusak, kali ja bisa pas…
mas, listing programnya kok g bisa d download? tlng kirim ke email saya arits_e.physc@hotmail.com, mksh banget n maaf ngerepotin…
saya coba kok bisa yach,,,
oke deh saya kirim via email jika anda tidak bisa download langsung…
mas boleh minta library buat DS1307? di codevision saya g ada soalnya library ds1307, alhasil waktu di compile butuh library ds1307
wah ma’af q dah g punya software tu coz q dah migrasi,,,
emang codevision versi berapa yang dipake,,??
coba pake codevision yang lebih baru yang sudah include library ds1307 misal v2.04..
ni linknya http://tinyurl.com/3snbqgc
saia pake yang 2.05 malahan, dah dimasukin #include keterangannya g bisa dibuka
wa cari di folder “bin” ma “inc” juga g ada
kok bisa ya,,,??
apa setting komunikasi I2C untuk ds1307 sudah di enable..??
sudah mas, saya kasih ke port A
oh ya mas , saya khn pake sensor n butuh ADC di portA trus DS1307 juga saya kasih ke port A kog tulisannya konflik y? tapi ada peringatan itu saya abaikan toh ADC yang saya gunakan salah satu port , kalo g portA.1 ya portA.2
nah buat ngatur i2c buat ds1307 itu gmana ntar mas buat milih portnya? soalnya khn di codevision cuma ada pilihan mau di aktivin di port berapa gt.
Sudah pasti akan konflik karena dua fitur diterapkan pada port yang sama…
seharusnya gunakan port yang berbeda walaupun ADC yang digunakan hanya satu channel
disetting I2C terdapat settingan pada port apa yang akan di gunakan dan bit berapa yang digunakan sebagai SC dan SDA. misal dari contoh gambar “Pengaturan I2C bus dan koneksi RTC DS1307 pada widzard Codevision AVR” diatas di ketahui bahwa port i2c yang digunakan yaitu
Port A dan SCL pd bit 0 serta SDA bit 1 (SCL=PORTA.0 dan SDA=PORTA.1). jadi pin itulah yang digunakan sebgai interface i2c mikrokontroler dengan RTC ds1307.
Mas saya masih awam nih mau nanya.. kl saya pengen nampilin nilai input dari saklar pull-up ke LCD bagaimana caranya ya. untuk input saya pakai portD.2 dan LCD pakai portC. saya ingin ketika saklar ditekan maka LCD menunjukkan karakter atau angka yg kita inginkan.. terimakash mas
untuk Xtal RTC apakah perlu capasitor? soalnya kemaren ada yang nyaranin pake capasitor, efeknya emg apa antara pake sama nggak make?
saya rasa bisa, tu tuk kestabilan osilasi dari osilator xtal itu sendiri,,,
mas rangkain dah saya sesuai gambar yang di share di link download, kog kalo saya hub ke 5Vdc, IC ds1307 malah panas, apa ngeshort ya?padahal dah sesuai rangkaian lo
oh g jadi mas ternyata saya salah masukin Vcc bukan 5Vdc tapi 12Vdc pantes panas wkwkwkw
mas ane coba pakai program yg ente share kog angkanya 0 ama kedip2 aja
g jalan timernya, kenapa ya?
kemungkinan komunikasi antara RTC dengan mikronya da problem.
dan bisa jadi disebabkan oleh kristal yang g cocok dengan RTC ds1307 karena kalo kristal ga cocok kadang jam keluar di lcd tp g jalan…
saya pake yang 32,768 masa ia g cocok? kalo saya mikirnya di masalah kodingannya kayaknya mas, soalnya kemaren ntuw pernah nyoba pake codingan keluar angka yang terus jalan ampe 165 lebih tapi malah g berhenti2
oh ya untuk setting RTC apa emg cuma butuh command
rtc_set_time(&ho,&min,&sec);
rtc_set_date(&day,&month,&year);
waktu inisialisasi? trus pemilihan port cuma pengaruh di hubungan uc dg RTC n yg dibutuhin cm kaki SDA n CLK kah atau ada yg lain?
2 hari ane coba lom berhasil2 jg
oh ya mas kaki 4 n 7 g usah dihub gpp khn?
menunjukkan angka 165 itu menandakan komunikasi I2C bermasalah dan sering disebabkan oleh kristal yang g cocok. jangan beranggapan bahwa kristal kita sudah pas hanya dengan melihat angka 32.678 dikomponen karena banyak temen2 yang email lgsg tanya problem spt anda ini n ternyata problem mereka bener di kristal yang g cocok,,,
coba lah ganti kristal dengan kristal rtc motherboard cpu
untuk kepastiannya command yang digunakan silahkan search “RTC ds 1307″ di help codevision AVR. Insya Allah yang akan muncul adalah fungsi2 yang telah saya jelasin diatas yang semua terkandug dalam library ds1307.h
yups,,,
yang dibutuhkan dalam komunikasi uc dengan rtc hanya dua jalur itu yaitu scl dan sda.
sebenarnya pin 7 bisa saja tidak digunakan tp alagkah baiknya sesuai datasheet kita beri external pull up. sedangkan pin 4 adalah pin gnd so sdh pasti di gunakan sebagai supply tegangan rtc dari adaptor dan dari baterai backup.
kristal rtc motherboard CPU? ukuran yang berapa mas?apakah 32.768 juga?bedanya apa dengan kristal buat uc gini ?
yang frek 32.768 KHz juga,,,
sebenarnya kristal cpu dan uc sama saja cuma dalam hal ini kristal 32.678KHz untuk RTC ds1307 ini cukup sensitif, soalnya pengalamnq dan teman2 dulu sampe gonta-ganti kristal yang pas agar rtc bisa berjalan lancar.
Memang secara tampak mata kristal 32.678KHz sama saja tapi kayaknya dari bahan bisa berbeda,,,
oh ya, kalo di toko ntar bilangnya apa mas biar tau bedanya ama kristal yang bukan buat motherboard?
wah ane juga belum tahu beli yang kayak pa yang benar,,,
soalnya dulu q beli 4 di digiware online n yang bisa cuma 2…
n yang dua yang lainnya g bisa walaupun dicoba di beberapa rangkaian rtc ds1307 yang beda sedangkan yang 2 yang bisa semua jika dipasang dimodul rtc yang lainnya,,,
ane jg bgung kenapa bisa gtu,,,
emg fungsinya resistor sbg pull up tuw apa sh mas? besarnya kisaran berapa biasanya?
terus tegangan buat SDA n SCLK berapa kira2? ksaran 0-5 Vdc (TTL) kah?
soalnya keluarnya jadi aneh sekarang, kadang 165 smua, terkadang ngacak kaya stopwatch.
kalau setahu saya, resistor pull up itu untuk memastikan bahwa I/O bernilai 0 atau 1 (tidak mengambang atau dalam kondisi floating point).
jadi untuk itulah fungsi pull up pada sda dan scl dan jika tanpa pull up bisa membingungkan mikrokontroler apakah bernilai 1 atau bernilai 0.
kalau standart untuk input mikrokontroler biasanya bernilai 10K dan untuk rtc ini bernilai sekitar 1K-1K8.
hwahahaha, akhirnya jam nya mau jalan mas, huahahaha
ternyata memang bener masalah di resistor pull upnya
kemaren wa pake yang 10k g jalan
sekarang wa pake yang 1k, 1/4 watt baru mau nie
tapi sempet error soalnya kabel kurang kenceng, maklum pake project board
thank you mas,
oh ya buat yang kirim sms ntar ane kabarin lagi ya mas, belom beli atmega 16 soalnya
alhamdulillah,,,
syukurlah kalo sudah bisa jalan,,,
tapi kadang error mas wkwkwkwk
kabelnya rewel, senggol dikit jadi simbol g jelas kluarnya hadeehh
yo memang rtc agak rawan. kalo bisa kbel untuk i2c dibuat sekencang mungkin dan di posisikan tempat di lokasi jrg disentuh ja,,,
bro…gimana cara membaca jam pada rtc…jadi
jika jam 1 amrelay1 on
jika jam 2 am relay2 on
jika jam 3 am relay3 on
jika jam 4 pm relay1 off
jika jam 5 pm relay2 off
jika jam 6 pm relay3 off
itu tinggal menambahkan if conditional ja,,,
misalkan dari contoh program saya,,,
mas klw mw ngubah jam lewat pushbutton tanpa diprogramnya bisa ngak mas?
//rtc_set_time(20,12,45); mas ngeset jamnya knp pkai // berarti ini cuma komentar aja?
bisa saja,,,
tinggal menambahkan rutin tombol untuk setting jamnya dan menuliskannya pada RTC…
di source code yang saya lampirkan disana sengaja saya jadikan komentar. Jika ingin mengeset jam tinggal hapus tanda “//” dan atur nilai seuai waktu sekarang n kalo setting jam telah benar code itu dijadikan komentar lagi lalu downloadkan lagi pada ucontroler agar ketika sewaktu-waktu ukontroler mati jam tidak kembali ke waktu yang setting awal.
mas kok gak bisa di download ya??
coba gunakan link berikut !
http://ubuntuone.com/0HnM5b6hvcQs65qzX3vX76
mas nny untuk nampilin hari ma bulan tapi dalam bentuk tulisan gmn??
mohon pencerahaanny mas.
mohon maaf atas keterlambatan responnya. Untuk menampilkan hari dalam bentuk tulisan bisa menggunakan contah syntac berikut.
//~~~~~~~~~~~~routine read day on RTC unsigned char day_rtc(void) { unsigned char data; i2c_start(); i2c_write(RTC_ADDR); i2c_write(0x03); i2c_start(); i2c_write(RTC_ADDR | 1); data=i2c_read(0); i2c_stop(); return data; } //~~~~~~~~~~~~Initial variable unsigned char a; char *day[7]={"Sen","Sel","Rab","Kam","Jum","Sab","Min"}; //~~~~~~~~~~~~display to LCD a=day_rtc(); a-=1; lcd_gotoxy(2,1); lcd_puts(day[a]);Menampilkan bulan dengan tulisan bisa dengan cara yang sama.
mas, kan udah aku coba pada saat dikompile.
undefined RTC_ADDR yaa?
Itu karena belum di define alamat dari rtc itu sendiri…
tambahkan syntact ini di bag atas program
mas boleh minta program totalnya…
coba gunakan link download yang saya berikan di komen diatas.
makasih mas atas ilmunya
permisi gan
bole minta simulasi dalam PROTEUS dan file program code vision jam digitalnya apa egak..?
mohon bantuanya..
kirim ke email saya : komaruzamanahmad@gmail.com
wah q ga pernah pake simulasi2 gan,,,
banyak g cocoknya dengan praktek,,,
Mas, boleh minta program totalnya??
kirim ke email saya mas : fajarpurnama91@gmail.com
cek link diatas untuk source code nya. semoga bermanfaat.
Mas, kalau RTC nya udah bisa nampilin jam, tapi ngk mau berdetak jam nya/ngk mw jalan.
itu kira2 masalahnya dimana ya mas???
mohon maaf atas keterlambatan responnya.
sepertinya masalahnya terjadi pada crystalnya yang kurang pas sehingga bermasalah dalam mendetak RTC itu sendiri.
Mas, jadi kesimpulannya kalo RTC DS1307 ini error pembacaannya atau ngaco. Yg perlu diperhatiin (pada hardware) berarti Crystal & Resistor Pull-up nya ya?
Ada lgi ga mas penyebab masalahnya?? (Selain software)
ya bisa jadi dari RTC itu sendiri yang rusak…
jika sebelumnya sudah pernah bisa berdetak kemudian tidak jalan lagi berarti RTC nya rusak…
tapi kalau belum pernah jalan, fokus saja sama dua hal tersebut yaitu cristal dan resistor pull up (biasanya 1K-1K8)
mas saya menggunakan simulasi proteus ko muncul pesan error di watchdog setup sequence is time out. do nothing knp ya?
wah, ma’af q kurang paham mengenai proteus karena belum pernah pakai.
di coba langsung saja pada hardware karena kebanyakan antara simulasi dan prakteknya berbeda.
kakak udah saya coba programnya..
tapi kenapa ada yang eror
Error: D:\1-FOLLOWER\SISMIN\LATIHAN WITH ISAL\jam.c(171): too few arguments in function call
rtc_get_date(&d,&mo,&y);
kenapa yah kak,mohon bimbingannya
terima kasih
Dari error reportnya terdapat info terlalu banyak argumen pada baris ke-171. coba hilangkan argumen yang gak penting tersebut. atau kalau bingung kirim ja source code nya ke email saya. nanti saya bantu cek.
Mas, tanya nih saya udah buat sama persis dengan skema dan prog jenengan udah bisa jalan lancar dan cocok tapi kenapa bila rtc dipasang baterai lithium jam langsug berhenti dan muncul angka 05 05 05. Mohon pencerahannya? Trimakasi.
boleh lihat skema rangkaiannya? kemungkinan terjadi kesalahan di rangkaiannya sehingga komunikasi i2c nya bermasalah atau malah RTC yang berhenti berdetak.
Om source kodenya kok didonlot kosoong ?
saya coba barusan ada kok,,,
bisa view by google docs juga tanpa download…
Mas kalo di compile kok hasil file hex sebesar 13kb gak cukup ke mega8535.?
itu hasil compile program apa…??
coba di cek di informasi ketika compile…
disana kan detail menyebutkan berapa flash memori dkk yang di butuhkan.
kalau lebih dari 8K otomatis ditolak karena mega8535 memori flashnya hanya 8K..
Mas, aku dah ganti-ganti IC DS1307 nya, kmudian rsistor pull up-nya aku dah ganti juga jadi 1K maupun 4K7, aku jga dah ganti crystal-nya dgn crystal motherboard komputer, malah aku dah bli modul RTC di mikron123.com, aku juga dah brapa kali gonta2x minsis sma chip mikronya, kabelnya dah ku cek nyambung smua, program dah sma smua, nggk ada yg error di CV…
tpi kok ttap sja yg kluar nilai 165,165 itu ya…
masalahnya dmna ya…???
waduh….
sampe hampir segala cara dah dicoba tapi tetap belum berhasil.
coba gunakan program ini [0], muncul pesan di LCD nya apa?
1. jika “bus not free” –> komunikasi i2c konflik, atau koneksi kurang bagus
2. jika “bad slave” –> pulp up g pass (biasanya 1K-1K8), cristal g cocok, RTC rusak.
3 jika “good slave” –> fine alias program seharusnya berjalan normal
pastikan dulu pin scl dan sda sama yaitu scl –> PORTA.0 dan sda –> PORTA.1
[0] http://tinyurl.com/cek-connections
mas mau tanya i2c apa seperti inteface kah? atau pakai rangkaian mas?
masih bingung mas.. mklum newbie
I2C itu sama halnya dengan USART, TWI yaitu sistem komunikasi bukan interface. I2C tidak ada rangkaian khusus tetapi cukup menghubungkan pin SCL dan SDA komponen yang akan dihubungkan/dikomunikasikan dan cukup menambahkan resistor pull up.
Untuk contoh rangkaiannya bisa dilihat di link berikut.
http://tinyurl.com/abry4u8
mas saya pake I2C
jamya suka telat dari komputer berarti itu crystalnya ya?
terus kl saya non aktifkan micro agak lama setengah jam-1 jam
jamnya jalan tp kok ngeset di pengaturan awal lagi ya?
terus kl mikro di nonaktifkan bbrpa jam jam jadi g jalan..
kenapa ya?
jadinya setiap ngaktifin harus write ulang lagi..
kalau jamnya terlambat bisa jadi crystalnya g pas.
oy, ini rtc nya sudah dipasang baterai backup kan..??
kalau sudah dipasang baterai backaup tetapi tetap kembali ke set awal bisa jadi system backupnya tidak jalan. Coba check kembali ke datasheet untuk rangkaiannya.