Anda di halaman 1dari 8

DESAIN SISTEM DIGITAL

Disusun untuk memenuhi salah satu tugas dan syarat


kelulusan mata kuliah Desain Sistem Digital
Dosen Pengampu : Dr. Tuti Suartini, M.Pd

Disusun oleh :
Nafis Wildani Luwiyanto (1807323)

Program Studi S1 Teknik Elektro


Departemen Pendidikan Teknik Elektro
Fakultas Pendidikan Teknologi dan Kejuruan
Universitas Pendidikan Indonesia
1. Upload tugas yang telah dipresentasikan oleh kelompok 2?

2. Pertanyaan dan jawaban dari partisipan ?


Soal :
Berapa jarak maksimal pembacaan dari sensor RFID ?
Jawaban :
Jarak pembacaan sensor RFID untuk dapat dikenali oleh RFID Reader
memiliki beberapa macam. Pertama adalah posisi horizontal, pada posisi
horizontal jarak maksimal yang dapat terdeteksi adalah 7cm. Lalu yang kedua
adalah posisi vertikal, pada posisi vertikal jarak maksimal yang dapat
terdeteksi adalah 2cm. Kemudian yang terakhir apabila posisi miring baik
vertikal dan horizontal akan masih bisa mendekteksi pembacaannya dengan
jarak masing – masing 5cm dan 2cm.
3. Rancangan Program FPGA yang dapat dikembangkan pada elevator yang dirancang
kelompok 2?

//Nafis Wildani Luwiyanto


//1807323
//Kontrol lift 4 Lantai
//Tugas Kelompok 2 Desain Sistem Digital
library ieee;
use ieee.std_logic_1164.all;

entity lift is port (clk : in std_logic;   //masukkan tombol stop

manual_bukapintu : in std_logic; //masukkan buka pintu lift ketika berhenti

in1, in2, in3, in4: in std_logic; //masukkan untuk pilihan lantai berapa


       
in1naik, in2naik, in3naik, in4naik : in std_logic; //masukkan untuk posisi
naik

in1turun, in2turun, in3turun, in4turun : in std_logic; //masukkan untuk


posisi turun
       
a1, a2, a3, a4, a5, a6, a7: out std_logic; //untuk menunjukkan posisi lift
melalui seven segmen

motornaik, motorturun, tutuppintu: out std_logic; //untuk mekanik motor dan


pintu

bukapintu: out std_logic); 

architecture behavior of lift is constant timetutuppintu:


integer := 3;  //untuk tutup pintu otomatis
   
constant timepinturampungmenutup: integer :=2; //waktu pintu untuk rampung
menutup

constant time_nx_state: integer := 4;  //waktu yg dibutuhkan untuk naik


satu lantai
   
signal permohonan : std_logic_vector (0 to 4) :="00000";
signal arahlift : integer range 0 to 2 :=0;
signal signalmotornaik : std_logic :='0';
signal signalmotorturun : std_logic :='0';
signal signalnaikturunpengguna : std_logic:='0';
signal signalstatus : std_logic:='1';
   
type status is (lantai1, lantai2, lantai3, lantai4); //penentuan signal
dari masing-masing posisi lantai

signal pr_state, nx_state: status;


   
begin
utama: process (clk, manual_bukapintu, in1, in2, in3, in4, in1naik,
in2naik, in3naik, in4naik, in1turun, in2turun, in3turun, in4turun)

variable digit1 : std_logic_vector (6 downto 0);  //untuk Seven Segment


variable count: integer range 0 to (time_nx_state + timetutuppintu +
timepinturampungmenutup);
variable bufferbukapintu: std_logic;              
 
