e-book tutorial membuat jam digital dengan RTC

Belajar Berkreasi

MEMBUAT JAM DIGITAL
DENGAN RTC DAN ATMEGA 8

Membuat Jam Digital dengan Mudah
Langkah Pertama Buatlah PCB dibawah ini
Ukuran PCB : 17,1 cm x 6,1 cm

Gambar Skema :

IC RTC 3701
IC ULN 2803

Tata letak komponen :

Komponen yang dibutuhkan :
1.
2.
3.
4.

5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.

IC Regulator 7805
Jack DC Female (optional kalau mau disambung kabel langsung juga bisa)
Capasitor elco 100uF/12 V
Saklar ON/OFF (optional jika tidak mau pakai saklar bisa langsung di jumper saja)
Capasitor elco 100uF/12 V

IC- ATMega 8
Chrystal 12 MHz
IC ULN 2803
Resistor 100 Ohm
Transistor fcs 9013 (posisi tulisan depan kita kakinya E-B-C)
Resistor 330 Ohm
Seven segmen
Push button kecil
Batre kancing 3 V (ini bisa juga diganti 2 batre ABC 1,5 V di seri)
IC RTC DS 3107
Resistor 4 k 7
Resistor 47 K
Chrystal 32,678 MHz

Cara Pembuatan :
1. Cetak Layout PCB diatas dengan printer laser pada kertas foto / kertas kalender/kertas brosur atau kertas
yang lain yang tipis dan mengkilap

2. Siapkan PCB Polos anda, dan panaskan setrika. Setrikalah layout ini pada PCB sehingga jalur berwarna hitam
akan nempel di PCB


Ketika di setrika posisi Jalur ada di bawah (tidak seperti Gambar)
3. Hasilnya setelah disetrika :

4. Cek jalur yang tercetak, kalau putus, tebalkan dengan spidol permanen
5. Kemudian larutkan dalam larutan Ferit Chlorida
6. Bor PCB dengan mata bor 0,8 cm

7. Pasang komponen pada PCB, mulailah dengan pemasangan Jumper/sambungan kabel diikuti dengan
pemasangan komponen lainnya

Jika semua komponen telah dipasang, kita lanjut ke pemrograman IC Atmega8
Hubungkan IC anda dengan Downloader anda, disini saya contohkan menggunakan USBasp.
Jika anda menggunakan downloader jenis yang lainnya, misalkan type serial, atau LPT
sesuaikan dengan kaki downloader, kemungkinan antara downloader satu dengan yang
lainnya posisi soketnya berbeda. Pastikan kaki : mosi, miso, sck, rst, vcc dan gnd tidak
terbalik, karena dapat merusak IC anda
Ini gambar USBasp yang saya gunakan ;

INSTALASI USBASP

1. Colokkan USBASP ke port USB Laptop
2. Jika USBASP anda tidak dikenali, maka anda perlu instal drivernya
3. Buka Device manager laptop anda

USBASP tidak dikenali

4. Instal drivernya dengan cara klik kanan pada tulisan USBasp  klik Update Driver Software

5. Aka ada ta pila seperti di a ah i i, pilih Bro se

6. Browse driver USBasp anda lalu klik NEXT

computer for driver software

7. Jika Wi do s s urit

e gi gatka klik aja I stal this dri er soft are a

8. Jika driver sukses di instal akan ada tulisan seperti ini ;


a

9. Dan di Device manager sudah dikenali

INSTALASI KHAZAMA AVR PROGRAMMER
1. Double klik Installer Khazama
2. Klik NextInstal  Finish

3. Tampilan Khazama AVR Programmer

Konfigurasi PIN Atmega 8 ;

Memasang USBasp pada Mikrokontrol

Contoh pemasangan untuk memprogram IC mikro kontroller dengan USBASP

Jika sudah di rangkai seperti gambar, maka mikrokontroller siap untuk diprogram

Mengecek Sambungan dan rangkaian Mikrokontrol
dengan Software Khazama AVR Programmer

1. Pastikan USBASP telah terkoneksi dengan Mikrokontroller dan laptop dengan benar
2. Buka software Khazama AVR Programmer
3. Klik Command  Read Chip Signature

4. Jika Rangkaian dan penyambungan anda benar, maka akan muncul tulisan seperti dibawah ini, jika
masih ada error silahkan cek kondisi IC Mikro dan penyambungannya sudah betul belum.

5. IC Mikrokontroller Siap untuk di Program

Memasukkan Program kedalam Mikrokontroller
1. Buka Khazama AVR Programmer

Klik Tanda ini
2. Buka file ja

erada, pilihlah file a g er ekste si ja .He —klik Open

3. Lalu Klik Auto Program

Sampai disini pemrograman Jam telah selesai, tapi tunggu dulu, kita harus mengatur fuse bit dari IC

