Senin, 27 Juni 2011

JAM DIGITAL MENGGUNAKAN RTC DS1307 DENGAN CODEVISION AVR

RTC DS1307 berkomunikasi dengan antarmuka I2C (Inter Integrated Circuit). RTC DS1307 memiliki pewaktu dalam variabel detik, menit, jam, hari, tanggal, bulan dan tahun. Selain itu, RTC ini menyediakan pin battery-backup untuk dihubungkan pada baterai lithium 3V atau catu daya lain sehingga ketika power (catu daya) mati, battery-backup akan mengambil alih dan timer tetap akan berjalan sebagaimana mestinya. Sedangkan kristal yang digunakan menurut datasheet bernilai 32,768 KHz. Untuk mendapatkan datasheet DS1307 silakan download disini.


Dengan menggunakan bantuan pada CodeWizardAVR pada Codevision AVR, yang sudah terdapat library untuk DS1307, maka kita akan dengan mudah dapat mengakses RTC DS1307. Setting seperti gambar dibawah ini:

Dan menurut CodeVisionAVR Help, terdapat beberapa instruksi untuk mengakses DS1307:
void rtc_init(unsigned char rs, unsigned char sqwe, unsigned char out)
Instruksi ini untuk inisialisasi DS1307, dimana:
Parameter rs digunakan untuk menghasilkan nilai dari frekuensi gelombang kotak pada pin SQW/OUT DS1307:
Jika rs bernilai:
0 untuk 1 Hz
1 untuk 4096 Hz
2 untuk 8192 Hz
3 untuk 32768 Hz
Jika parameter sqwe bernilai 1 maka output gelombang kotak pada pin SQW/OUT DS1307 akan di enable.
Parameter out merupakan level logika pada pin SQW/OUT saat output gelombang kotak di disable (sqwe=0)

void rtc_get_time(unsigned char *hour, unsigned char *min, unsigned char *sec)
Intruksi ini untuk mendapatkan nilai *hour (jam), *min (menit) dan *sec (detik). Untuk variabel hour, min dan sec dapat kita ganti namanya sesuai keinginan kita tetapi harus bertipe data unsigned char.

void rtc_get_date(unsigned char *date, unsigned char *month, unsigned char *year)
Intruksi ini untuk mendapatkan nilai *date (tanggal), *month (bulan) dan *year  (tahun). Untuk variabel date, month dan year dapat kita ganti namanya sesuai keinginan kita tetapi harus bertipe data unsigned char.

void rtc_set_time(unsigned char hour, unsigned char min, unsigned char sec)
intruksi ini digunakan untuk menset nilai hour (jam), min (menit) dan sec (detik) sesuai keinginan kita.

void rtc_set_date(unsigned char date, unsigned char month, unsigned char year)
intruksi ini digunakan untuk menset nilai date (tanggal), month (bulan) dan year (tahun) sesuai keinginan kita.
Dibawah ini adalah listing program lengkapnya:

unsigned char h, m, s, d, mo, y, temp[16];
/*
h=hour, m=minute, s=second
d=day, mo=month, y=year
*/

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

// I2C Bus functions
#asm
   .equ __i2c_port=0x1B ;PORTA
   .equ __sda_bit=0
   .equ __scl_bit=1
#endasm

#include <i2c.h>
// DS1307 Real Time Clock functions
#include <ds1307.h>
// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0×15 ;PORTC
#endasm
#include <lcd.h>

void main(void)
{
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0×80;
SFIOR=0×00;

// I2C Bus initialization
i2c_init();                                                                         
rtc_init(0,0,0);
lcd_init(16);

//rtc_set_time(9,10,26); //untuk menset jam 09:10:26
//rtc_set_date(8,11,87); //untuk menset tanggal: 8 nov 1987

while (1)
      {         
        rtc_get_time(&h,&m,&s); //mendapatkan nilai  jam, menit dan detik
        rtc_get_date(&d,&mo,&y); //mendapatkan nilai tanggal, bulan dan tahun

        lcd_gotoxy(0,0);
        sprintf(temp,”Time %d:%d:%d”,h,m,s);
        lcd_puts(temp);//tampilkan jam di LCD baris pertama

        lcd_gotoxy(0,1);
        sprintf(temp,”Date %d-%d-%d”,d,mo,y);
        lcd_puts(temp);//tampilkan tanggal di LCD baris kedua
      };
}

Untuk file program dalam bentuk CodeVision AVR dan file simulasi Proteus silakan download link dibawah ini.


Semoga bermanfaat…

9 komentar:

  1. asslmkm mas...
    saya ada kendala ni mas, kemaren sudah pernah buat jam digital pake lcd sudah bisa jalan dengan baik mas...
    tetapi sekarang saya coba make 7segment bermasalah mas..
    masalahnya pas di matikan suply jamnya reset nggak nyimpan gitu padahal udah make rtc..waktu pake lcd dulu aman2 aja mas, kira - kira dimana salahnya ya mas? thanks mas

    BalasHapus
  2. mau tanya mas,kalo misalnya saya mau menentukan setiap jam 13.oo alarm diaktifkan, dan alarm tersebut terhubung pada portA.0, kira2 gimana bentuk programnya? mohon bantuannya....

    BalasHapus
  3. mas...izin jadi bahan refrensi tugas akhir ya mas...makasih

    BalasHapus
  4. mas minta posting donk programnya,alarm menggunakan rtc dengan tampilan lcd.buat referensi dan mohon bantuannya.Terima kasih banyak.te2p lanjutkan share ilmunya.

    BalasHapus
  5. mas jika digunakan sebagai alaram gimana y?tolong posting program dan simulasinya.terima kasih banyak.semoga tambah terus ilmunya agar dapat selalu berbagi.

    BalasHapus
  6. mas bro, minta tolong, saya sudah coba, tapi di lcd gak keluar jam dan tanggal, yang keluar angka 165 semua, kira2 yang salah di bagian mana?
    terus kaki 7 & 8 DS1307 itu dihubungkan kemana?
    tolong bantuannya

    BalasHapus
  7. mas, saya udah dicoba source codenya cuman tampilan time n date di lcd pr0teus berkedip-kedip, kenapa ya?
    terus, gmna mau nampilan nama hari (senin -minggu)di lcd nya mas? mkash

    BalasHapus
  8. mas mau tanya...kalau di koneksikan dengan relay bagaimana?

    misal jam 17.00 relay ON dan jm 06. relay OFF?

    terima kasih...

    BalasHapus
  9. mas, proteus versi berapa dipakai? cz proteus v7.7 nda ada chip rtcds1307.bagaimana cara tambahkan 1307 diproteus?

    thanks b4!...

    BalasHapus