//Variable ini untuk Arah lift
 variable posisi : integer range 0 to 4;
 variable tempnaik, tempturun : integer range -4 to 4 :=0;       
 variable temp : integer range 1 to 2 :=1;

 begin
 if (clk'event and clk='1') then   
 permohonan (0)<= permohonan (0) or in1 or in1naik or in1turun;
permohonan (1)<= permohonan (1) or in2 or in2naik or in2turun;
 permohonan (2)<= permohonan (2) or in3 or in3naik or in3turun;
permohonan (3)<= permohonan (3) or in4 or in4naik or in4turun;
                   
//Begin Arah lift
case pr_state is
when lantai1 => posisi :=0;
when lantai2 => posisi :=1;
when lantai3 => posisi :=2;
when lantai4 => posisi :=3;
end case;
           
for i in 1 to 4 loop;  //i harus dalam range konstanta
if permohonan (i)= '1' then
tempnaik:=i-posisi;
else null;
end if;
end loop;  
     
for i in 3 downto 0 loop; //i harus dalam range konstanta
if permohonan (i)= '1' then
tempturun:=posisi-i;
else null;
end if;
end loop;
                   
if tempnaik=0 and tempturun=0 then // saat posisi lantai
sama dengan permohonan
               
arahlift<=0;
elsif temp=1 then
arahlift <= 1; //perintah naik
if tempnaik < 1 then
temp :=2 ;
else null;
end if;
elsif temp= 2 then     
arahlift <= 2; //perintah turun

if tempturun <1 then


temp:=1;
else null;
end if;
else null;
end if;
           
count:=count + 1;           
if (manual_bukapintu='1' and signalmotornaik = '0' and signalmotorturun =
'0') then  //untuk menahan pintu tetap terbuka saat lift berhenti

bukapintu<='1';
bufferbukapintu:='1';
tutuppintu <= '0';
count:=0;

elsif (signalnaikturunpengguna='1') then


if (count < timetutuppintu) then
motornaik<=signalmotornaik;
motorturun<=signalmotorturun;
bukapintu <= '1';
bufferbukapintu:='1';
tutuppintu <= '0';

elsif (count < (timetutuppintu + timepinturampungmenutup) ) then


bukapintu<='0';
bufferbukapintu:='0';
tutuppintu<='1';

else
tutuppintu <='0';
pr_state<=nx_state;
if signalstatus='1' then
signalstatus<='0';

else
signalstatus<='1';
end if;
count:=0;
end if;

else
if (count < timepinturampungmenutup)

if (bufferbukapintu = '1') then


bukapintu <= '0';
bufferbukapintu:='0';
tutuppintu <= '1';

else
count:=timepinturampungmenutup;
end if;

elsif (count < timepinturampungmenutup + time_nx_state) then


tutuppintu <= '0';
motornaik<=signalmotornaik;
motorturun<=signalmotorturun;

else
pr_state<=nx_state;
if signalstatus='1' then
signalstatus<='0';
 
else
signalstatus<='1';
end if;
count:=0;
end if;               
end if;   

when lantai1 =>


digit1 := "1111001";   

permohonan n(0)<='0';
else null;
end if;
when lantai2 =>
digit1 := "0100100";    
if permohonan (1)='1' then
                       
permohonan 1)<='0';
else null;
end if;
when lantai3 =>
digit1 := "0110000";       
if permohonan (2)='1' then
                       
permohonan (2)<='0';
else null;
end if;
when lantai4 =>
digit1 := "0011001";       
if permohonan (3)='1' then
                       
else null;
end if;
when others => null;
end case;
a1<=digit1(0);
a2<=digit1(1);
a3<=digit1(2);
a4<=digit1(3);
a5<=digit1(4);
a6<=digit1(5);
a7<=digit1(6);
           
end if;
end process utama;
step: process (pr_state, signalstatus)

begin
case pr_state is
when lantai1 =>               
if (permohonan (0)='1') then    
nx_state <= pr_state;
signalmotornaik <= '0';
signalmotorturun <= '0';
signalnaikturunpengguna<='1';

else
signalnaikturunpengguna<='0';
if arahlift=1 then //apabila 1 akan naik
nx_state<=lantai2;
signalmotornaik <= '1';
signalmotorturun <= '0';
else
nx_state<=pr_state;  //pada lantai 1 akan hanya diam atau naik
signalmotornaik <= '0';
signalmotorturun <= '0';
end if;

when lantai2 =>               


if (permohonan (1)='1') then
nx_state <= pr_state;
signalmotornaik <= '0';
signalmotorturun <= '0';
signalnaikturunpengguna<='1';

else
signalnaikturunpengguna<='0';
if arahlift=1 then  //apabila 1 akan naik
nx_state<=lantai3;
signalmotornaik <= '1';
signalmotorturun <= '0';
elsif arahlift=2 then //apabila 1 akan turun
nx_state<=lantai1;
signalmotornaik <= '0';
signalmotorturun <= '1';
                       
else
nx_state<=pr_state;
signalmotornaik <= '0';
signalmotorturun <= '0';
end if;

when lantai3 =>               


if (permohonan (2)='1') then //akan berhenti dan naik jika ada permohonan
nx_state <= pr_state;
signalmotornaik <= '0';
signalmotorturun <= '0';
signalnaikturunpengguna<='1';
                  
else
signalnaikturunpengguna<='0';
if arahlift=1 then //apabila 1 akan naik
nx_state<=lantai4;
signalmotornaik <= '1';
signalmotorturun <= '0';
                       
elsif arahlift=2 then //apabila 2 akan turun
nx_state<=lantai2;
signalmotornaik <= '0';
signalmotorturun <= '1';
                       
else
nx_state<=pr_state;
signalmotornaik <= '0';
signalmotorturun <= '0';
end if;
                   
when lantai4 =>               
if (permohonan (3)='1') then //akan berhenti dan naik jika ada permohonan 
nx_state <= pr_state;
signalmotornaik <= '0';
signalmotorturun <= '0';
signalnaikturunpengguna<='1';
                   
elsif arahlift=2 then //apabila 2 akan turun
nx_state<=lantai3;                       
signalmotornaik <= '0';
signalmotorturun <= '1';
                       
else
nx_state<=pr_state;
signalmotornaik <= '0';
signalmotorturun <= '0';
end if;
                   
end case;
end process step;
end behavior;

Anda mungkin juga menyukai