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

Tampilan Jam Digital

nB: jika terjadi error/problem silahkan tanyakan dibagian komentar

contoh source code bisa dilihat disini jam.c

by coys -> coys.jrux@gmail.com

  • Trackback are closed
  • Comments (0)
  1. coba kunjungi blog saya juga dong mas, lumayan membahas sedikit tentang mikrokontroler.

    electrocontrol.wordpress.com

    • nice blog mas,,,
      kita tukeran link yuk,,,,

      • hamim thohari
      • November 6th, 2015

      Dear all bisa tolong kasih contoh program baca dan tulis di 56 byte ram ds1307 thanks

        • coys
        • November 17th, 2015

        Saya rasa mirip dengan program berikut

        Baca RAM

        unsigned char day_rtc(void)
        {
        unsigned char data;
        i2c_start();
        i2c_write(RTC_ADDR);
        i2c_write(0x03); // diganti dengan alamat ram dari 0x08h–3Fh
        i2c_start();
        i2c_write(RTC_ADDR | 1);
        data=i2c_read(0);
        i2c_stop();
        return data;
        }

        Nulis RAM

        void ram_write(unsigned char address, unsigned char data){
        i2c_start();
        i2c_write(RTC_ADDR);
        i2c_write(address); // diganti dengan alamat ram dari 0x08h–3Fh
        i2c_write(data); // diganti nilai data yang akan ditulis
        i2c_stop();
        delay_ms(10);
        }

    • chy_ko
    • July 8th, 2011

    mas kenapa setelah di download clock rtcnya gak jalan ya,,,
    mohon pencerahannya,,,

    • roborace
    • August 18th, 2011

    nice bro,, semoga bemanfaat,,, mampir t4 gw jg y bro..!! ada dikit tentang MCU.. roborace.wordpress.com

  2. 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…

    • arifureta
    • September 25th, 2011

    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… 🙂

    • ari
    • October 9th, 2011

    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

    • ari
    • October 9th, 2011

    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..??

        • ari
        • October 10th, 2011

        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.

  3. ari :
    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

    Sudah pasti akan konflik karena dua fitur diterapkan pada port yang sama…
    seharusnya gunakan port yang berbeda walaupun ADC yang digunakan hanya satu channel

    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.

    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

    • ari
    • October 11th, 2011

    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,,,

        • ari
        • October 18th, 2011

        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

        • ari
        • October 18th, 2011

        oh g jadi mas ternyata saya salah masukin Vcc bukan 5Vdc tapi 12Vdc pantes panas wkwkwkw

    • ari
    • October 19th, 2011

    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…

        • ari
        • October 21st, 2011

        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?

  4. ari :
    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

    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

    oh ya untuk setting RTC apa emg cuma butuh command
    rtc_set_time(&ho,&min,&sec);
    rtc_set_date(&day,&month,&year);

    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

    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?

    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.

      • ari
      • October 22nd, 2011

      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,,,

    • ari
    • October 22nd, 2011

    coys :
    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,,,

    • ari
    • October 31st, 2011

    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.

        • ari
        • November 6th, 2011

        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

  5. ari :
    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,,, 🙂 🙂 🙂

      • ari
      • November 6th, 2011

      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,,,

    • wan
    • November 9th, 2011

    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,,,

      //~~~~~~~~~~~~~~~~~
      rtc_get_time(&h,&m,&s);
      if ( h==1 && m==0 && s==0) PORTB.0=1;    //Relay1
      if ( h==2 && m==0 && s==0) PORTB.1=1;    //Relay2
      if ( h==3 && m==0 && s==0) PORTB.2=1;    //Relay3
      if ( h==4 && m==0 && s==0) PORTB.0=0;    //Relay1
      if ( h==5 && m==0 && s==0) PORTB.1=0;    //Relay2
      if ( h==6 && m==0 && s==0) PORTB.2=0;    //Relay3
      //~~~~~~~~~~~~~~~~~
    • donis
    • December 4th, 2011

    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?

    • donis :

      mas klw mw ngubah jam lewat pushbutton tanpa diprogramnya bisa ngak mas?

      bisa saja,,,
      tinggal menambahkan rutin tombol untuk setting jamnya dan menuliskannya pada RTC…

      //rtc_set_time(20,12,45); mas ngeset jamnya knp pkai // berarti ini cuma komentar aja?

      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.

    • rahmad
    • January 27th, 2012

    mas kok gak bisa di download ya??

    • noname
    • March 15th, 2012

    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.

    • noname
    • March 22nd, 2012

    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

      #define RTC_ADDR 0xD0
    • noname
    • March 30th, 2012

    mas boleh minta program totalnya…

    • coba gunakan link download yang saya berikan di komen diatas.

  6. makasih mas atas ilmunya

    • ahmad
    • May 16th, 2012

    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,,,

    • Fajar Purnama
    • June 9th, 2012

    Mas, boleh minta program totalnya??
    kirim ke email saya mas : fajarpurnama91@gmail.com

    • cek link diatas untuk source code nya. semoga bermanfaat.

        • Fajar Purnama
        • June 12th, 2012

        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.

    • InsideMan
    • June 27th, 2012

    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)

    • tri
    • September 1st, 2012

    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.

    • Syaefudin
    • November 16th, 2012

    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.

    • yulianto
    • December 25th, 2012

    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.

    • Gothree
    • December 30th, 2012

    Om source kodenya kok didonlot kosoong ?

    • saya coba barusan ada kok,,,
      bisa view by google docs juga tanpa download…

    • Gothree
    • January 5th, 2013

    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..

  7. 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

    • Trinanda
    • February 17th, 2013

    mas mau tanya i2c apa seperti inteface kah? atau pakai rangkaian mas?
    masih bingung mas.. mklum newbie

      • coys
      • February 18th, 2013

      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

    • hadi
    • March 9th, 2013

    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.

    • azan
    • June 10th, 2013

    mau nanya mas..
    kok di LCD nya yang muncul angka 165 ya..
    mohon penjelasannya mas..

    • Itu menandakan komunikasi i2c dari mikro terhadap RTC g sukses atau mengalami masalah. Coba cek nilai resistor pull up atau koneksi dari jalur i2c itu sendiri.

    • Havizul
    • August 2nd, 2013

    Mas saya menggunakan PORT C untuk Ke LCD 16×2, Dan Port D untuk DS1307 (SDA -> D.7, SCL ->D.6). Pas saya Build All pake CV AVR muncul error
    “Error: C:\cvavr2\bin\Project KU\RTC_DS1307_2\rtc.c(189): too few arguments in function call”.
    Pass saya hilangkan baris 189 :
    189 //rtc_get_date(&d,&t,&y); <— Baris ini saya hilangkan
    190 rtc_get_time(&h,&m,&s);

    Muncul pesan (error di file .asm nya) :
    Error: C:\cvavr2\bin\Project KU\RTC_DS1307_2\List\rtc.asm(2480): Invalid redefinition of '__sda_bit'
    Error: C:\cvavr2\bin\Project KU\RTC_DS1307_2\List\rtc.asm(2481): Invalid redefinition of '__scl_bit'
    Error: C:\cvavr2\bin\Project KU\RTC_DS1307_2\List\rtc.asm(2482): Invalid redefinition of '__i2c_port'

    Nih file .asm nya yang error :
    2479 .CSEG
    2480 .equ __sda_bit=7 <—- Error
    2481 .equ __scl_bit=6 <—- Error
    2482 .equ __i2c_port=0x12 ;PORTD <—– Error
    2483 .equ __i2c_dir=__i2c_port-1
    2484 .equ __i2c_pin=__i2c_port-2

    Bisa dibantu mas ?
    Apa ya penyebabnya ?

    Berikut coding lengkap codevision nya :

    /*****************************************************
    This program was produced by the
    CodeWizardAVR V2.05.3 Standard
    Automatic Program Generator
    © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com

    Project :
    Version :
    Date : 01/08/2013
    Author : PerTic@n
    Company : If You Like This Software,Buy It
    Comments:

    Chip type : ATmega8535
    Program type : Application
    AVR Core Clock frequency: 16,000000 MHz
    Memory model : Small
    External RAM size : 0
    Data Stack size : 128
    *****************************************************/

    #include
    #include
    #include
    #asm
    .equ __i2c_port=0x12 ;PORTD
    .equ __sda_bit=7
    .equ __scl_bit=6
    #endasm

    // I2C Bus functions
    #include

    // DS1307 Real Time Clock functions
    #include
    #asm
    .equ __lcd_port=0x15 ; PORTC
    #endasm
    #include
    //#define RTC_ADDR 0xD0

    // Alphanumeric LCD functions
    //#include

    // Declare your global variables here
    unsigned char h,m,s,d,t,y;
    char buffer[16];

    void main(void)
    {
    // Declare your local variables here

    // Input/Output Ports initialization
    // Port A initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTA=0x00;
    DDRA=0x00;

    // Port B initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTB=0x00;
    DDRB=0x00;

    // Port C initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTC=0x00;
    DDRC=0x00;

    // Port D initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTD=0x00;
    DDRD=0x00;

    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=0xFF
    // OC0 output: Disconnected
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;

    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer1 Stopped
    // Mode: Normal top=0xFFFF
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;

    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer2 Stopped
    // Mode: Normal top=0xFF
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;

    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    MCUCR=0x00;
    MCUCSR=0x00;

    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;

    // USART initialization
    // USART disabled
    UCSRB=0x00;

    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;

    // ADC initialization
    // ADC disabled
    ADCSRA=0x00;

    // SPI initialization
    // SPI disabled
    SPCR=0x00;

    // TWI initialization
    // TWI disabled
    TWCR=0x00;

    // I2C Bus initialization
    // I2C Port: PORTD
    // I2C SDA bit: 7
    // I2C SCL bit: 6
    // Bit Rate: 100 kHz
    // Note: I2C settings are specified in the
    // Project|Configure|C Compiler|Libraries|I2C menu.
    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);
    delay_ms(100);

    // Alphanumeric LCD initialization
    // Connections are specified in the
    // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
    // RS – PORTC Bit 0
    // RD – PORTC Bit 1
    // EN – PORTC Bit 2
    // D4 – PORTC Bit 4
    // D5 – PORTC Bit 5
    // D6 – PORTC Bit 6
    // D7 – PORTC Bit 7
    // Characters/line: 16
    lcd_init(16);
    lcd_clear();
    lcd_putsf(“Date=”);
    lcd_gotoxy(0,1);
    lcd_putsf(“Time=”);

    while (1)
    {
    // Place your code here
    //rtc_get_date(&d,&t,&y);
    rtc_get_time(&h,&m,&s);
    sprintf(buffer,”%02d/%02d/%02d”,d,t,y);
    lcd_gotoxy(5,0);
    lcd_puts(buffer);
    sprintf(buffer,”%02d:%02d:%02d”,h,m,s);
    lcd_gotoxy(5,1);
    lcd_puts(buffer);
    delay_ms(900);
    }
    }

    • saya sudah coba copas listing program anda dan hanya melengkapi rujukan library yang belum dimasukkan seperti mega8535.h, stdio.h, delay.h dan lcd.h. setelah dicompile tidak terdapat error atau pesan warning sama sekali. Mungkin masalah anda hanya belum memasukkan library2 tersebut diatas.

      • luckman
      • September 5th, 2014

      library ds1307 agak berbeda-beda mas…
      jadi penulisan rtc_get_date() pada baris 186 itu kurang satu variable
      rtc_get_date(&dd,&d,&t,&y)
      coba dilihat file library ds1307 nya..
      semoga membantu

    • giri
    • August 13th, 2013

    mas mau tanya dong
    kalo mau buat supaya relay hidup dan mati berdasarkan hari gimana ya ?
    jadi pada hari senin-jum’at relay on
    sabtu dan minggu relay off
    saya pakai PORTD.7 untuk relay nya

    tolong pencerahannya ya mas
    terimakasih

    • Dengan contoh listing program yang saya lampirkan diatas cukup dengan menambahkan listing berikut pada baris sebelum printout pada display LCD.

      if (a==0 || a==1 || a==2 || a==3 || a==4 || a==5 ) portd.7= 1;
    • giri
    • August 14th, 2013

    mantap mas

    saya mau tanya lagi nih mas
    saya sudah coba diproteus dengan setting hari minggu,
    tapi saat jam sudah 00.00.00 kenapa harinya enggak berubah jadi senin ya mas?
    tampilan di lcd kosong untuk harinya ?
    kira2 kenapa mas ya ?
    dan gimana supaya bisa tampilan harinya jadi senin saat sudah jam 00.00.00 ?
    terimakasih

    • saya kurang paham jika menggunakan proteus. Seharusnya hal itu tidak terjadi karena RTC sudah otomatis mencacah dan mengupdate semua register setiap detiknya apalagi sampai terjadi layar LCD untuk hari blank karena dalam program tersebut tidak ada perintah printout blank karakter pada LCD. Dicoba aja langsung dihardware, muncul problem itu atau tidak.

    • R3G1OK@@@@
    • September 23rd, 2013

    misi mas mau nanya lagi
    kok jam dari RTC yang saya buat dibandingkan dengan yang dilaptop kecepetan terus ya ?

    • Mungkin clock xtal nya terlalu besar/menyimpang dari nilai yang semestinya sehingga detaknya lebih cepat dari yang seharusnya.

  8. komponen yang digunakan pada jam digital ini apa aj ya gan…. ??
    ane mw coba membuatnya.. tolong gan bantuannya…

    • Komponen yang digunakan antara lain sistem minimum mikrokontroller, resistor 1K-1K8 2pcs sebagai pull up, xtal 32,768KHz 1Pcs, RTC DS1307 1Pcs dan display (bisa LCD atau rangkaian 7segment).

    • maulana
    • November 15th, 2013

    mas permisi mau tanya. .
    kalo nampilin jamnya di baris1 lcd trus untuk baris yg ke 2 untk nampilin jam ketika ada triger, jadi msalnya ketika ada triger pas jam 06.00 jm tu langsung tmpl d baris 2 dan jam tu tdk berdetak /ttep nunjuk pada jam 06.00 bisa ndag mas y? n pake fungsi program yg mana mas ya?
    mkasih

    • Bisa…
      itu bergantung bagaimana kita memogramnya. Dalam program tersebut kita desain ketika berjalan normal, jam tampil secara normal di display LCD baris pertama. Tetapi ketika ada trigger dari luar, kita stop pembacaan jam dari RTC dan data yang telah terambil dari RTC kita tampilin saja di LCD baris kedua. Dalam hal ini mungkin program bisa dibuat dengan membuat subrutin untuk display jam pada saat ditrigger tersebut dan dalam subrutin tersebut tidak ada akses pembacaan dari RTC dengan demikian seolah olah jam tidak berdetak.

    • maulana
    • November 18th, 2013

    ou gt mas y
    makasi mas

    tu carae untk memberhentikan dtak n mengambl datanya tu gmana mas?

    • maaf baru balas.
      Maksud saya bukan menghentikan detak RTC tetapi tidak mengakses data dari RTC karena seharusnya RTC tetap berjalan dibackground walaupun tidak diakses sehingga ketika data RTC diakses kembali, data yang dikirim oleh RTC adalah data terkini yang tetap sesuai dengan waktu yang saat itu juga.

    • bagus
    • November 23rd, 2013

    salam kenal mas, mau tanya nih
    kalo mengaktifkan alarm lewat timer programnya gmn?
    ketika jam 06.00 timernya aktif untuk mengaktifkan alarm, sehingga ketika alarm aktif tampilan jamnya juga tetap jln, tanpa terganggu oleh alarm yg aktif.
    Trimksh bnyk seblmnya

    • Salam kenal juga.
      untuk mengaktifkan alarm sesuai setting jam cukup dengan dengan membandingkan nilai timer dengan setting jam yang kita inginkan. Jika kondisi sesuai maka aktifkan alarm. Misal berdasar keinginan anda :
      Alarm –> jam 06.00
      Control alarm –> PORTA.0
      Reset alarm –> PORTD.2 (INT0)
      contoh listing programnya.

      if (h==6 && m==0 && s==0) PORTA.0=1; //h=hour, m=minute, s=second

      dan untuk reset dengan memanfaatkan external interrupt (INT0)

      interrupt [EXT_INT0] void ext_int0_isr(void)
      {
      delay_ms(500);
      PORTA.0=0;
      }
      

      Semoga membantu.

    • okta
    • December 12th, 2013

    saya bisa minta gambar rangkaiannya ga?mau gambar rangakaian,bentuk simulasi, skematik, eagle, gpp, bisa PM ke oktakudo@yahoo.com

    • arman
    • June 1st, 2014

    gan, kok pada saat source codenya sy compile codevision AVR tertulis di pesannya error can’t open#includefile:mega8535.h

  9. mas sy pemula tolong ajari bikin jam digital spti ini. minta source.code ny yg full sm.library ny dong terimakasih oks pm yoez_zhoka@yahoo.co.id

  10. Gan programnya error di asmnya…

    pesan saat di compile

    compile

    Chip: ATmega8
    Clock frequency: 12.000000 MHz
    Program
    type: Application
    Memory
    model: Small
    Optimize for: Size
    (s)printf
    features: int, width
    (s)scanf
    features: int, width
    Promote
    ‘char’ to ‘int’: Yes

    char’ is unsigned: Yes

    global ‘const’ stored in FLASH: No

    8 bit enums: Yes

    Enhanced function parameters passing: Yes

    Automatic register allocation: Yes

    Smart register allocation: Yes

    Build: 16

    11146 line(s) compiled

    No errors

    5 warning(s)

    Bit variables size: 0 byte(s)

    Data Stack area: 0x60 to 0x15F

    Data Stack size: 256 byte(s)

    Estimated Data Stack usage: 21 byte(s)

    RAM Global variables area: 0x160 to 0x163

    RAM Global variables size: 4 byte(s)

    Hardware Stack area: 0x164 to 0x45F

    Hardware Stack size: 764 byte(s)

    Heap size: 0 byte(s)

    EEPROM usage: 0 byte(s), 0.0% of EEPROM

    ASM

    AVRASM: AVR macro assembler 2.1.30 (build 592 Nov 7 2008 12:38:17)
    Copyright (C) 1995-2008 ATMEL Corporation

    C:\Users\ivan\Desktop\x\List\x.asm(1940): error: Invalid redefinition of ‘__sda_bit’
    C:\Users\ivan\Desktop\x\List\x.asm(1941): error: Invalid redefinition of ‘__scl_bit’
    C:\Users\ivan\Desktop\x\List\x.asm(1942): error: Invalid redefinition of ‘__i2c_port’
    Assembly failed, 3 errors.

    SUBOPT_0xA:
    LDI R26,LOW(1)
    RCALL _i2c_read
    MOV R26,R30
    RJMP _bcd2bin

    .CSEG
    .equ __sda_bit=5
    .equ __scl_bit=4
    .equ __i2c_port=0x15 ;PORTC
    .equ __i2c_dir=__i2c_port-1
    .equ __i2c_pin=__i2c_port-2

    • mahfudtm
    • March 17th, 2015

    Kalo nggak pake RTC codenya gimana ya.
    Sya ga punya IC RTCnya……

  11. mas, ane minta ijin buat ngambil referensi ini utk TA ane, ane mau bikin pemberi pakan ikan otomatis.

  12. gan, boleh minta tolong kirimin dimulasi jam digital dengan program avr nya gan ke putrilestari99.pl@gmail.com
    makasih sebelumnya gan

    • sincand
    • December 9th, 2015

    permisi gan kalau penulisan program untuk menulis di rtcnya gmn ya gan? misal kita mau ngeset buat nilai jamnya pakai inputan itu gmn ya gan penulisannya? maav masih baru gan.

    • rtc_set_time(20,12,45); //untuk set jam pukul 20:12:45
      rtc_set_date(9,1,11); //untuk set tanggal 9 januari 2011

    • shio
    • January 5th, 2016

    mau nanya mas, saya udah nyoba download ke mikon, udah jalan jamnya, tapi kok kalo saya coba power/vcc saya off(matikan), ketika dinyalakan lagi kok jamnya kembali ke settingan di codingnya? padahal udah dikasih batere 3v di ds1307nya. mohon bantuannya. makasih.

    • Antok
    • April 15th, 2016

    Boz bisa kasih solusi agar ram memory ds1307 muat bnyk?bisakah dbuat ektended memory ds nya?

    • samsul
    • June 2nd, 2016

    mas mohon bantuannya …bagimana cara untuk mengetahui hari pada RTC ds3231

    • koky
    • April 11th, 2017

    mas knp keluar include ds 1307 error??
    mohon penjelasannya
    trmakasih

Leave a reply to coys hfiy Cancel reply