Wednesday, 1 April 2015

Membuat Jam Digital Menggunakan 7 Segment Berbasis ATmega8535

Salam resistorrr!!!
Salam semangat para pemuda generasi bangsa!!!!
Pada kesempatan kali kita akan membuat project jam digital menggunakan 7 segment berbasis ATmega8535. Setelah kita belajar mengenai jam digital pada mikrokontroler  dan Bermain 7 Segment di Proteus menggunakan ATmega8535 sebelumnya, sekarang saatnya kita menggabungkan keduanya. Project kali tidak jauh berbeda dengan jam digital pada mikrokontroler hanya saja displaynya kali ini kita menggunakan 7 segment bertipe common anoda (positif bersama).
Langsung saja.


1. Buat rangkaian seperti dibawah ini di software proteus. Jangan lupa setting clocknya jadi external clock agar hasil programnya tepat. Tutorialnya ada di Cara setting Simulasi Proteus Agar menjadi eksternal Clock.



Note : Tipe transistor yang saya digunakan disimulasi ini adalah tipe 2N2222.

2. Untuk program, hampir sama seperti jam digital Jam Digital Pada Mikrokontroler , hanya saja ada perubahan di tampilannya yaitu menggunakan 7-Segment. Perubahannya terletak pada penambahan timer yang dibuat untuk mencacah waktu pada jam digital ini.

Berikut program jam digital selengkapnya.

#include <mega8535.h>
#include <stdio.h>
#include <stdlib.h>

#include <delay.h>

#define Menu PIND.4
#define Down PIND.5
#define Up PIND.6


int angka[10];
unsigned char tampil_7(unsigned char nilai);
void ubah();void setting();   void con();
eeprom unsigned char jam_satuan, jam_puluhan, menit_satuan, menit_puluhan,detik_puluhan,detik_satuan;
void ubah_setting(int a);
int param;
int detik;
// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Reinitialize Timer 1 value
detik_satuan++;
if(detik_satuan>9)
{
detik_satuan = 0;
detik_puluhan++;
    if(detik_puluhan > 5 && detik_satuan == 0 )
    {              
    detik_puluhan = 0;
    menit_satuan++;
    }
}      
TCNT1H=0xD5;
TCNT1L=0xD0;

}


// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x03;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0xFF;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0b01110000;
DDRD=0b00001111;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 10,800 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x05;
TCNT1H=0xD5;
TCNT1L=0xD0;
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
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x04;//04

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// Global enable interrupts
#asm("sei")
detik_satuan=0;
detik_puluhan=0;
while (1)
      {
      // Place your code here
       setting();
       con();
       ubah();
      };
}
 


unsigned char tampil_7(unsigned char nilai)
{

angka[0]=0xC0;
angka[1]=0xF9;
angka[2]=0xA4;
angka[3]=0xB0;
angka[4]=0x99;
angka[5]=0x92;
angka[6]=0x82;
angka[7]=0xF8;
angka[8]=0x80;
angka[9]=0x90;
return angka[nilai];
}


void setting()
{

        unsigned char x=5;
        if(Menu==0)
        {
        delay_ms(300);
        x=4;
        TIMSK=0;
     
        }
     
        while(x==4) // setting detik satuan
        {  
                if(Menu==0)
                {
                delay_ms(200);
                x=3;
                }
             
                if(Down==0)
                {
                delay_ms(200);
                if(menit_satuan<=0) menit_satuan=0;
                menit_satuan--;
                     
                }
             
                if (Up==0)
                {
                delay_ms(200);
                menit_satuan++;
                        if(menit_satuan>9) menit_satuan=0;
                     
                }
              param = 1;
              ubah_setting(param);
               
        }
        while(x==3)
        {     if(Menu==0)
                {
                delay_ms(200);
                x=2;
                }
             
                if(Down==0)
                {
                delay_ms(200);
                if(menit_puluhan<=0) menit_puluhan=0;
                menit_puluhan--;
                     
                }
             
                if (Up==0)
                {
                delay_ms(200);
                menit_puluhan++;
                if(menit_puluhan>9) menit_puluhan=0;
                     
                }
              param = 2;
              ubah_setting(param);
                 
        }
        while(x==2)
        {     if(Menu==0)
                {
                delay_ms(200);
                x=1;
                }
             
                if(Down==0)
                {
                delay_ms(200);
                if(jam_satuan<=0) jam_satuan=0;
                jam_satuan--;
                     
                }
             
                if (Up==0)
                {
                delay_ms(200);
                if(jam_satuan>9) jam_satuan=0;
                jam_satuan++;
                       
                     
                }
             param = 3;
              ubah_setting(param);
                 
        }
     
        while(x==1)
        {     if(Menu==0)
                {
                delay_ms(200);
                x=5;
                TIMSK=0x04;
                detik_satuan=0;
                detik_puluhan=0;
                }
             
                if(Down==0)
                {
                delay_ms(200);
                if(jam_puluhan<=0) jam_puluhan=0;
                jam_puluhan--;
                   
                }
             
                if (Up==0)
                {
                delay_ms(200);
                jam_puluhan++;
                if(jam_puluhan>9) jam_puluhan=0;
                     
                }
               param = 4;
              ubah_setting(param);
               
        }
     
             
}

