Membaca RTC DS1307 dengan Codevision AVR


RTC (Real time clock) adalah jam elektronik  berupa chip yang dapat menghitung waktu (mulai detik hingga tahun) dengan akurat dan menjaga/menyimpan data waktu tersebut secara real time. Karena jam tersebut bekerja real time, maka setelah proses hitung waktu dilakukan output datanya langsung disimpan atau dikirim ke device  lain melalui sistem antarmuka.

Chip RTC sering dijumpai pada motherboard PC (biasanya terletak dekat chip BIOS). Semua komputer menggunakan RTC karena berfungsi menyimpan informasi jam terkini dari komputer yang bersangkutan. RTC dilengkapi dengan baterai sebagai pensuplai daya pada chip, sehingga jam akan tetap up-to-date walaupun komputer dimatikan. RTC dinilai cukup akurat sebagai pewaktu (timer) karena menggunakan osilator kristal.

Banyak contoh chip RTC yang ada di pasaran (pasar genteng, dll) seperti DS12C887, DS1307, DS1302, DS3234.

         

DS3234                    DS12C887                        DS1307

Salah satu chip RTC yang mudah digunakan adalah DS1307. Pin out chip seperti gambar di bawah.

DS1307 memiliki akurasi (kadaluarsa) hingga tahun 2100. lihat datasheet. Sistem RTC DS1307 memerlukan baterai eksternal 3 volt yang terhubung ke pin Vbat dan ground. Pin X1 dan X2 dihubungkan dengan kristal osilator 32,768 KHz. Sedangkan pin SCL, SDA, dan SQW/OUT dipull-up dengan resistor (nilainya 1k s.d 10k) ke vcc. Skema lengkapnya:

Pada topik ini akan dibahas cara pembacaan data waktu dari DS1307 dengan Codevision AVR. alasan penggunaan chip ini adalah karena mudah dalam komunikasi datanya, yaitu menggunakan antarmuka Serial I2C yang hanya butuh dua jalur saja (clock dan data). berbeda dengan DS12C887 yang antarmukanya secara paralel. pada project ini digunakan mikrokontroler ATmega16 dan LCD2X16 untuk display waktu RTC nya. PORTC terhubung ke pin LCD. dan pin SDA DS1307 terhubung ke PORTB.0 sedangkan pin SCLnya ke PORTB.1.

Untuk menampilkan jam dan tanggal dari RTC DS1307 dilakukan dengan pengaksesan register pewaktu pada RTC. 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.

Dari pengaturan widzard I2C bus dan koneksi RTC DS1307 diatas di ketahui bahwa jalur I2C berada pada PORTB.0 sebagai serial data (SDA) dan PORTB.1 sebagai serial clock (SCL). 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); —> untuk membaca pada alamat tertentu dari register timekeeper RTC
  • void rtc_write(unsigned char address,unsigned char data); —> untuk menulis pada alamat tertentu dari register timekeeper RTC
  • void rtc_init(unsigned char rs,unsigned char sqwe,unsigned char out); —>  untuk inisialisasi ­IC DS1307
  • void rtc_get_time(unsigned char *hour,unsigned char *min,unsigned char *sec); —> 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); —> 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); —> 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);  —> untuk mensetting tanggal, bulan dan tahun dari RTC dalam satu kali akses.

pada topik ini, kita ingin mengatur waktu pada RTC sesuai jam dan tanggal sekarang misanya, jam 08, menit: 19, detik:00 || tanggal: 24, bulan:04, tahun:2011. kemudian melakukan pembacaan jam dan waktu dari RTC setiap 100 ms sekali dan menampilkan hasilnya pada LCD Display. berikut listing programnya:


/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.3 Professional
Automatic Program Generator
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project : Real Time Clock DS1307
Version :
Date    : 4/24/2011
Author  : KurangSangu
Company : PT GolekSangu
Comments:

Chip type           : ATmega16</span>
Program type        : Application</span>
Clock frequency     : 11.059200 MHz</span>
Memory model        : Small</span>
External SRAM size  : 0</span>
Data Stack size     : 512</span>
*****************************************************/

#include <mega16.h>
#include <ds1307.h>
#include <delay.h>
#include <stdio.h>

// I2C Bus functions
#asm
    .equ __i2c_port=0x18 ;PORTB
    .equ __sda_bit=0
    .equ __scl_bit=1
 #endasm
 #include <i2c.h>