At mega8 agar menggunakan kristal 12 Mhz yang kita pasang, karena secara default, IC ini
menggunakan Clock internal 1 MHz sehingga kalau tidak kita setting maka tampilan jam kita akan
berkedip.

CARA SETTING FUSE BIT PADA ATMEGA 8
Perhatian !!! NOHON BERHATI-HATI DALAM SETTING FUSE BIT, LAKUKANLAH SESUAI DENGAN
PETUNJUK YANG SAYA AJARKAN, KARENA KESALAHAN MENGATUR FUSE BIT DAPAT
MENYEBABKAN IC ANDA MENJADI TIDAK DAPAT DIGUNAKAN LAGI !!

1. Buka software Khazama

2. Klik Command fuse bit and Lock

3. Klik Read ALL

4. Geser Kebawah cari tampilan seperti di bawah :
ext crystal/Resonator High Freq;Start-Up time 16 ck _ 4 ms;”

PASTIKAN ANDA MEMILIH DENGAN BENAR, KARENA KESALAHAN
PEMILIHAN FUSE BIT LOCK DAPAT MERUSAK IC ANDA !!!


5.

La gkah sela jut a klik

write All:

IC Mikrokontroller Atmega8 Siap untuk digunakan !!

Pasang dengan hati-hati ke Rangkaian Jam digital anda, jangan sampai
kaki-kakinya bengkok dan patah !!

Cara setting Jam :
Cara setting Jam ikuti petunjuk dibawah ini ;
Tekan Tombol paling kiri (B) dan tekan reset A) (keduanya ditekan)
lalu lepaskan reset (A).
Tunggu beberapa saat... anda akan masuk ke mode setting jam

A


B

C

D

E

Kemudian tekan B untuk mengurangi jam, dan tekan C untuk menambah Jam
Tekan D untuk mengurangi menit, tekan E untuk menambah menit
Lalu tekan Reset
Selamat jam anda siap digunakan !!
Semoga berhasil !!!

Semua skema dan gambar PCB, source code diambil
dari website www.inzarsalfikar.com

Modifikasi Jam Digital Dengan Tampilan LED

Cetak modifikasi PCB jam seven segmen menjadi PCB jam besar dengan lampu LED

Ukuran PCB : 17,1 cm x 6,1 cm

Buatlah PCB tampilan seven segmen dengan LED

Cara Penyambungan kedua PCB

654321

Sambungkan pin dengan huruf : fgabcde Pada PCB rangkaian jam dengan fgabcde Pada PCB LED , dan sambungkan
pin 654321 Pada PCB rangkaian jam dengan pin 654321 Pada PCB LED.
Jangan sampai kebalik urutannya !!
Foto cara penyambungan kedua PCB

Uji coba rangkaian (pastikan IC Atmega8 sudah di program seperti ekperimen diatas)

Selamat berkarya...
Terimakasih..
SALAM EDUKASI

Disusun Oleh : ROKHMAD ASTIKA TRIPRASETIA


Phone / wahtsapp : 08157712604
SPECIAL THANK FOR :

Semua skema dan gambar PCB, source code diambil dari website www.inzarsalfikar.com

Source code :

Simpan dengan nama file : Jam.c
/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.3 Standard
Automatic Program Generator
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 3/6/2012
Author : kuro
Company : kurochan
Comments:

Chip type
: ATmega8
Program type
: Application
Clock frequency : 12.000000 MHz
Memory model
: Small
External SRAM size : 0
Data Stack size : 256
*****************************************************/
#include
#include
#define satu
#define dua
#define tiga
#define empat
#define lima
#define enam
#define tujuh
#define delapan
#define sembilan
#define nol
#define padam
#define dot
#define angka
#define dig1
#define dig3
#define dig4
#define dig5

PORTD=0b00011000
PORTD=0b11010110
PORTD=0b11011100
PORTD=0b01111000
PORTD=0b11101100
PORTD=0b11101110
PORTD=0b10011000
PORTD=0b11111110
PORTD=0b11111100
PORTD=0b10111110
PORTD=0b00000000
PORTD=0b00000001
PORTD

PORTB=0b00000010; delay_ms(1);
PORTB=0b00000100; delay_ms(1);
PORTB=0b00001000; delay_ms(1);
PORTB=0b00010000; delay_ms(1);

#define dig6 PORTB=0b00100000; delay_ms(1);
#define dig2 PORTB=0b00000001; delay_ms(1);
#define hmin
#define hplus
#define mmin
#define mplus

PINC.1
PINC.2
PINC.3
PINC.0

// I2C Bus functions
#asm
.equ __i2c_port=0x15 ;PORTC
.equ __sda_bit=4
.equ __scl_bit=5
#endasm
#include
// DS1307 Real Time Clock functions
#include