void ubah_setting(int a)
{
if(a==1)
{
PORTD=0b01111000;
PORTB=tampil_7(menit_satuan);
delay_ms(5);
}
else if(a==2)
{
PORTD=0b01111000;
PORTB=tampil_7(menit_satuan);
delay_ms(5);

PORTD=0b01110100;
PORTB=tampil_7(menit_puluhan);
delay_ms(5);
}
else if (a==3)
{
PORTD=0b01111000;
PORTB=tampil_7(menit_satuan);
delay_ms(5);

PORTD=0b01110100;
PORTB=tampil_7(menit_puluhan);
delay_ms(5);

PORTD=0b01110010;
PORTB=tampil_7(jam_satuan);
delay_ms(5);
}

else if(a==4)
{
PORTD=0b01111000;
PORTB=tampil_7(menit_satuan);
delay_ms(5);

PORTD=0b01110100;
PORTB=tampil_7(menit_puluhan);
delay_ms(5);

PORTD=0b01110010;
PORTB=tampil_7(jam_satuan);
delay_ms(5);

PORTD=0b01110001;
PORTB=tampil_7(jam_puluhan);
delay_ms(5);
}
}

void ubah()
{
PORTA=0b00000010;
PORTD=0b01110000;
PORTB=tampil_7(detik_satuan);
delay_ms(5);

PORTA=0b00000001;
PORTD=0b01110000;
PORTB=tampil_7(detik_puluhan);
delay_ms(5);

PORTA=0b00000000;
PORTD=0b01111000;
PORTB=tampil_7(menit_satuan);
delay_ms(5);

PORTA=0b00000000;
PORTD=0b01110100;
PORTB=tampil_7(menit_puluhan);
delay_ms(5);

PORTA=0b00000000;
PORTD=0b01110010;
PORTB=tampil_7(jam_satuan);
delay_ms(5);

PORTA=0b00000000;
PORTD=0b01110001;
PORTB=tampil_7(jam_puluhan);
delay_ms(5);
}

void con()
{
if(menit_satuan>9)
        {
        menit_satuan=0;
        menit_puluhan++;
         
            if(menit_puluhan>5 && menit_satuan == 0)
                {
                menit_puluhan=0;
                jam_satuan++;
                 
                    if(jam_satuan>9)
                        {
                        jam_satuan=0;
                        jam_puluhan++;    
                        }
                }
        }
     
        if(jam_puluhan == 2 && jam_satuan== 4)
        {
        jam_puluhan=0;
        jam_satuan = 0;
        }
}

Didalam simulasi yang saya buat, kita harus menyetel ulang waktu sesuai dengan waktu sekarang dengan menggunakan kombinasi tombol, Berikut video simulasinya.



Bagi teman - teman yang mau program fullnya bisa download dilink berikut Jam Digital 7 Segment.
Semoga bermanfaat..
Salam Kapasitor!!
Iklannya diklik ya gan hehehe
Matur nuwun..


27 comments:

  1. Replies
    1. boleh minta file hasil compilenya aja ?? prasetyoyoga571@gmail.com

      Delete
    2. Maaf sblmny mas, itu sm aj mas tinggal diganti headernya aja..

      Delete
    3. Maaf sblmny mas, itu sm aj mas tinggal diganti headernya aja..

      Delete
  2. nge set jam nya gmn ya ma?kok munculnya angka 8 semua sama dp kedip2 doang

    ReplyDelete
    Replies
    1. Klo ngesetnya ditekan aja push button nya sesuai dgn videonya, klo masalah kedip, cb dicek lg programnya sm rangkaiannya, mngkin ad yg selip..

      Delete
  3. Replies
    1. ini sy pake 11.059200 MHz, sblmny sy mnta maaf cz diatas blm sy sebutkan brp clock yg dipake..
      makasih byk

      Delete
  4. mas boleh saya minta skema nya? kalau memang berbayar tidak masalah , saya buat belajar , email saya dpw6692@gmail.com

    terima kasih

    ReplyDelete
  5. artikelnya bagus, terimakasih telah membagi ilmunya 👍

    ReplyDelete
  6. gan bleh minta rangkaiannya kah buat belajar gan, kirim k email bobilarombia@gmail.com

    ReplyDelete
  7. bagus banget artikelnya..
    ka boleh minta file nya ?
    kalau boleh kirim kesini ya yusan0895@gmail.com
    makasih..

    ReplyDelete
  8. bang ko error ya programnya ? errornya sampe 40 baris,kalo boleh minta file .hex nya gan kalo ada kirim ke audyervan29@gmail.com thanks gan

    ReplyDelete
  9. Mas wktu saya compile keluar warning pada int detik
    solusinya gmn mas

    ReplyDelete
  10. Soalnya saya coba rangkaian yg ada di yotub. 7segmen cuma muncul angka6

    ReplyDelete
  11. Soalnya saya coba rangkaian yg ada di yotub. 7segmen cuma muncul angka6

    ReplyDelete
  12. Soalnya saya coba rangkaian yg ada di yotub. 7segmen cuma muncul angka6

    ReplyDelete
  13. Soalnya saya udah coba tapi7segment nya cuma nyala angka 6

    ReplyDelete
  14. Soalnya saya udah coba tapi7segment nya cuma nyala angka 6

    ReplyDelete
  15. Soalnya saya udah coba tapi7segment nya cuma nyala angka 6

    ReplyDelete
  16. boleh minta kontknya mas?
    vianz.andra@gmail.com

    ReplyDelete
  17. pada saat build all di software cv avr ada notif warningnya pada bagian int detik; itu gimana mengatasinya

    ReplyDelete