VHDL ile 7 segmet uygulması deneme çalışması. BASYS 3 üstündeki 4 dijitlik 7 segment'in hepsini kullanarak 4bit sayıcının 7segmette gösterme gerçeklemesi.
http://youtu.be/qUkjNuYoByw (http://youtu.be/qUkjNuYoByw)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity sayac1 is
Port ( clk : in STD_LOGIC;
led015 : out STD_LOGIC_VECTOR (15 downto 0));
end sayac1;
architecture Behavioral of sayac1 is
signal counter: std_logic_vector(3 downto 0):= "0000";
signal gecici: std_logic_vector(3 downto 0);
signal pulse : std_logic := '0';
signal count : integer range 0 to 99999999 := 0;
begin
process(clk)
begin
if clk= '1' and clk'event then
if count = 99999999 then
count <= 0;
counter <= counter + 1;
else
count <= count + 1;
end if;
end if;
end process;
gecici <= counter;
process (gecici)
begin
case gecici is
when "0000" => led015 <= "0000000000000001"; --0
when "0001" => led015 <= "0000000000000010"; --1
when "0010" => led015 <= "0000000000000100"; --2
when "0011" => led015 <= "0000000000001000"; --3
when "0100" => led015 <= "0000000000010000"; --4
when "0101" => led015 <= "0000000000100000"; --5
when "0110" => led015 <= "0000000001000000"; --6
when "0111" => led015 <= "0000000010000000"; --7
when "1000" => led015 <= "0000000100000000"; --8
when "1001" => led015 <= "0000001000000000"; --9
when "1010" => led015 <= "0000010000000000"; --10
when "1011" => led015 <= "0000100000000000"; --11
when "1100" => led015 <= "0001000000000000"; --12
when "1101" => led015 <= "0010000000000000"; --13
when "1110" => led015 <= "0100000000000000"; --14
when "1111" => led015 <= "1000000000000000"; --15
when others => led015 <= "0000000000000000"; --Hata
end case;
end process;
end Behavioral;
bir sonraki adım tarama yöntemiyle 0-9999 sayıcı
önce bu videoyu ekleyecektim unutmuşum. çekip ekledim.
SW ile seçilen 4bit değeri 7 segmentte gösteren gerçekleme
http://youtu.be/kC9gGnZeiOI (http://youtu.be/kC9gGnZeiOI)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity SWinBCDto7SEG is
Port ( sw : in STD_LOGIC_VECTOR (3 downto 0);
-- led4 : out STD_LOGIC_VECTOR (3 downto 0);
seg : out STD_LOGIC_VECTOR (6 downto 0));
end SWinBCDto7SEG;
architecture Behavioral of SWinBCDto7SEG is
begin
process (sw)
begin
case sw is
when "0000" => seg <= "0000001"; --0 a b c d e f g
when "0001" => seg <= "1001111"; --1
when "0010" => seg <= "0010010"; --2
when "0011" => seg <= "0000110"; --3
when "0100" => seg <= "1001100"; --4
when "0101" => seg <= "0100100"; --5
when "0110" => seg <= "0100000"; --6
when "0111" => seg <= "0001111"; --7
when "1000" => seg <= "0000000"; --8
when "1001" => seg <= "0001100"; --9
when "1010" => seg <= "0001000"; --A
when "1011" => seg <= "1100000"; --b
when "1100" => seg <= "0110001"; --C
when "1101" => seg <= "1000010"; --d
when "1110" => seg <= "0010000"; --e
when "1111" => seg <= "0111000"; --F
when others => seg <= "1001000"; --Hata
end case;
end process;
end Behavioral;
0-9999 sayıcı yapmak için multuplexer kullanmayı beceremedim. bunun matığını h.ç bilmeyen birine anlatır gibi bana anlatacak biri arkadaş varmıdır?
şimdiden teşekürler
Hocam yapmak istediğiniz şey sayacın her bir rakamını mı göstermek mi?
Evet Basys3 üzerindeki 4lü displayi kullanmak için. birçok örnek inceledim kafam karışıt. hepsi farklı teknik kullanmış.
Bir örnekte 200Hz clk ile tetiklenen iki bit sayıcı yapmış onu "case" kullanıp ortak uçların aktivasyonu için kullanmış. ama sayıların basamaklarıyla nasıl eşlediğini anlaymadım. Birbaşka örnekte karmaşık bir lojik kombinasyonu yapmış anlmadım.
Aslında yapmak istediğiniz linkteki kronometre uygulaması ile aynı. Yapmanız gereken 4 tane farklı sinyal değeri tutmanız. Kodda bunu port maplarla sağlamakta. pulse_generator ile sizin ilk display ekranınızın artış miktarı belirleniyor. Yani buradaki süre sonunda siz bir valid sinyali üretiyorsunuz. O sinyal ile birlikte artış yapıyorsunuz. Daha sonra bu display sinyalin in değeri 9'dan büyük olduğunda sıfırlama yapıyorsunuz. Ve yine bir valid sinyali üretiyorsunuz. Sonra diğer basamaktaki sinyali artırıyorsunuz. Bu şekilde tüm hepsini kontrol edebilirsiniz.
http://www.alicavuslu.gen.tr/2016/07/20/dijital-kronometre-uygulamasinin-nexys-4-karti-uzerinde-gerceklenmesi/ (http://www.alicavuslu.gen.tr/2016/07/20/dijital-kronometre-uygulamasinin-nexys-4-karti-uzerinde-gerceklenmesi/)