// Declare your global variables here
#include "kalkulasi.c"
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=T State6=T State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0x3F;
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0xFF;
DDRC=0x00;
// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTD=0x00;
DDRD=0xFF;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped

TCCR0=0x00;
TCNT0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// 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);
if(hmin==0)
{
delay_ms(2000);
while(1)
{
if(hmin==0){haur--;delay_ms(100);}
if(hplus==0){haur++;delay_ms(100);}
if(haur==24){haur=0;delay_ms(100);}
if(mmin==0){minut--;delay_ms(100);}
if(mplus==0){minut++;delay_ms(100);}
if(minut==60){minut=0;delay_ms(100);}
h10=haur/10;
h1=haur%10;
m10=minut/10;
m1=minut%10;
s10=0;
s1=0;
jam(h10,h1,m10,m1,s10,s1);
rtc_set_time(haur,minut,0); //untuk menset jam 09:10:26
//rtc_set_date(21,08,87); //untuk menset tanggal: 21 Agustus 1987
}
}
while (1)
{
// Place your code here
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
h10=h/10;
h1=h%10;
m10=m/10;
m1=m%10;
s10=s/10;
s1=s%10;
jam(h10,h1,m10,m1,s10,s1);
};
}

Simpan dengan nama : kalkulasi.c
unsigned char h, m, s, d, mo, y;
unsigned char haur,minut;
unsigned char digit1,digit2,digit3,digit4,digit5,digit6;
unsigned char h10,h1,m10,m1,s10,s1;
void jam(unsigned char angka1,unsigned char angka2,unsigned char angka3,unsigned char
angka4,unsigned char angka5,unsigned char angka6)
{
if(angka1==0){digit1=padam;}
if(angka1==1){digit1=satu;}
if(angka1==2){digit1=dua;}
if(angka1==3){digit1=tiga;}
if(angka1==4){digit1=empat;}
if(angka1==5){digit1=lima;}
if(angka1==6){digit1=enam;}
if(angka1==7){digit1=tujuh;}
if(angka1==8){digit1=delapan;}
if(angka1==9){digit1=sembilan;}
if(angka2==0){digit2=nol;}
if(angka2==1){digit2=satu;}
if(angka2==2){digit2=dua;}
if(angka2==3){digit2=tiga;}
if(angka2==4){digit2=empat;}
if(angka2==5){digit2=lima;}
if(angka2==6){digit2=enam;}
if(angka2==7){digit2=tujuh;}
if(angka2==8){digit2=delapan;}
if(angka2==9){digit2=sembilan;}
if(angka3==0){digit3=padam;}
if(angka3==1){digit3=satu;}
if(angka3==2){digit3=dua;}
if(angka3==3){digit3=tiga;}
if(angka3==4){digit3=empat;}
if(angka3==5){digit3=lima;}
if(angka3==6){digit3=enam;}
if(angka3==7){digit3=tujuh;}
if(angka3==8){digit3=delapan;}
if(angka3==9){digit3=sembilan;}
if(angka4==0){digit4=nol;}

if(angka4==1){digit4=satu;}
if(angka4==2){digit4=dua;}
if(angka4==3){digit4=tiga;}
if(angka4==4){digit4=empat;}
if(angka4==5){digit4=lima;}
if(angka4==6){digit4=enam;}
if(angka4==7){digit4=tujuh;}
if(angka4==8){digit4=delapan;}
if(angka4==9){digit4=sembilan;}
if(angka5==0){digit5=padam;}
if(angka5==1){digit5=satu;}
if(angka5==2){digit5=dua;}
if(angka5==3){digit5=tiga;}
if(angka5==4){digit5=empat;}
if(angka5==5){digit5=lima;}
if(angka5==6){digit5=enam;}
if(angka5==7){digit5=tujuh;}
if(angka5==8){digit5=delapan;}
if(angka5==9){digit5=sembilan;}
if(angka6==0){digit6=nol;}
if(angka6==1){digit6=satu;}
if(angka6==2){digit6=dua;}
if(angka6==3){digit6=tiga;}
if(angka6==4){digit6=empat;}
if(angka6==5){digit6=lima;}
if(angka6==6){digit6=enam;}
if(angka6==7){digit6=tujuh;}
if(angka6==8){digit6=delapan;}
if(angka6==9){digit6=sembilan;}
angka=digit1;dig1;
angka=digit2;
angka|=dot;dig2;
angka=digit3;dig3;
angka=digit4;
angka|=dot;dig4;
angka=digit5;dig5;
angka=digit6;dig6;
}

CATATAN :
FILE : jam.c dan file: kalkulasi.c harus di simpan dalam satu folder ketika
dibuka dengan program CAVR.
Compile menjadi program hex, lalu masukkan kedalam mikrokontroller.