Membuat Jam Digital Sederhana

Written by Iccank. Posted in Project

Project kali ini adalah membuat jam digital sederhana dengan menggunakan 4 buah 7segment dan ATmega8 dan untuk metode pemrogramannya hanya menggunakan library "delay.h". Terus Bagaimana caranya? kenapa tidak menggunakan IC decoder untuk 7segment seperti IC 7447?

Jawabannya sederhana yaitu selain rangkaiannya tidak terlalu rumit juga bisa menghemat penggunaan PORT pada mikrokontroler. Caranya dapat kamu lihat seperti gambar skematik rangkaian dibawah ini

skematik jam digital

Jika kita lihat skematik rangkaian diatas semua 7Segment terhubung paralel dengan PORTD pada mikrokontroler kemudian kaki Common / Enable pada seven segment yang biasa kita hubung langsung ke ground itu kita hubungkan dengan PORTC pada mikrokontroler, ditambah dengan 2 buah  LED dan push button yang tersambung dengan PORTB.

Terus bagaimana cara kerjanya sehingga 7segment bisa menampilkan angka yang berbeda sementara semua tersambung secara paralel dengan PORTD?. Caranya adalah kita menggunakan metode scanning yaitu menyalakan 7segment secara bergantian dengan kecepatan tinggi sehingga tampak menyala secara normal. Yang berfungsi untuk mengatur pergantian 7segment adalah PORTC yang jika berlogika 0 (terground) maka 7segment akan aktif, sebaliknya jika berlogika 1 (tercatu) maka 7segment akan mati

Selanjutnya berikut contoh programnya:

#include <mega8.h>
#include <delay.h>
//-------------------7seg-------------------------------
#define  set PORTD
//-------------------enable-----------------------------
#define enable1 PORTC.2
#define enable2 PORTC.3
#define enable3 PORTC.4
#define enable4 PORTC.5
//-------------------tombol----------------------------
#define tombol1 PINB.1
#define tombol2 PINB.3
//-------------------kondisi---------------------------
#define mati 1
#define nyala 0
unsigned char x=5,a ,y,detik,sat_mnt,pul_mnt,sat_jam,pul_jam,hit[10]={0b01111111, 0b00011100, 0b10111011, 0b10111110, 0b11011100, 0b11101110, 0b11100111, 0b00111100, 0b11111111, 0b11111110};   //common katoda
void rolling()
{ 
        enable4=1;enable1=0;
        set=hit[sat_mnt];
        delay_ms(x);
     if(sat_mnt>9){sat_mnt=0;pul_mnt++;}  
        enable1=1;enable2=0;
        set=hit[pul_mnt];
        delay_ms(x);            
     if(pul_mnt>5){pul_mnt=0;sat_jam++;} 
      enable2=1;enable3=0; 
        set=hit[sat_jam];
        delay_ms(x);
     if(sat_jam>9){sat_jam=0;pul_jam++;}            
        enable3=1; enable4=0;
        set=hit[pul_jam];
        delay_ms(x);
    if(pul_jam>=4&&sat_jam==2){sat_jam=0;pul_jam=0;} 
}

void setting()
{   
    while(1)
    {
     if (tombol1==0)
        {   
            delay_ms(200); 
            while(tombol1==0);
            a++;
           
            if(a==1)
                {   for(;;)
                        {
                            enable4=1;enable1=0;;set=hit[sat_mnt];
                            if(tombol2==0){  delay_ms(200); while(tombol2==0);sat_mnt++;if(sat_mnt>9)sat_mnt=0;}
                            else if(tombol1==0){break;};
                        };
                }
            else if(a==2)
                {   for(;;)
                        {
                            enable1=1;enable2=0;;set=hit[pul_mnt];
                            if(tombol2==0){  delay_ms(200); while(tombol2==0);pul_mnt++;if(pul_mnt>5)pul_mnt=0;}
                            else if(tombol1==0){break;};
                        };
                }
            else if(a==3)
                {   for(;;)
                        {
                            enable2=1;enable3=0;;set=hit[sat_jam];
                            if(tombol2==0){  delay_ms(200); while(tombol2==0);sat_jam++;if(sat_jam>9)sat_jam=0;}
                            else if(tombol1==0){break;};
                        };
                }
            else if(a==4)
            {   for(;;)
                        {
                            enable3=1; enable4=0;;set=hit[pul_jam];
                            if(tombol2==0){delay_ms(200); while(tombol2==0);pul_jam++;if(pul_jam>2)pul_jam=0;}
                            else if(tombol1==0){break;};
                        };
                }
            else if(a>4){a=0;goto lanjut;};
            }
            
          else if(a==0)break;
               
       }
       
       
       lanjut:               
}
void jalan()
{
 for (detik=1;detik<60;detik++)
            {   
                    DDRB.4=DDRB.5=1;
                    PORTB.5=1;
                    PORTB.4=1;
                   for (y=0;y<=24;y++)
                    {
                        rolling();
            setting();
                        
                    };
                    PORTB.4=0;
                    PORTB.5=0; 
                    for (y=0;y<=24;y++)
                    {
                        rolling();
            setting();
                    };
                   
            }; 
            sat_mnt++;  
          
       
}
void main(void)
{
PORTB=0xFF;
DDRB=0x00;
PORTC=0xFF;
DDRC=0xFF;
PORTD=0x00;
DDRD=0xFF;
   set=hit[0];
   delay_ms(10);
   
    while(1)
    { jalan(); }          
            
        
}

