Sebelumnya sudah pernah saya posting tentang RTC DS1307 juga pada Tutorial Jam Digital dengan Bascom AVR, sedikit teori dan datasheet RTC DS1307 dapat dilihat pada postingan tersebut.
Pada tutorial kali ini saya akan memberikan contoh program jam digital dengan RTC DS1307 menggunakan bahasa pemrograman CodeVision AVR. Jam digital tersebut akan menampilkan tanggal dan waktu pada LCD dan port serial atau Hyperterminal.
Pengaturan LCD pada wizard CodeVision AVR sbb:
Pengaturan port serial pada wizard CodeVision AVR sbb:
Pengaturan I2C DS1307 pada wizard CodeVision AVR sbb:
Jangan lupa pilih data float pada pengaturan Project --> Configure --> C Compiler sbb:
Listing Program :
#include <mega16.h>
#include <delay.h>#include <stdio.h>
// I2C Bus functions
#asm
.equ __i2c_port=0x15 ;PORTC
.equ __sda_bit=1
.equ __scl_bit=0
#endasm
#include <i2c.h>
#include <ds1307.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>
char buf[33];
unsigned char dd;
unsigned char mm;
unsigned char yy;
unsigned char s;
unsigned char m;
unsigned char h;
void main(void)
{
PORTA=0x00;DDRA=0x00;
PORTB=0x00;DDRB=0x00;
PORTC=0x00;DDRC=0x00;
PORTD=0x00;DDRD=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;
ACSR=0x80;
SFIOR=0x00;
i2c_init();
rtc_init(0,0,0);
lcd_init(16);
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("==Digital CLOCK==");
lcd_gotoxy(0,1);
lcd_putsf("===============");
printf("Jam Digital RTC DS 1307\r");
delay_ms(2000);
rtc_set_date(21,03,12);
rtc_set_time(20,51,00);
while (1)
{
rtc_get_time(&h,&m,&s);
rtc_get_date(&dd,&mm,&yy);
lcd_gotoxy(0,0);
sprintf(buf,"Tanggal:%02u/%02u/%02u",dd,mm,yy);
lcd_puts(buf);
lcd_gotoxy(0,1);
sprintf(buf,"Waktu :%02u:%02u:%02u",h,m,s);
lcd_puts(buf);
printf("Tanggal: %02u:%02u:%02u \r",dd,mm,yy);
printf("Waktu : %02u:%02u:%02u \r",h,m,s);
delay_ms(1000);
};
}
Setelah Mendonwloadkan sekali dan sudah menampilkan jam pada LCD. maka butuh mendonwloadkan sekali lagi namun pada bagian :
rtc_set_date(21,03,12);
rtc_set_time(20,51,00);
rtc_set_time(20,51,00);
di hilangkan atau di no-Aktifkan, agar hasil setingan tidak berubah saat jam mulai di run kembali.
donwload pertama :
rtc_set_date(21,03,12);
rtc_set_time(20,51,00);
rtc_set_time(20,51,00);
disesuaikan dengan tanggal dan jam saat ini: