You are on page 1of 7

LAPORAN PROYEK SISTEM MIKROPROSESOR TRAFFIC LIGHT

Disusun oleh: Bryan Alexander (0822085) Agita Indraputri (0822087)

JURUSAN TEKNIK ELEKTRO FAKULTAS TEKNIK UNIVERSITAS KRISTEN MARANATHA BANDUNG 2011

TRAFFIC LIGHT Sekarang ini, banyak sekali kita jumpai lampu lalu lintas dilengkapi penghitung waktu mundur. Semakin hari, ternyata tanpa kita sadari kita bergantung pada fasilitas penghitung waktu ini. Sedikit menengok di belakang traffic light, ternyata cukup mudah membuat aplikasi ini. Kesempatan ini kami akan mencoba 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 :
o o o

Counter 1 dihubungkan dengan PORTA.6 dan PORTA.7 Counter 2 dihubungkan dengan PORTB.0 dan PORTB.1 Traffict light 1

Merah dihubungkan dengan PORTA.0 Kuning dihubungkan dengan PORTA. 1 Hijau dihubungkan dengan PORTA. 2

Traffift light 2

Merah dihubungkan dengan PORTA.3 Kuning dihubungkan dengan PORTA.4 Hijau dihubungkan dengan PORTA.5

Tampilan rangkaian :

Programnya : #include <mega32.h> #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 ; /*7segment merah pd counter1 padam*/ hijauCounter2=0 ; /*7segment hijau pd counter2 padam*/ a=9; b=0; while(b!=10) /*selama b tidak sama dengan 10*/ { delay_ms(100); b++; PORTC=segment(a) ; /*portC menampil segment sesuai dengan nilai a*/ hijauCounter1=1; /*7segment hijau pd counter1 hidup*/ merahCounter2=1; /*7segment merah pd counter2 hidup*/ a--; } }

/*sub program counter yang dieksekusi ketika lampu menyala merah */ void delay_merah(void) { hijauCounter1=0; /*7segment hijau pd counter1 padam*/ merahCounter2=0; /*7segment merah pd counter2 padam*/ a=9; b=0; while(b!=10) /*selama b tidak sama dengan 10*/ { delay_ms(100); b++; PORTC=segment(a); /*portC menampil segment sesuai dengan nilai a*/ merahCounter1=1; /*7segment merah pd counter1 hidup*/

hijauCounter2=1; /*7segment hijau pd counter2 hidup*/ a--; } }

void main(void) { PORTA=0x00; DDRA=0xFF; PORTB=0x00; DDRB=0xff; PORTC=0x00; DDRC=0xFF; 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*/ merah_lampu2=0; /*lampu merah pada traffict 2 padam*/ kuning_lampu1=1;/*lampu kuning pada traffict 1 hidup*/ kuning_lampu2=1; /*lampu kuning pada traffict 2 hidup*/ delay_ms(100); /*delay 100ms*/ kuning_lampu1=0; /*lampu kuning pada traffict 1 padam*/ kuning_lampu2=0; /*lampu kuning pada traffict 2 padam*/ merah_lampu1=1; /*lampu merah pada traffict 1 hidup*/ hijau_lampu2=1; /*lampu hijau pada traffict 2 hidup*/ delay_merah(); /*memanggil subprogram delay_hijau*/

kuning_lampu2=1; /*lampu kuning pada traffict 2 hidup*/ kuning_lampu1=1; /*lampu kuning pada traffict 1 hidup*/ hijau_lampu2=0; /*lampu hijau pada traffict 2 padam*/ merah_lampu1=0; /*lampu merah pada traffict 1 padam*/ delay_ms(100); /*delay 100ms*/ kuning_lampu2=0; /*lampu kuning pada traffict 2 padam*/ kuning_lampu1=0; /*lampu kuning pada traffict 1 padam*/ } }

Cara Kerja Program : Ketika lampu hijau pada traffict 1 dan lampu merah pada traffict 2 menyala, maka seven segment hijau pada counter 1 dan seven segment merah pada counter 2 akan menghitung mundur dari angka 9. Setelah itu lampu kuning pada traffict 1 dan traffict 2 akan menyala selama 100ms. Kemudian lampu merah pada traffict 1 dan lampu hijau pada traffict 2 menyala, maka seven segment merah pada counter 1 dan seven segment hijau pada counter 2 akan menghitung mundur dari angka 9 dan seterusnya.

You might also like