// Alphanumeric LCD Module functions
 #asm
    .equ __lcd_port=0x15 ;PORTC
 #endasm
 #include <lcd.h>

void main(void)
{
 unsigned char jam, menit, detik, tanggal, bulan, tahun, buff[17];

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

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

// I2C Bus initialization</span>
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);

// LCD module initialization
lcd_init(16);
lcd_gotoxy(0,0);
lcd_putsf("Real Time Clock");
delay_ms(2000);
lcd_clear();

rtc_set_time(8,19,0);   // set jam 08:19:00
rtc_set_date(24,4,11);  // set tanggal: 24 april 2011

while (1)
{
// Place your code here
rtc_get_time(&jam,&menit,&detik); // mengakses jam
rtc_get_date(&tanggal,&bulan,&tahun); //mengakses tanggal
lcd_gotoxy(0,0);
sprintf(buff,"Jam: %d:%d:%d  ",jam,menit,detik);  // menampilkan jam
lcd_puts(buff);
lcd_gotoxy(0,1);
sprintf(buff,"Tgl: %d:%d:%d  ",tanggal,bulan,tahun); // menampilkan tanggal
lcd_puts(buff);
delay_ms(100);
lcd_clear();
};
}

untuk full sourcecode nya silahkan diunduh di sini

88 Responses

  1. Real time clock

  2. salam kenal, mas. tanya nih, bgmana kalo mau menampilkan nama hari selain tgl, buln dan tahun seperti contoh di atas pkai ds1307?

    • untuk membaca nama hari bisa mengakses ds1307 dengan fungsi ini:
      rtc_read(0x03);
      Range nilai fungsinya adalah bilangan desimal 1 – 7. Ini sebagai kode hari.
      nilai : 1 ; kode hari minggu
      nilai : 2 ; kode hari senin
      dan seterusnya
      nilai : 7 ; kode hari sabtu

      nilai hasil pembacaan dimasukkan dalam variable lalu ditampilkan nama harinya pada LCD. Contoh:

      void baca_nama_hari()
      {
      unsigned char hari, buff[16];
      hari=rtc_read(0x03);

      lcd_gotoxy(0,0);
      if (hari==1) lcd_putsf(“Hari: minggu “);
      else if (hari==2) lcd_putsf(“Hari: senin “);
      else if (hari==3) lcd_putsf(“Hari: selasa “);
      else if (hari==4) lcd_putsf(“Hari: rabu “);
      else if (hari==5) lcd_putsf(“Hari: kamis “);
      else if (hari==6) lcd_putsf(“Hari: jum’at “);
      else if (hari==7) lcd_putsf(“Hari: sabtu “);

      delay_ms(100);
      }

      semoga bisa membantu.

      thanx sudah berkunjung..
      kalo punya blog bisa sharing – sharing mas..

      .

      • mas knp ya undefined rtc_read nya ?

      • Error: C:\Users\sadada\Desktop\cvavr2.04\bin\try.c(84): must declare first in block

        ada tulisan itu saat saya menulis void baca_nama_hari()

  3. terimakasih banyak untuk ilmunya…..

  4. terima kasih buat ilmunya mas, semoga bermanfaat

  5. mas kalau mau menyambungkan RTC dengan relay bgaimana?
    semisal pada jam 05.00 ,,relay On…kemudian jam 06.00 relay OFF

    • @ mas fuad:
      bisa dg mendefinisikan salah satu port mikro sebagai output untuk mengendalikan relay (misal PORT A.0). dan menambahkan baris program pada program utama dari listing di atas seperti berikut ini:
      1. baca jam, menit, detik serta tanggal dari RTC dan tampilkan
      nilainya pada LCD
      2. jika jam=5 AM —–> relay=ON
      lainnya —–> relay=OFF
      3. memberi tundaan (delay) selama 100 ms

      bentuk source code nya seperti ini:

      //************************************************//
      ………………………………….
      #define out_RELAY DDRA.0
      #define RELAY PORTA.0
      #define ON 0 // aktif low
      #define OFF 1
      …………………………………..
      …………………………………..
      void main(void)
      {………………………………
      ……………………………….
      ……………………………….
      out_RELAY=1; // memfungsikan A.0 sebagai output untuk relay
      RELAY=OFF; // memberi kondisi awal relay dalam keadaan mati

      while (1)
      {
      // Place your code here
      rtc_get_time(&jam,&menit,&detik); // mengakses jam
      rtc_get_date(&tanggal,&bulan,&tahun);
      lcd_gotoxy(0,0);
      sprintf(buff,”Jam: %d:%d:%d “,jam,menit,detik);
      lcd_puts(buff);
      lcd_gotoxy(0,1);
      sprintf(buff,”Tgl: %d:%d:%d “,tanggal,bulan,tahun);
      lcd_puts(buff);
      if (jam==5) RELAY=ON;
      else RELAY=OFF; // jam =6 maka relay mati
      delay_ms(100);
      lcd_clear();
      }
      }

      kurang lebih sepeti ini,, tolong dikoreksi lagi..
      trims atas kunjungannya.. :)))

  6. mas klo cavr aq ko ga bisa compile ya? pas compile ada pesan klo ds 1307 hanya untuk yang commercial version. Mungkin masnya punya cavr yg full version share dong mas?

  7. mas mau nanya pin ic ds 1307 yang SQW-nya terhubung ke pin micro juga ya?
    terus fugsinya untuk apa?

    • Pin SQW/OUT (Square Wave Output) di DS1307 fungsinya untuk keluaran gelombang kotak dari kaki ke-7 (lihat gambar di atas) dengan frekuensi pilihan yaitu 1 Hz, 4096 Hz, 8192 Hz atau 32768 Hz.
      keluaran gelombang kotak ini bisa diaktifkan atau tidak terserah penggunanya. fungsi untuk SQW ini adalah:
      void rtc_init(unsigned char rs, unsigned char sqwe, unsigned char out);
      rs=nilai frekuensi outputnya (0 untuk 1 Hz, 1 untuk 4096 Hz, 2 untuk 8192 Hz dan 3 untuk 32768 Hz).
      sqwe=meng-enable keluaran gelombang kotak pada kaki ke-7 DS1307 (1 untuk enabled dan 0 untuk disabled).
      out=logika pin SQW/OUT ketika kondisi disabled.

      output SQW/OUT harus di-pull up dg resistor ke VCC.
      tapi kalau tidak ada niatan menggunakan SQW/OUT maka lebih baik tidak perlu di-pull up dan disambung ke mikro (dibiarkan mengambang) dan di-disable aja sperti pada listing program di atas, rtc_init(0,0,0);.

      Lebih jelasnya lihat datasheet dan cvavr manual.
      Trims..

      • terimaksih atas penjelasannya mas, jadi intinya SQW/out bisa di hubungkan ke kaki micro i/o mana saja ya mas, kalau mau SQW nya di fungsikan. begitu?

  8. thanks mas bwt ilmunya

  9. mas, rtc saya koq hitungan detiknya tidak normal?? jika saya bandingkan dengan jam digital, dalam putaran 1 menit ketinggalan 5 detik dari jam digital.
    apakah masalahnya pada rangkaian rtc atw program??
    (saya pake at89s52 bahasa c)

    • kalau disebabkan dari sisi software itu kemungkinan kecil mas.. software cuma berfungsi membaca data terkini dari RTC nya.. jadi meskipun pembacaan data telat tapi data yg didapat adalah data realtime RTC .. maaf untuk at89s52 belum pernah pake.. tapi mungkin program c nya bisa di-share di sini..
      jadi kemungkinan dari sisi hardwarenya, silahkan mas cek sudah sesuai rekomendasi datasheet apa belum… (kristal clock nya, dll)

      trims sudahh mampir..

    • coba letakkan crystal sedekat mungkin dengan pin X di ds1307,.
      dan pastikan crystal di 32.768Mhz
      (*kita pernah senasib, delay 2 menit dalam sehari..)

  10. Mas, gimana basis/dasar waktu nya RTC saat program tersebut di download ke mikrokontroller.
    gimana caranya dia bisa mengikuti waktu yang sekarang kalau sudah diaplikasikan pada rangkaian nyata (bukan simulasi)

    Note : pemrograman saya menggunakan AVR Code Block

    • @ Mas Fajar Purnama:

      maaf saya masih bingung dg pertanyaan yg pertama..

      agar dapat mengikuti waktu real yang terkini maka pada program di atas perlu ditambahkan menu untuk setting jam dan tanggal.. jadi pengaturan waktunya bisa sesuai kemauan kita. kalau program yg di atas kan pengaturan waktunya dilakukan setiap kita nge flash / download program ke mikronya. jadi nilai waktunya akan kembali ke nilai wktu yg sudah ter set di program (statis). program di atas sudah pernah saya pake project timer pemanas / furnace bahan otomatis.. ya.. dg ngubah2 dikit programnya biar bisa dibuat menu pengaturan waktunya.

      untuk AVR Code Block nya belum pernah pake mas..

      trims..

  11. mas saya mw nanya bagaimana …saya kan bikin TA penggunaan programable sebagai saklar otomatis,,, dengan AT89s52.. dengan rtcds1307. trus saya terkendala ama rtc nya gimana memasukan data time ke rtc tesebut????? saya mohon batuan nya masss

  12. mas kalo pake bahasa bascom gmna yaa ?

  13. Jdi klo pke ds1307 udh g perlu ribet ngitung besar clock, prescaler2 dll kyk pke timer di uC ya mas? uC berfungsi cuma buat interfacingnya aja ya?

  14. bisa bantu gak mas……
    untuk ngest jam sama TGL nya menggunakan interrup bisa gak mas?
    tlong dishare ya klu ad programnya.

    • mas hengky prayoga, maksudnya ngeset jam dan tanggal dengan interrupt bagaimana?
      untuk program yg pernah sy buat, setting jam dan tanggalnya sy pake fungsi pilih menu yg muncul di awal program (sebelum program utama / fungsi while(1){} ).. aksesnya dg 4 push button (OK, UP, DOWN, dan QUIT).. tampilannya dg LCD display 2×16 character..

  15. klo untuk mengaktifkan jam sholat misal
    shubuh 0453
    dzuhur 1215
    ashar 1530
    magrib 1806
    isya 1912

    d sambung ke relay untuk mengaktifkan mp3 yang keluarannya suara adzan bisa gk tuliskan listing programnya

    mohon pencerahannya

    • mengaktifkan mp3 (player) pake relay untuk play suara adzan maksudnya? .. kayaknya ribet malahan 🙂 mending pake ic yg bisa merekam suar (adzan) trus nanti ditrigger dari luar untuk memainkan suaranya. tapi aku lupa tipe ic nya apa .. soalnya temanku pernah pake.
      kalau pake bahasa c untuk program alarm suara adzannya ya tinggal baca data jam dan menit dari DS1307 trus uji nilai waktunya itu dengan fungsi syarat (“IF”) atau bisa dengan fungsi percabangan lain untuk mengecek bahwa sekarang sudah waktunya dhuhur, ashar atau sbgnya. contoh
      1. baca data jam dan menit –> masukkan ke variable JAM dan MENIT
      2. jika JAM=4 dan MENIT=53
      atau
      JAM=12 dan MENIT=15
      atau
      JAM=15 dan MENIT=30
      atau
      JAM=18 dan MENIT=6
      atau
      JAM=19 dan MENIT=12
      maka bunyikan alarm adzan

      ini dengan asumsi alarm untuk semua waktu sholat adalah sama yaitu 1 jenis suara adzan.. beda lagi kalau tiap waktu sholat diberi nada adzan yg berbeda beda misalnya adzan subuh pake gaya pakistan, dhuhur gaya eropa dll hehehe 😀

      THANKS sudah berkunjung

  16. trims banget…moga sukses

  17. Mas, mau tanya.
    ane lg nyoba rts ds1307. data waktu ane tampilin lewat serial.
    tapi datanya kadang bener kadang salah. sering tampil angka 165.
    kira2 apa salahnya ya?

    • pastikan pembacaan DS1307 oleh mikro nya bener dulu mas, bisa ditambilkan di LCD dulu. Trus itu serial usart maksudnya mas? baudrate nya disamakan dulu mas yg di master dan slavenya.

  18. terimakasih untuk postingannya mas
    mudah dimengerti
    mas uda pernah buat jam digital tapi tampilannya seven segment gak?

    • sama sama 🙂
      Kalau 7seg untuk jam digital belum pernah. tapi kalau untuk display lain pernah. 7 segmennya minimal butuh 4 digit, 2 untuk jam, 2 untuk jam. atau bisa tambah 2 lagi untuk detik (jadi 6 digit). trus pake metode latching untuk menampilkan di 7seg nya. pin mikro untuk kontrol 7 semennya bisa pake 12 pin (8 untuk 7 seg + 4 untuk kontrol latching keempat digitnya). thanks

      • mas set alaram bagai mana mas cara codex menggunkn codevision mas? kalau jam 10.00 alaram on kalu 10.30 smpe strusx alaram off tolong bntuanya mas…

  19. mas,, mau tnya,, sya pake ATmega8 sama RTC ds1307, cuma sya trkendala sma program rtcnya untuk mengaktifkan relay selama bbrpa jam,, bisa bantu kasih solusi? & source codenya kya’ apa? trima kasih

    • setting RTCnya dulu mas biar sama dengan jam sekarang.
      trus definisikan jam/waktu kapan terjadi alarm

      while(1)
      baca jam rtc setiap saat
      –> bila jam sama dengan waktu alarm, aktifkan relay
      –> bila jam > ‘beberapa jam’ matikan relay

      kalo pake cvavr bisa pake contoh di atas mas. thanks

  20. mas saya dah coba sesuai rangkaian d atas,,ko kluaran d LCD na jam: 165;165;165,,,kira2 letak ksalahannya di manh y mz,,,mksh

    • ada kemungkinan RTC nya belum ter-set mas. coba set jam dan tanggalnya pake fungsi rtc_set_time(). mungkin bisa di-share rangkaian sama coding yg mas pake biar bisa dibahas sama2 di sini..

  21. The DS1307 loads the crystal with 12.7pF so you need to buy a crystal that is defined to use this load capacitance. Circuit layout also affects the capacitance at the crystal pins so you must keep the crystal as close as possible to the chip and the tracks from crystal to chip must be short.

  22. mas,kok di jam saya munvul nya 0:0:0

    • tapi bilangan detiknya bisa berjalan nggak mbak? ada kemungkinan pembacaan secara i2c nya gak sukses. cek lagi rangkaiannya atau share program yg dipake di sini biar bisa kita cek sama-sama mbak. trims

  23. mas, mau nanya, kalau di kasih sensor apa yang di tambah codingnya mas?

  24. mas saya mau tanya, saya udah buat rangkaian RTC pke DS1307 pake mikro atmega32. tapi kenapa ya jamnya gak bisa jalan. pdahal saya udah ganti crystal berkali-kali (>10). mungkin mas bisa kasih saran ato solusi…
    trimakasih sbelumnya…

  25. mas sama seperti pertanyaan yang di atas2 :

    mas klo cavr aq ko ga bisa compile ya? pas compile ada pesan klo ds 1307 hanya untuk yang commercial version. Mungkin masnya punya cavr yg full version share dong mas?

  26. mas Mei,, sudah saya upload,, bisa didownload di sini cvavr nya..
    http://www.4shared.com/archive/i6nopN9_/cvavr_25.html

  27. mas kok kluarnya programnya di tempat saya:
    jam:165:165:165 dan
    tgl:255:165:165
    gimana mas? mohon infonya scepetnya.. mkasih

  28. salam kenal mas, saya sudah ikuti petunjuk ini dan menampilkannya ke LCD. Saya pakai ATMEGA 8535. Setelah sy chip program, sudah terbaca jam dan tglnya, namun begitu mikonnya dimatikan dan kemudian dinyalakan lagi, jamnya tetap pada jam yang semula saya set. bagaimana agar jamnya tetap terupdate?

  29. salam kenal mas, sy uda coba bikin rangkaiannya, pas chip program dg codingan di atas, jam sudah berhasil tertampil di LCD, namun begitu mikon AT8535 sy matikan dan nyalakan kembali, waktu dan tanggalnya reset ke awal pertama di-set. apa mgkin ada masalah di rangkaiannya? di kaki no3/ Vbat, sy berikan elco 16V, bukan 3V.

  30. salam kenal mas,,
    sy uda bikin rangkaian persis kyk tutorial di atas,,jamnya sudah berfungsi,namun ketika di off lalu di on lagi, jamnya kembali ke waktu semula di-set (jadi ga terupdate gitu). bagaimana ya mas?ap ada yg salah?

    • mas rizal..
      iya karena subrutin pada coding di atas membuat waktu pada RTC otomatis terset kembali ketika mikro di reset.. solusinya ya harus di tambahkan sub rutin lagi untuk pilihan menu apakah mau men set waktu RTC atau tidak di awal program.. bisa pake push button untuk selector menunya.. tapi secara program RTCnya sudah bisa bekerja kan..

      • iya mas, rtc sudah bs bekerja. sy lg bikin lampu aquarium otomatis, sistemnya mirip kyk alarm, namun jam hrus slalu terupdate, kalo mati lampu jd repot. boleh minta cntoh penggunaan push button dengan listing programnya mas, biar jam selalu terupdate.. makasih mas sebelumnya..

  31. salam kenal mas..
    kenapa ketika programnya dicompile muncul error “too few arguments in function call”
    mohon penjelasannya mas..

  32. mas, kalo pake ds1302 gmn? please

  33. Kalau kita tambahin keypad, jadi kita bisa set jam manualnya lewat keypad gimana listing programnya …

    Terima kasih
    (novinsyahputra@gmail.com)

    • Kalau kita tambahin keypad, jadi kita bisa set jam manualnya lewat keypad gimana listing programnya …

      Terima kasih

  34. Kalau kita tambahin keypad, jadi kita bisa set jam manualnya lewat keypad gimana listing programnya Mas …

    Terima kasih sebelumnya
    (novinsyahputra@gmail.com)

  35. mas kalo di lcd nya muncul 0:0:0.
    kira-kira masalahnya ada dimana ya mas?

  36. salam kenal mas
    mau tanya nih mas
    kalo tampilan LCD nya kayak gini itu kenapa ya masalahnya kira2?
    Jam : 165 :165 :165
    terima kasih mas

  37. maaf lama ga kunjung blog sendiri mas hehehe..
    coba tak carikan referensi dulu ..

  38. mas mau tanya. kan sy punya project. dengan aplikasi RTC, pertama, sy hrus seting tanggal,bulan,tahun, menit saa jam. setelh d set bru RTC nya mulai menghtung. nah saya bingung untuk ngambl program RTC setelh d seting itu. dengan tampilan 7segment. mhon bantuannya

  39. mas, mau nanya..
    kalo cara menampilkan hari apakah ini udh betul atau ada yang perlu diperbaiki mas ?
    mohon infonya.. terima kasih

    void nama_hari()
    {
    unsigned char hari, buff[16];
    hari=rtc_read(0x03);

    lcd_gotoxy(0,0);
    if (hari==1) lcd_putsf(“Hari : minggu “);
    else if (hari==2) lcd_putsf(“Hari : senin “);
    else if (hari==3) lcd_putsf(“Hari : selasa “);
    else if (hari==4) lcd_putsf(“Hari : rabu “);
    else if (hari==5) lcd_putsf(“Hari : kamis “);
    else if (hari==6) lcd_putsf(“Hari : jum’at “);
    else if (hari==7) lcd_putsf(“Hari : sabtu “);
    sprintf(buff,”%d”,hari);
    delay_ms(100);
    lcd_clear();
    }
    while (1)
    {
    // Place your code here
    nama_hari();
    };
    }

  40. mas bagaimana indikasi RTC DS1307 telah bekerja, saya bikin modul RTC 4 kali tapi hasilnya tetap sama, angka berjalan cepat sekali sampai 165. mohon komentarnya.texs

  41. mas saya mau buat waktu yg bisa ngebatasin penggunaan Keypad, jadi misal dari jam 8 malam – 5 pagi keypad itu tdk bisa du gunain, jam 5.05 – 7.59 malam bisa di gunain lg keypadnya, itu gmn yah mas ?

  42. Mas, kalau rangkaian ditambahin tombol utk set jam dan tanggalnya gimana ya.. trus code nya untuk nulis rtc itu gimana? mohon pencerahannya mas.. thanks..

  43. mas bagaimana mensetting rtc secara real time yah ? kan setiap download program ke mikro ada jeda waktu jadia kadang nelat ataupun kecepetan gmana yah mas?

    • Mending diset dari keypad saja mas, agar delay setting waktu dan real time nya tipis.
      Kalau diset saat download program pasti ada selisih (hitungan detik).

  44. that’s good, thanks for sharing,.. I think this is great blog

  45. mas kalo muncul eror di rtc_set_date(24,4,11); disebut too few arguments itu gimana ya?
    sama di rtc_get_date(&tanggal,&bulan,&tahun); ini juga.
    mohon bantuannyaa

    • iya,

      Contoh source code saya pada artikel di atas itu berdasarkan library DS1307.h lama, sekarang sudah update dan argumen fungsinya ditambah menjadi:

      rtc_set_date(day,date,month,year); //untuk men set tanggal
      rtc_get_date(&day,&date,&month,&year); // untuk membaca tanggal

      ada tambahan “day” atau hari. Day nilainya 1-7.
      jadi bisa disesuaikan dengan library yang sampean gunakan.

      thanks for blog walking

  46. Kalau ada error : too few arguments in function call pada syntax rtc_get_date(&d,&mo,&y); itu bagaimana cara mengatasinya bang?

Leave a comment