Sekarang ini, banyak sekali kita jumpai lampu lalu lintas dilengkapi penghitung waktu mundur. Semakin hari, ternyata tanpa kita sadarikita bergantung pada fasilitas penghitung waktu ini.
Sedikit menengok di belakang traffic light, ternyata cukup mudah membuat aplikasi ini. Kesempatan ini, kita akan belajar membuat simulasi traffic light menggunakan software simulasi proteus v7.1 dan codevisionAVR untuk membuat programnya menggunakan bahasa C. Di dalam proteus, sudah tersedia komponen untuk traffic light.
Simulasi menggunakan AVR ATMEGA 32, 4 buah seven segment , dan transistor BC 107. Rangkaian dibagi menjadi 5 bagian yaitu counter1, counter2, traffic light1, traffic light2, dan AVR. Hubungan antar bagian dengan AVR seperti berikut
- Counter 1 dihubungkan dengan PORTB.0 dan PORTB.1
- Counter 2 dihubungkan dengan PORTA.6 dan PORTA.7
- Traffict light 2
- Merah dihubungkan dengan PORTA.3
- Kuning dihubungkan dengan PORTA. 4
- Hijau dihubungkan dengan PORTA. 5
- Traffift light 1
- Merah dihubungkan dengan PORTA.0
- Kuning dihubungkan dengan PORTA.1
- Hijau dihubungkan dengan PORTA.2
OKs.. sekarang, kita masuk ke programnya. Silakan dibuka codevisionAVR nya,kemudian masukkan listing dibawah ini. Untuk cara menggunakan codevisionAVR, silakan baca disini
#include<mega32.h> /*menggunakan ATmega32*/
#include<delay.h>
#define merah_lampu1 PORTA.0
#define kuning_lampu1 PORTA.1
#define hijau_lampu1 PORTA.2
#define merah_lampu2 PORTA.3
#define kuning_lampu2 PORTA.4
#define hijau_lampu2 PORTA.5
#define hijauCounter1 PORTA.6
#define merahCounter1 PORTA.7
#define hijauCounter2 PORTB.0
#define merahCounter2 PORTB.1
unsigned char a,b;
unsigned char segment(unsigned char input){
switch (input){
case 1:{return 0x06;break;} /* 00000110 | tampilan karakter 1 pada 7segment*/
case 2:{return 0x5B;break;} /* 01011011 | tampilan karakter 2 pada 7segment*/
case 3:{return 0x4F;break;} /* 01001111 | tampilan karakter 3 pada 7segment*/
case 4:{return 0x66;break;} /* 01100110 | tampilan karakter 4 pada 7segment*/
case 5:{return 0x6D;break;} /* 01101101 | tampilan karakter 5 pada 7segment*/
case 6:{return 0x7D;break;} /* 01111101 | tampilan karakter 6 pada 7segment*/
case 7:{return 0x07;break;} /* 00000111 | tampilan karakter 7 pada 7segment*/
case 8:{return 0x7F;break;} /* 01111111 | tampilan karakter 8 pada 7segment*/
case 9:{return 0x6F;break;} /* 01101111 | tampilan karakter 9 pada 7segment*/
case 0:{return 0x3F;break;} /* 00111111 | tampilan karakter 0 pada 7segment*/
}
}
/*sub program counter yang dieksekusi ketika lampu menyala hijau */
void delay_hijau(void){
merahCounter1=0 ;
hijauCounter2=0 ;
a=9;
b=0;
while(b!=10){
delay_ms(1000);
b++;
PORTC=segment(a) ;
hijauCounter1=1;
merahCounter2=1;
a–;
}
a=9;
}
/*sub program counter yang dieksekusi ketika lampu menyala merah */
void delay_merah(void){
hijauCounter1=0;
merahCounter1=0;
a=9;
b=0;
while(b!=0){
delay_ms(1000);
b++;
PORTC=segment(a);
merahCounter1=1;
hijauCounter2=1;
a–;
}
}
void main (void){
PORTA=0x00;
DDRA=0xFF; /*port a sebagai output*/
PORTB=0x00;
DDRB=0x03; /*00000011 , PORTB.0 dan PORTB.1 sebagai output*/
PORTC=0x00;
DDRC=0xFF; /*port c sebagai output*/
PORTD=0x00;
DDRD=0xFF;
while (1) {
merah_lampu1=0;/*lampu merah pada traffict 1 padam*/
merah_lampu2=1;/*lampu merah pada traffict 2 hidup*/
hijau_lampu1=1;/*lampu hijau pada traffict 1 hidup*/
delay_hijau(); /*memanggil subprogram delay_hijau*/
hijau_lampu1=0;/*lampu hijau pada traffict 1 padam*/
kuning_lampu1=1;/*lampu kuning pada traffict 1 hidup*/
delay_ms(1500);
kuning_lampu1=0; /*lampu kuning pada traffict 1 padam*/
merah_lampu1=1; /*lampu merah pada traffict 1 hidup*/
merah_lampu2=0; /*lampu merah pada traffict 2 padam*/
hijau_lampu2=1; /*lampu hijau pada traffict 2 hidup*/
delay_merah(); /*memanggil subprogram delay_hijau*/
kuning_lampu2=1; /*lampu kuning pada traffict 2 hidup*/
hijau_lampu2=0; /*lampu hijau pada traffict 2 padam*/
delay_ms(1500);
kuning_lampu2=0; /*lampu kuning pada traffict 2 padam*/
merah_lampu1=1; /*lampu merah pada traffict 1 hidup*/
};
}
waduh… Sungguh berat dan membuat kepala saya pusing….
biasa wae bos… jangan merendah,,, situ lebih hebat,,,
tanks banget nh,menarik jg.dcoba ah..nar kalo da masalah tolong ks solusi y…heheheheee
ok. monggo… insya allah kita carikan solusinya. thx
menarik sekali..
Mas toldong ksh pencerahan,sy bingung penggunaan increment/decrement(++1 atau –1),misalnya aplikasinya buat bikin scoring board,.kalo bisa langsung aj coding(bahasaC) ky gmn hehe….dtunggu banget ya,.sukses sll y,maksh
saya pemula sekali untuk micro contrl saya bisa tapi pake bahasa asembler
tolong mas akbar dirakit hingga jadi nantik saya ganti sertakan software downloadernya dan cara menggunakan soft ware downloadernya list programnya untuk traner saya bahan ngajar di smk
trimakasih
zulkarnain
guru smkn 2 surabaya
jl.simo gunung kramat timur 54A/surabaya
08819534371
saya tertarik untuk bahan ngajaar sya tapi belum pernah pake bahs C
pak dibuat aja rangk jadi nantik saya ganti
mmm,,menarik sekali,,
apakah anda bisa memberi tahu saya cara membuat simulasi ini dengan menggunakan software NI multisim 11???
mohon bantuannya. .
maaf, jujur saya tidak terbiasa menggunakan multisim.
karena kelengkapan librarynya jauh dari proteus
Menarik… tapi bisa kasih link softwarenya tidak…. maklum newbi 🙂
itu rangkaianya yang di pakai apa aja ya gan? mohon pencerahan…thanks
rangkainnya ya itu.. kelihatan di gambarkan? hihi
Wah,, menarik,,, sekali,,,
mas,, tolong dong,, kasih pencerahannya dengan menggunakan bahasa assembley,,, (masih kasus yang sama spt diatas,,,)
hehe,,,, maaf bgt, saya belum menguasai assembly.. 😀
coba cari di http://www.avrfreaks.net disana bnyak sourcenya
Agan, apa ga ada langsung file downloadnya???kaya bentuk rar gitu??
kalau pakai atmega 16 bisa ndak..???
mas mau nanya untuk settingan atmega 32nya gimana ya