Untuk design LAYOUT dan VIDEO-nya seperti dibawah:

layout jam digital

Design Skematik dan layout dalam bentuk PDF bisa kamu download pada link dibawah:

Skematik layout

Semoga berguna... File program lengkap bisa download disini!

Ditunggu Komentarnya hehehe...

Comments (162)

700 characters remaining

Cancel or

  • itha
    mas kalau pengen nampilin detiknya gmna mas,, ??
  • Iccank Devilz
    @itha detiknya ngak bisa ditampilkan karena hanya memakai indikator LED, jadi perubahan detiknya hanya bisa dihitung dari brapa kali LEDnya nyala dan mati..
  • itha
    mas, ini atmega 8 bs di ganti dengan atmega 16 yah ,, ??

    kalau bs ,, sourcenya yg di ganti yang mana mas ?

    mohon bantuannya
  • Iccank Devilz
    @itha kalo mau ganti ATmega8 dengan ATmega16 tinggal ganti aja "#include<mega8>" jadi "#include<mega16>"
    semoga membantu :cool: :cool: :cool:
  • itha
    ok ,, makasih mas
  • Iccank Devilz
    @itha iy sama2..
  • indra
    Terima kasih infonya gan

    ini aku juga posting Jam digital dengan tampilan seven segmen dan LCD menggunakan RTC DS1307 dan mikrokontroler AVR atmega 8535

    Bisa di check disini
    http://bagindra.blogspot.com/2012/02/jam-digital-dengan-tampilan-seven.html
  • Iccank Devilz
    @indra keren bro..!! pake bahasa basic..!!
  • salmi
    mas nanya, kalo jam digital ini mau ditambah dengan fungsi alarm gimana mas? trus penambahan nya seperti apa? terima kasih sebelumnya
  • Iccank Devilz
    @salmi tinggal tambahkan program untuk mengaktifkan alarmnya dengan menggunakan PORT yang tersisa pada mikrokontroler, tetapi sebelumnya itu dibuatkan terlebih dahulu program untuk mengecek waktu kapan Alarmnya aktif..!!
  • bang un
    mas kalo di tambah rtc gmana programnya ?
  • Iccank Devilz
    @bang un bisa dilihat disini jam RTC dan 7SEGMENT
  • yudi_electro
    lam kenal kk,
    lagi bahas rtc nee.. kebetulan kk ak juga buat tapi gak pake 7 segment cuman tampil lcd + keypad ,
    ak masih bingung bagaimana cara set jam secara manual menggunakam keypad, bisa kasih contoh listing programny
    mohon bantuannya kk
    trims ne emailku kk (yudi_themaster@yahoo.com)
  • yudi_electro
    lam kenal kk iccank dan semuanya
    lagi bahas rtc ya ne ya..
  • Iccank Devilz
    @iswahyudi Silahkan join ke forum terus bikin thread project yang saudara buat.. ntar sama-sama dibantuin..
  • timitrisanto
    mas kira kira memerlukan modal berapa ya?
  • Iccank Devilz
    @trisanto ngak banyak kok, ngak sampe ratusan...

    tinggal kalkulasi saja harga-harga komponen yang dipakai seperti 7segment = Rp. 5rb, atmega8 = Rp.35rb, resistor = Rp.100, IC 7805 = Rp. 5rb, Xtall = Rp. 5rb & PCB+cetak = Rp.30rb
  • timitrisanto
    Minta daftar komponennya dong.....
  • Iccank Devilz
    @trisanto cuman pake 7segment & minimum system mikro, list komponennya dilihat disini
  • fadjar
    mas klu bikin nya pake ewb gmn ya? mumet aku..