Jbptunikompp GDL Irwansetyo 18848 11 11 - RTC
Jbptunikompp GDL Irwansetyo 18848 11 11 - RTC
11.1
Tujuan
Mengenal dan memahami prinsip dasar RTC, membuat simulasi jam digital
danmemodelkan dalam perangkat keras, serta mencatat pada EEPROM
11.2
Dasar Teori
11.2.1 EEPROM
EEPROM serial adalah inovasi teknologi non-voletile memory yang
menarik. Berbeda pada umumnya chip memori yang biasa diakses secara paralel,
memori jenis ini memiliki cara akses serial dengan suatu standar tersendiri. Ada
dua standar yang umum digunakan yaitu I2C Bus dan Microwire .
Akses kesebuah alamat sel memory dilakukan secara serial, dan penulisan
ataupun pembacaan data juga dilakukan secara serial. IC EEPROM serial yang
digunakan produk ATMEL yaitu AT24C512 yang menyediakan 524,288 bit
Electrically Erasable and Programmable Read Only Memory (EEPROM)
pengalamatan word 128 * 16 bit dengan cara akses menggunakan teknologi
Microwire. Berikut ini adalah konfigurasi pin AT24C512.
A0
VCC
A1
WP
NC
SCL
GND
SDA
Nama Pin
1
2
3
4
5
6
7
8
A0
A1
NC
GND
SDA
SCL
WP
VCC
Fungsi
Address Input
Address Input
No Connection
Ground
Serial Data
Serial Clock Input
Write Protect
Supply Power
11-1
11.2.2 RTC
Real-time clock disingkat RTC adalah jam di komputer yang umumnya berupa
sirkuit terpadu yang berfungsi sebagai pemelihara waktu. RTC umumnya
memiliki catu daya terpisah dari catu daya komputer (umumnya berupa baterai
litium) sehingga dapat tetap berfungsi ketika catu daya komputer terputus.
Kebanyakan RTC menggunakan oskilator kristal.
RTC tipe DS1307 merupakan jenis pewaktu yang menggunakan komunikasi
serial untuk operasi tulis baca, dengan spesifikasi berikut ini:
Real-time clock (RTC) meyimpan data-data detik, menit, jam, tanggal, bulan,
hari dalam seminggu, dan tahun valid hingga 2100;
VCC
X2
SQW/OUT
SCL
VBATt
GND
SDA
Nama Pin
1
2
3
4
5
6
7
8
X1
X2
VBAT
GND
SDA
SCL
SQW/OUT
VCC
Fungsi
Oscillator Crystal
32,768KHz
Battery Input (+3V)
Ground
Serial Data
Serial Clock Input
Square Wave/Output Driver
Supply Power
11-2
X1 dan X2 adalah pembangkit pulsa yang terhubung dengan quart krtstal 32,768Khz
sebagai internal circuit oscillator yang didesain dengan CL 12,5pF. X1 adalah osilator
input yang terhubung langsung dengan kristal, sedang X2 adalah keluaran dari osilator
kristal internal.
Power Control merupakan catu daya yang mensuplay tegangan ke DS1307, Vcc adalah
daya luar sebesar 5V dan VBAT sebagai suplai input dengan 3V lithium Cell. Tegangan
baterei harus berada diantara batasan minimum dan maksimum pengoperasian. Baterei
lithium 48mAh atau lebih dapat mempertahankan fungsi RTC selama 10 tahun.
Serial Bus Interface And Address Register merupakan jalur data serial dan pengalamatan
register DS1307 dengan akses pulsa melalui SCL dan SDA. SCL (Serial Clock) berfungsi
sebagai clock input I2C dan digunakan untuk sinkronisasi data serial. SDA (Serial Data)
berfungsi sebagai data input/output untuk I2C serial, baik SCL dan SDA masih
memerlukan pull up eksternal.
Control Logic merupakan pengendali data-data yang dibaca ataupun ditulis melalui SCL
dan SDA dengan pewaktu dari osilator kristal.
Buffer (7 bytes) adalah penyangga sementara sebelum data diterima atau dikirim,
berkisar 7 bytes (7 x 8 bit) sebagai transit pengalamatan register 8 bit detik-menit-jamhari-tanggal-bulan-tahun.
Pemodelan dan Simulasi
11-3
Clock, Calender and Control Register atau CR berisi informasi clock dan kalender serta
register pengendali untuk mengontrol pengoperasian SQW/OUT.
Clock and Calender merupakan register RTC dengan waktu dan kalender dengan akses
pembacaan dan penulisan register byte dalam format BCD seperti yang diperlihatkan
pada tabel berikut:
.
11-4
(a)
(b)
RTC
Y1
U3
32.768KHz
BAT1
3V
1
2
3
4
X1
VCC
X2
SQW
VBAT SCL
GND
SDA
8
7
6
5
VCC
PB2
PB0
PB1
R-scl
10K
R-sda
10K
DS1307RTC
Contoh Aplikasi:
Sebelum memulai akses RTC lakukan settingan seperti berikut:
#include <bcd.h>
#define port_segmen PORTA //misalkan data segmen di PORT A
#define sel1 PORTC.1 //drive 1
#define sel2 PORTC.2 //drive 2
#define sel3 PORTC.3 //drive 3
#define sel4 PORTC.4 //drive 4
#define nol 0xc0
#define satu 0xf9
#define dua 0xa4
#define tiga 0xb0
#define empat 0x99
#define lima 0x92
#define enam 0x82
#define tujuh 0xf8
#define delapan 0x80
Pemodelan dan Simulasi
11-5
11-6
{
buff_scan = 0;
switch (cnt_dsp)
{
case 0:
sel4 = 1;
port_segmen = buff_dsp[0];
sel1 = 0;
break;
case 1:
sel1 = 1;
port_segmen = buff_dsp[1];
sel2 = 0;
break;
case 2:
sel2 = 1;
port_segmen = buff_dsp[2];
sel3 = 0;
break;
case 3:
sel3 = 1;
port_segmen = buff_dsp[3];
sel4 = 0;
break;
default:;
}
if (++cnt_dsp == 4)
cnt_dsp = 0;
}
}
char bcd2seg(char c)
{
switch (c)
{
case 0:
c = nol;
break;
case 1:
c = satu;
break;
case 2:
c = dua;
break;
case 3:
c = tiga;
break;
case 4:
c = empat;
break;
case 5:
c = lima;
break;
case 6:
Pemodelan dan Simulasi
11-7
c = enam;
break;
case 7:
c = tujuh;
break;
case 8:
c = delapan;
break;
case 9:
c = sembilan;
break;
}
return c;
}
//switch case digunakan untuk melakukan seleksi dengan banyak kondisi, scanning dapat juga
dilakukan langsung setelah proses pengambilan waktu dan kalender di DS1307
Contoh proses pengambilan waktu:
void get_time()
{
char buff[4];
rtc_get_time(&jam,&mnt,&dtk);
jam = bin2bcd(jam);
mnt = bin2bcd(mnt);
buff[0] = mnt & 0xf;
buff[1] = ((mnt & 0xf0) >> 4);
buff[2] = jam & 0xf;
buff[3] = ((jam & 0xf0) >> 4);
buff_dsp[0] = bcd2seg(buff[0]);
buff_dsp[1] = bcd2seg(buff[1]);
buff_dsp[2] = bcd2seg(buff[2]);
buff_dsp[3] = bcd2seg(buff[3]);
if (flag_blink)
buff_dsp[2] &= 0x7f; //memanfaatkan titik pada seven segment ke 3
untuk dijadikan detik.
}
Port-port di atur dengan nilai seperti berikut:
PORTA=0xFF;
DDRA=0xFF; //output
PORTB=0x00;
DDRB=0x00;
PORTC=0x1F;
DDRC=0xFF;//output
PORTD=0x00;
DDRD=0x00;
11-8