تبلیغات
باران الکترونیک - قسمت چهارم: راه اندازی ‏‎7-segment‏ و آشنایی با مباحث مالتی پلکس زمانی

الف) مبدل عدد هگزادسیمال به 7-segment

هدف:

هدف راه­اندازی یک 7-segment‏ ‏می­باشد که هر لحظه یک واحد زیاد می­شود.

مقدمه:

تصویر 7-segment در شکل 1 نشان داده شده است. 7-segment شامل هفت عدد LED خطی و یک LED نقطه­ای می­باشند.

 

فرض کنید به FPGA دو عدد 7-segment‏ ‏با توجه به شکل 2 متصل می­باشد. همان­طور که مشاهده می­شود پین‎های مشترک 7-segment‏ ‏ها به زمین متصل می­باشد (LEDها کاتد مشترک می­باشند). این بدان معناست که ‏LED‏ ها ‏active high‏ می­باشند و برای این که ‏LED‏ ها روشن شوند روی پین مربوطه باید ولتاژ "1" قرار گیرد.‏

1) جدول تبدیل کد هگز به 7-segment در جدول 1 نشان داده شده است. می­خواهیم با استفاده از دستور with-select یک برنامه VHDL بنویسید تا عدد هگز را به عدد قابل نمایش روی 7-segment تبدیل کند.

با استفاده از دستور with-select می­توان کد هگز را به آسانی به کد ‎7-segment‏ ‏تبدیل کرد. در واقع با استفاده از این کد یک جدول جست و جو یا(Lock up Tabale (LUT  می­سازیم.

 برنامه تبدیل کد هگز به 7-segment

library ieee;

use ieee.std_logic_1164.all;

entity hex_to_sseg is

   port(

      hex: in std_logic_vector(3 downto 0);

      dp: in std_logic;

      sseg: out std_logic_vector(7 downto 0)

   );

end hex_to_sseg;

 

architecture arch of hex_to_sseg is

begin

   with hex select

      sseg(6 downto 0) <=

         "1111110" when "0000",

         "0110000" when "0001",

         "1101101" when "0010",

         "1111001" when "0011",

         "0110011" when "0100",

         "1011011" when "0101",

         "1011111" when "0110",

         "1110000" when "0111",

         "1111111" when "1000",

         "1111011" when "1001",

         "1110111" when "1010", --a

         "0011111" when "1011", --b

         "1001110" when "1100", --c

         "0111101" when "1101", --d

         "1001111" when "1110", --e

         "1000111" when others; --f

   sseg(7) <= dp;

end arch;


ب) مدار مالتی پلکس زمانی برای 7-segment

فرض کنید 6 عدد 7-segment به FPGA متصل می­باشند. برای این که پین­های کمتری از FPGA‏ ‏ گرفته شود سیگنال­های متشرک 7-segment ها به طور مجزا به FPGA‏ ‏ وصل شده­اند اما هشت سیگنالی که به LEDهای 7-segmentها متصل هستند و باعث روشنایی آن­ها می­شوند، با یکدیگر مشترک می­باشند. برای این که عددی روی 7-segment مشخصی نمایش داده شود باید، فقط پین مشترک همان 7-segment زمین شود و بقیه 7-segmentها ولتاژ "1" قرار گیرد. بنابراین در این پیکربندی در هر لحظه فقط یک 7-segment می­تواند روشن باشد.


اگر با الگوی مشخصی همان طور که در شکل 4 نشان داده شده است، به ترتیب هر 7-segment را در یک لحظه روشن کنیم و نرخ روشن کردن 7-segment ها به اندازه کافی سریع باشد تا چشم انسان نتواند روشن و خاموش شدن 7-segmentها را تشخیص دهد، می­توان اعداد روی هر 6 عدد 7-segment را به طور همزمان مشاهده کرد. به این کار مالتی پلکس زمانی 7-segment گفته می­شود.

نمودار بلوکی مدار مالتی پلکس زمانی در شکل 5 نشان داده شده است. مدار مالتی پلکس زمانی کدهای هر 7-segment را می­گیرد و مطابق سیگنال فعال سازی آن کد را در خروجی خود قرار می­دهد.

 

نرخ به روز رسانی 7-segment ها باید به اندازه کافی سریع باشد تا چشم انسان نتواند روشن و خاموش شدن آن­ها را تشخیص بدهد و به اندازه کافی کند باشد تا LEDها به طور کامل روشن و خاموش شوند.

در این قسمت باید با توجه به نمودار بلوکی شکل 7 یک مدار مالتی پلکس زمانی برای 7-segment یک تا چهار طراحی کنیم. اگر نرخ به روز رسانی 7-segmentها 1000 هرتز باشد، 7-segmentها به درستی نمایش می­دهند. برای این منظور، در مداری که طراحی میکنید یک شمارنده 14 بیتی در نظر می­گیریم. دو بیت پر ارزش برای برای انتخاب 7-segment و تولید سیگنال فعال سازی آن دیکد می­شود.

در این برنامه، در 7-segment اول، عدد 1، در 7-segment دوم عدد 2 و ... نمایش داده شود.


شماتیک مدار در شکل زیر نشان داده شده است:

برنامه مالتی پلکس زمانی

--disp_mux.vhd

library ieee;

use ieee.std_logic_1164.all;

use ieee.numeric_std.all;

entity disp_mux is

   port(

          in3, in2, in1, in0: in std_logic_vector(7 downto 0);

      clk, reset: in std_logic;

      an: out std_logic_vector(3 downto 0);

      sseg: out std_logic_vector(7 downto 0)

   );

end disp_mux ;

 

architecture arch of disp_mux is

   -- refreshing rate around 800 Hz (50MHz/2^16)

   constant N: integer:=14;

   signal q_reg, q_next: unsigned(N-1 downto 0);

   signal sel: std_logic_vector(1 downto 0);

begin

   -- register

   process(clk,reset)

   begin

      if reset='1' then

         q_reg <= (others=>'0');

      elsif (clk'event and clk='1') then

         q_reg <= q_next;

      end if;

   end process;

 

   -- next-state logic for the counter

   q_next <= q_reg + 1;

 

   -- 2 MSBs of counter to control 4-to-1 multiplexing

   -- and to generate active-low enable signal

   sel <= std_logic_vector(q_reg(N-1 downto N-2));

   process(sel,in0,in1,in2,in3)

   begin

      case sel is

         when "00" =>

            an <= "1110";

            sseg <= in0;

         when "01" =>

            an <= "1101";

            sseg <= in1;

         when "10" =>

            an <= "1011";

            sseg <= in2;

         when others =>

            an <= "0111";

            sseg <= in3;

      end case;

   end process;

end arch;

دریافت فایل PDF


  • آخرین ویرایش:چهارشنبه 25 شهریور 1394
نظرات()   
   
حسین
سه شنبه 24 شهریور 1394 02:21 ب.ظ
سلام
مرسی از فایل هاتون
این فایل ها چرا باز نمیشن
من دانلود کردم ولی باز نمیشه
پاسخ امیرحسین رستمی : با تشکر از این که خبر دادید. لینک دانلود درست شد.
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر
آخرین پست ها