Jumat, 24 Desember 2010

Seven Segment Display (VHDL)

SEVEN SEGMENT DISPLAY merupakan penampil 8 digit seven segment yang mendukung 4 macam antarmuka (interface) yaitu 4 bit Parallel, Serial Peripheral Interface (SPI), Universal Asynchronous Receiver/Transmitter (UART) RS-232 atau UART RS-485 sehingga mempermudah pengguna untuk memilih antarmuka yang diinginkan. Contoh aplikasi dari SPC SEVEN SEGMENT adalah untuk display karakter, penampil counter, penampil jam, tanggal, dan lain-lain.


           Seven segmen display terdapat 7(tujuh) dioda berupa LED(Light Emitting Diode) membentuk sebuah karakter yang diinginkan dengan menyalanya LED sebagai penanda. Setiap led membutuhkan inputan High(1) dan Low(0), tergantung dari jenis seven segmentnya. Jika Seven segment bertipe common katoda, maka dibutuhkan sinyal High(1) untuk mengaktifkan setiap lednya. Sebaliknya, untuk yang bertipe common anoda, dibutuhkan input Low(0) untuk mengaktifkan setiap lednya.


          Cara menghubungkan pin pada seven segments ada 2 (dua) mode, yaitu Common Anode dan Common Katode. Common Anode adalah LED pada 7 segment semua pin anode-nya dihubungkan menjadi satu, sedangkan pin katoda dihubungkan ke port-port pada mikrokontroller. Common anode digunakan untuk rangkaian yang memerlukan aktif rendah (active low). Common katode adalah semua pin katoda pada 7 segments disatukan, sedangkan pin anoda dihubungkan ke port-port pada mikokontroller. Common katoda digunakan pada rangkaian yang memerlukan aktif tinggi (active high).

Berikut ini adalah program untuk BCD untuk decoder layar 7-segmen. Modul butuh 4 bit BCD sebagai input dan output 7 bit output decode untuk mengemudi unit.A tampilan display seven segment dapat digunakan untuk menampilkan digits.They desimal memiliki LED atau elemen LCD yang menjadi aktif ketika input angka zero.The menunjukkan bagaimana digit yang berbeda akan ditampilkan:


 


library IEEE;

use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity test is

port (
      clk : in std_logic;
        bcd : in std_logic_vector(3 downto 0);  --BCD input
        segment7 : out std_logic_vector(6 downto 0)  -- 7 bit decoded output.
    );
end test;
--'a' corresponds to MSB of segment7 and g corresponds to LSB of segment7.
architecture Behavioral of test is
 

begin
process (clk,bcd)
BEGIN
if (clk'event and clk='1') then
case  bcd is
when "0000"=> segment7 <="0000001";  -- '0'
when "0001"=> segment7 <="1001111";  -- '1'
when "0010"=> segment7 <="0010010";  -- '2'
when "0011"=> segment7 <="0000110";  -- '3'
when "0100"=> segment7 <="1001100";  -- '4'
when "0101"=> segment7 <="0100100";  -- '5'
when "0110"=> segment7 <="0100000";  -- '6'
when "0111"=> segment7 <="0001111";  -- '7'
when "1000"=> segment7 <="0000000";  -- '8'
when "1001"=> segment7 <="0000100";  -- '9'
 --nothing is displayed when a number more than 9 is given as input.
when others=> segment7 <="1111111";
end case;

end if;

end process;

end Behavioral;

Jika Anda ingin nomor desimal yang akan ditampilkan menggunakan kode ini maka mengubah kode yang berhubungan ke BCD dan kemudian instantiate modul ini untuk setiap digit kode BCD.

Berikut adalah contoh tes bangku kode untuk modul ini:
 

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;

ENTITY test_tb IS
END test_tb;

ARCHITECTURE behavior OF test_tb IS
   signal clk : std_logic := '0';
   signal bcd : std_logic_vector(3 downto 0) := (others => '0');
   signal segment7 : std_logic_vector(6 downto 0);
   constant clk_period : time := 1 ns;
BEGIN
   uut: entity work.test PORT MAP (clk,bcd,segment7);
   clk_process :process
   begin
                clk <= '0';
               wait for clk_period/2;
                clk <= '1';
                wait for clk_period/2;
   end process;    
   stim_proc: process
   begin              
     for i in 0 to 9 loop
           bcd <= conv_std_logic_vector(i,4);
          wait for 2 ns;
     end loop;
   end process;



END;

2 komentar: