Sunday, August 5, 2012

pemrograman RTC DS1307 dengan bahasa C codevision untuk AVR

Apa itu RTC ?

RTC yang dimaksud disini adalah real time clock (bukan real time computing), biasanya berupa IC yg mempunyai clock sumber sendiri dan internal batery untuk menyimpan data waktu dan tanggal. Sehingga jika system komputer / microcontroller mati waktu dan tanggal didalam memori RTC tetap uptodate.
Salah satu RTC yang sudah populer dan mudah penggunaanya adalah DS1307, apalagi pada Codevision sudah tersedia fungsi-fungsi untuk mengambil data waktu dan tanggal untuk RTCDS1307 ini.

Fitur-fitur DS1307:
  •  Real-time clock (RTC)  menghitung detik, menit, jam,tanggal,bulan dan hari dan tahun valid sampai tahun 2100
  • Ram 56-byte, nonvolatile untuk menyimpan data.
  • 2 jalur serial interface (I2C).
  • output gelombang kotak yg diprogram.
  • Automatic power-fail detect and switch
  • Konsumsi arus hanya 500nA pada batery internal.
  • mode dg oscillator running.
  • temperature range: -40°C sampai +85°C
Untuk membaca data tangal dan waktu yg tersimpan di memori RTC Ds1307   dapat dilakukan   melalui komunikasi serial I2C spt tampak pada gambar berikut:

Cara pembacaan
DS1307 beropersai sebagai slave pada bus I2C. Cara Access pertama mengirim sinyal START diikuti device address dan alamat sebuah register yg akan dibaca. Beberapa register dapat dibaca sampai STOP condition dikirim.

Data waktu dan tanggal tersimpan dalam memori  masing masing 1 byte , mulai dari alamat 00H sampai 07H.  Sisanya (08H ~ 3FHalamat RAM yg bisa digunakan).
Pemrograman RTC DS1307  dengan Codevision.
Codevision sudah menyediakan fungsi-fungsi khusu untuk mengakses data DS1307 jadi kita tinggal menggunakanya. Apalagi dengan fasilitas codewizard pemrograman RTC menjadi mudah.

setelah  kita klik ok  maka akan  tersedia template Code program sbb:
#include <mega16.h>
// I2C Bus functions
#asm
.equ __i2c_port=0×18 ;PORTB
.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>
char tampungLCD[16];
void main(void)
{
unsigned char hour,minute,second;
/ I2C Bus initialization
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);
/* initialize the DS1307 RTC */
rtc_init(0,0,0); //tambahankan baris ini
//this function sets the current time of the RTC.
rtc_set_time(6,0,0);  // jam 6:00:00
while (1)
{
/* read time from the DS1307 RTC */
rtc_get_time(&hour,&minute,&second);
//tampilkan di LCD 2×16
lcd_gotoxy(0,0);
sprintf(tampungLCD,”Time: %d:%d:%d “,hour,minute,second);
lcd_puts(tampungLCD);
}
}
Referensi:
  • Dataseheet DS1307
  • Codevision help File

0 komentar:

Post a Comment

    Followers