Anda di halaman 1dari 7

Nama : Chulqy Rasyid H

NIM : H1A015038
UAS Takehome Mikrokontroler dan Antarmuka
1. Membuat simulasi / skematik rangkaian Lift 4 Lantai di ISIS Proteus

Terdiri dari ATMega16, LED, LCD Display, Push Button dan Ground.

2. Membuat Source Code pada Code Vision AVR tentang lift 4 lantai dan Compile-kan
//RPOGRAM LIFT 4 LANTAI DENGAN PRIORITAS TUJUAN LANTAI YANG LEBIH DULU DITEKAN
TOMBOLNYA
//PADA INTERFACE LCD AKAN DITAMPILKAN PRIORITAS LANTAI TUJUAN DAN LANTAI SAAT INI
//PADA INTERFACE TOMBOL AKAN DITAMPILKAN TOMBOL YANG SUDAH DITEKAN
//APABILA TOMBOL DITEKAN 2 KALI MAKA AKAN MENGHAPUS PRIORITAS LANTAI PADA
TUJUAN

#include <mega16.h>
#include <stdlib.h>
#include <delay.h>
#include <io.h>
#include <stdio.h>
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>

#define TL1 PINB.0


#define TL2 PINB.1
#define TL3 PINB.2
#define TL4 PINB.3
#define Open PINB.4
#define Close PINB.5
#define L1 PORTA.0
#define L2 PORTA.1
#define L3 PORTA.2
#define L4 PORTA.3
#define Door PORTA.4

int lantai, tujuan, i;


int urutan[5];
int naik, turun;
int waktu, indeks = 0;
unsigned char lantai_[6], angka[6];

void lift(int urut)


{
urutan[indeks] = urut; //prioritas lantai
indeks++;
switch(urut)
{
case 1 :
L1 = 1;
break;
case 2 :
L2 = 1;
break;
case 3 :
L3 = 1;
break;
case 4 :
L4 = 1;
break;
};
waktu = 0; //reset timer
delay_ms(500); //menanggulangi bouncing
if(urutan[0]!=0)
tujuan = urutan[0]; //prioritas lantai tujuan adalah yang pertama ditekan
}

void ceklift(int urut)


{
switch(urut)
{
case 1 :
L1 = 0;
break;
case 2 :
L2 = 0;
break;
case 3 :
L3 = 0;
break;
case 4 :
L4 = 0;
break;
};
for(i = 0; i < 5; i++) //cek apakah lantai sudah ditekan
{
if(urutan[i] == urut)
{
urutan[i] = 0;
};
};
for(i = 0; i < 4; i++) //memajukan lantai yang belum dipilih
{
if(urutan[i] == 0)
{
urutan[i] = urutan[i+1];
urutan[i+1] = 0;
};
};
indeks--;
waktu = 0;
delay_ms(500);
if(urutan[0]!=0)
tujuan = urutan[0]; //prioritas lantai tujuan adalah yang pertama ditekan
}
void main(void)
{
DDRA = 0xff;
PORTA = 0x00;

DDRB = 0x00;
PORTB = 0xff;

lcd_init(16);

lantai = 1; tujuan = 1;
indeks = 0;

while(1)
{
//======TAMPILAN DAFTAR LANTAI TUJUAN DAN LANTAI SAAT INI======
lcd_gotoxy(2,1);
for(i = 0; i < 4; i++)
{
itoa(urutan[i], angka);
lcd_putsf(" "); lcd_puts(angka);
};
itoa(lantai, lantai_);
lcd_putsf(" L "); lcd_puts(lantai_);

//============================================================
lcd_gotoxy(2,0);
if(waktu >= 100)
{
if(lantai < tujuan)
{
lantai++;
naik = 1;
turun = 0;
};
if(lantai > tujuan)
{
lantai--;
naik = 1;
turun = 0;
};
if(lantai == tujuan)
{
lcd_putsf("LANTAI TUJUAN");
if(urutan[0] != 0)
{
ceklift(tujuan);
};
naik = 0;
turun = 0;
};
waktu = 0;
};
if(TL1 == 0 && L1 == 0)
{
lift(1);
}
else if(TL1 == 0 && L1 == 1)
{
ceklift(1);
};
if(TL2== 0 && L2 == 0)
{
lift(2);
}
else if(TL2 == 0 && L2 == 1)
{
ceklift(2);
};
if(TL3== 0 && L3 == 0)
{
lift(3);
}
else if(TL3 == 0 && L3 == 1)
{
ceklift(3);
};
if(TL4 == 0 && L4 == 0)
{
lift(4);
}
else if(TL4 == 0 && L4 == 1)
{
ceklift(4);
};

waktu++;
delay_ms(10);
};
}

3. Setelah di Compile, membuat file HEX dan COF dari Source Code Code Vision AVR, untuk
dijalankan pada simulasi Proteus di Mikrokontroler ATMega16.
4. Double click pada mikrokontroler ATMega16 yang ada pada jendela kerja skematik rangkaian lift
4 lantai di Proteus. Setelah itu memasukkan file TakeHome.cof pada Program File.

5. Untuk menjalankan simulasi pada ISIS Proteus, klik pada Menu Debug, kemudian pilih Run
Simulation.
Penjelasan Singkat
Pada sistem kontrol Lift 4 lantai menggunakan ATMEGA16 dan terdapat 4 tombol/push
button sebagai input per lantai yaitu lantai 1 (TL1), lantai 2(TL2), lantai 3 (TL3), lantai 4 (TL4). Selain
itu, terdapat 4 lampu berwarna hijau yang menunjukkan tombol (TL) mana yang dipilih. Ada LCD
sebagai user-interface dimana menunjukkan keberadaan pengguna lift di lantai berapa serta
menunjukkan urutan lantai yang dipilih untuk dituju. Selain itu ada tombol BUKA dan TUTUP yang
berfungsi untuk membuka dan menutup pintu lift.
Cara kerjanya adalah yaitu saat lift berada pada lantai 1 pada keadaan awal. Setelah ada
pengguna lift yang masuk, maka pengguna bisa menekan tombol TUTUP pada lift untuk menutup
pintu lift serta menekan tombol yang akan dituju. Lift lalu akan bergerak dari lantai keadaan
sebelumya ke lantai yang dituju. Apabila terdapat beberapa pengguna lift yang mempunya lantai
tujuan yang berbeda, maka mereka akan menekan tombol lantai yang dituju. Sistem lalu akan
menuju lantai sesuai urutan penekanan tombol lantai. Apabila para pengguna dimisalkan
menekan tombol lantai 4-2-3-1 maka lift akan bergerak dari lantai sebelumnya ke lantai 4 lalu dari
lantai 4 ke lantai 2, dari lantai 2 ke lantai 3, dan dari lantai 3 akan ke lantai 1 yang selanjutnya lift
akan stand by menunggu penekanan tombol lantai berikutnya oleh pengguna. Penggunaan sistem
kontrol ini akan berakhir apabila sistem dinon aktifkan

Anda mungkin juga menyukai