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..
kok gak bisa ya.
ReplyDeleteGa bisany gmn mas?
Deleteboleh minta file hasil compilenya aja ?? prasetyoyoga571@gmail.com
DeleteMaaf sblmny mas, itu sm aj mas tinggal diganti headernya aja..
DeleteMaaf sblmny mas, itu sm aj mas tinggal diganti headernya aja..
Deletenge set jam nya gmn ya ma?kok munculnya angka 8 semua sama dp kedip2 doang
ReplyDeleteKlo ngesetnya ditekan aja push button nya sesuai dgn videonya, klo masalah kedip, cb dicek lg programnya sm rangkaiannya, mngkin ad yg selip..
Deletemas, ini pakai clock berapa
ReplyDeleteini sy pake 11.059200 MHz, sblmny sy mnta maaf cz diatas blm sy sebutkan brp clock yg dipake..
Deletemakasih byk
mas boleh saya minta skema nya? kalau memang berbayar tidak masalah , saya buat belajar , email saya dpw6692@gmail.com
ReplyDeleteterima kasih
artikelnya bagus, terimakasih telah membagi ilmunya 👍
ReplyDeletegan bleh minta rangkaiannya kah buat belajar gan, kirim k email bobilarombia@gmail.com
ReplyDeletebagus banget artikelnya..
ReplyDeleteka boleh minta file nya ?
kalau boleh kirim kesini ya yusan0895@gmail.com
makasih..
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
ReplyDeleteThis comment has been removed by the author.
DeleteMas wktu saya compile keluar warning pada int detik
ReplyDeletesolusinya gmn mas
klo warning gpp mas, yg penting ga ada error..
DeleteMas minta gambar rangkaian yg ada di youtb
ReplyDeleteSoalnya saya coba rangkaian yg ada di yotub. 7segmen cuma muncul angka6
ReplyDeleteSoalnya saya coba rangkaian yg ada di yotub. 7segmen cuma muncul angka6
ReplyDeleteSoalnya saya coba rangkaian yg ada di yotub. 7segmen cuma muncul angka6
ReplyDeleteSoalnya saya udah coba tapi7segment nya cuma nyala angka 6
ReplyDeleteSoalnya saya udah coba tapi7segment nya cuma nyala angka 6
ReplyDeleteSoalnya saya udah coba tapi7segment nya cuma nyala angka 6
ReplyDeleteGa bisa di unduh
ReplyDeleteboleh minta kontknya mas?
ReplyDeletevianz.andra@gmail.com
pada saat build all di software cv avr ada notif warningnya pada bagian int detik; itu gimana mengatasinya
ReplyDelete