Mengenal dan memahami prinsip dasar RTC, membuat simulasi jam digital dan memodelkan dalam perangkat keras, serta mencatat pada EEPROM
loading...
Mengenal dan memahami prinsip dasar RTC,
membuat simulasi jam digital dan memodelkan dalam perangkat keras, serta mencatat pada EEPROM
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.
Konfigurasi Pin AT24C512
No
|
Nama Pin
|
Fungsi
|
1
|
A0
|
Address Input
|
2
|
A1
|
Address Input
|
3
|
NC
|
No Connection
|
4
|
GND
|
Ground
|
5
|
SDA
|
Serial Data
|
6
|
SCL
|
Serial Clock Input
|
7
|
WP
|
Write Protect
|
8
|
VCC
|
Supply Power
|
Fungsi Pin AT24C512
AT24C512
menyediakan 8 bit pengalamatan dengan kondisi start untuk operasi baca tulis ke
atau dari chip melalui address bit A1 dan A0.
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;
·
56-byte, battery-backed, RAM nonvolatile (NV) RAM untuk
penyimpanan;
·
Antarmuka serial Two-wire (I2C)
·
Sinyal luaran gelombang-kotak terprogram (Programmable
squarewave);
·
Deteksi otomatis kegagalan-daya (power-fail) dan
rangkaian switch;
·
Konsumsi daya kurang dari 500nA menggunakn mode baterei
cadangan dengan operasional osilator;
·
Tersedia fitur industri dengan ketahana suhu: -40°C hingga
+85°C
·
Tersedia dalam kemasa 8-pin DIP atau SOI
Konfigurasi Pin
DS1307
No
|
Nama Pin
|
Fungsi
|
1
|
X1
|
Oscillator
|
2
|
X2
|
32,768KHz
|
3
|
VBAT
|
|
4
|
GND
|
Ground
|
5
|
SDA
|
Serial Data
|
6
|
SCL
|
Serial Clock Input
|
7
|
SQW/OUT
|
Square Wave/Output Driver
|
8
|
VCC
|
Supply Power
|
Tabel 11-2 Fungsi Pin DS1307
|
Blok Diagram Circuit DS1307
- 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-jam-hari-tanggal-bulan-tahun.
- 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:
Register RTC
Dari tabel terlihat
bahwa RTC memiliki 8 register (R0 – R7 / detik – jam dan CR) dalam ruang
address 00 – 07h. Bit 7 dari R0 adalah CH (Clock
Halt) bit, ketika di set ‘1’ maka osilator disable dan ketika di clear ‘0’ maka osilator enable. DS1307 dapat dijalankan dengan 12jam atau 24jam, mode
pemilih berada di Register Jam bit ke 6. Ketika ‘high’ berarti mode 12 jam
dipilih dan bit ke 5 akan selalu ‘high’ selama PM.
|
Bit Control Register
Bit 7 = Control Out yaitu sebagai pengendali
keluaran pin SQW/OUT ketika gelombang – square
disable. Jka SQWE = 0, maka SQW = 1
jika OUT = 1, dan akan SQW = 0 jka OUT = 0.
Bit 4 = SQWE (Square Wave Enable). Ketika bit ini di
set ‘1’ maka osilator output enable.
Frekuensi yang dihasilkan tergantung dari nilai RS1 dan RS0.
Bit 1 dan 0 = bit
pengendali frekuensi SQW out ketika enable,
dan dapat dipilih melalui RS1 dsan RS0 dengan range frekuensi seperti pada tabel
berikut:
Pemilih RS Bit
Bentuk fisik dan rangkaian
pengoperasian DS1307 adalah sebagai berikut:
(a) Bentuk fisik (b) DS1307 Circuit
|
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
#define sembilan
0x90
// Inisialisasi
scl dan sda di Port B
#asm
.equ __i2c_port=0x18 ;PORTB
.equ __sda_bit=1
.equ __scl_bit=0
#endasm
#include <i2c.h>
#include <ds1307.h>
Untuk inisialisasi diatas dapat dilakukan menggunakan CodeWizzardAVR seperti berikut:
Pilih I2C → PORTB → SCL Bit=0, SDA Bit=1 → aktifkan DS1307 → centang kolom enable
Setting DS1307
Contoh scanning 7
segmen adalah:
char cnt_dsp=0;
char buff_scan=0;
bit flag_blink;
// Timer 0
overflow interrupt service routine
interrupt
[TIM0_OVF] void timer0_ovf_isr(void)
{
if (++buff_scan ==
255)
{
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:
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;
loading...
Comments
Post a Comment