ዝርዝር ሁኔታ:

Basys 3 ቦርድ በመጠቀም ሊለዋወጥ የሚችል LED: 5 ደረጃዎች
Basys 3 ቦርድ በመጠቀም ሊለዋወጥ የሚችል LED: 5 ደረጃዎች

ቪዲዮ: Basys 3 ቦርድ በመጠቀም ሊለዋወጥ የሚችል LED: 5 ደረጃዎች

ቪዲዮ: Basys 3 ቦርድ በመጠቀም ሊለዋወጥ የሚችል LED: 5 ደረጃዎች
ቪዲዮ: Kia Niro 2022 REVIEW: 10 things you SHOULD know 2024, ሀምሌ
Anonim
Basys 3 ቦርድ በመጠቀም ሊለዋወጥ የሚችል LED
Basys 3 ቦርድ በመጠቀም ሊለዋወጥ የሚችል LED

በዚህ መመሪያ ውስጥ እኛ ውጫዊ የ LED የማደብዘዝ ስርዓትን እንገነባለን እና እንቆጣጠራለን። በሚገኙ አዝራሮች አማካኝነት ተጠቃሚው የ LED አምፖሉን ወደሚፈለገው ብሩህነት ማደብዘዝ ይችላል። ስርዓቱ የ Basys 3 ሰሌዳውን ይጠቀማል ፣ እና ተከላካይ እና የ LED አምፖሉን ከያዘው የዳቦ ሰሌዳ ጋር ተገናኝቷል። የተሰየመውን “ወደ ላይ” ቁልፍን መጫን ብሩህነትን ይጨምራል ፣ እና “ታች” ቁልፍን መጫን ብሩህነትን እስከ ዜሮ ድረስ ይቀንሳል። ይህ ተጠቃሚው እንደ ፀሃይ ብርሃን አምፖሎች እንዳይታወር ብቻ ሳይሆን ኃይልንም ይቆጥባል!

ደረጃ 1 የግቤት ቆጣሪን ይፍጠሩ

ለእዚህ ደረጃ ሁለት መቀያየሪያዎችን በመጠቀም አንድ የብሩህነት ደረጃን (በሰዓት በኩል) የሚወስን አካል እንፈጥራለን -አንድ ለመጨመር እና አንድ ለመቀነስ። ቪኤችዲኤልን በመጠቀም ፣ በዲ Flip-flops በመጠቀም ቆጣሪውን አዘጋጅተናል። የ “ላይ” ቁልፍን በመጫን ቀጣዩን ሁኔታ ወደ የአሁኑ ሁኔታ ይገፋፋል ፣ ወደ ሰባት ክፍል ማሳያ እና የ LED አምፖሉን ያወጣል።

አካል updown_counter ነው

ወደብ (የአሁኑ_ክልል: ከ STD_LOGIC_VECTOR (3 እስከ 0)) ፤ ቀዳሚ_ክልል ፦ በ STD_LOGIC_VECTOR (3 ታች እስከ 0) ፤ የሚቀጥለው -ግዛት በ STD_LOGIC_VECTOR (3 ወደ 0) updown_counter መጨረሻ; ሥነ -ሕንፃ የ updown_counter ባህርይ መውደቅ ይጀምራል -ሂደት (ቀጣይ_state ፣ clk ፣ up_enable ፣ down_enable ፣ previous_state) የሚጀምረው (የሚወጣበት_ክልል (clk)) ከሆነ (up_enable = '1' እና ካልሆነ (next_state = "0000"))) ከዚያም present_state <= ቀጣይ_ክልል; elsif (down_enable = '1' እና አይደለም (previous_state = "1111")) ከዚያም present_state <= previous_state; ከሆነ ያበቃል; ከሆነ ያበቃል; መጨረሻ ሂደት flop; የባህሪ መጨረሻ;

እንዲሁም እያንዳንዱ ግቤት እንዲጣበቅ (በሚነሳበት ጊዜ) ሰዓት ያስፈልገናል ፣ ስለሆነም በእያንዳንዱ የብሩህነት ደረጃ መካከል ቁልፎቹ ምን ያህል በፍጥነት እንደሚጫኑ የሚወስን የሰዓት ክፍፍል ፈጥረናል። ይህ የሰዓት መከፋፈያ በሰባቱ ክፍል ማሳያ ላይ ትክክለኛውን ደረጃ በትክክል ለማሳየት እና ለእያንዳንዱ ደረጃ ትክክለኛውን የጥንካሬ ደረጃ ለማምረት ያስችለናል።

አካል counter_clkDiv ነው

ወደብ (clk: በ std_logic ፣ sclk: out std_logic); መጨረሻ counter_clkDiv; የ counter_clkDiv ሥነ ሕንፃ my_clk_div የማያቋርጥ max_count: ኢንቲጀር = = (10000000); ምልክት tmp_clk: std_logic = '0'; my_div: ሂደት (clk ፣ tmp_clk) ተለዋዋጭ div_cnt: ኢንቲጀር = 0; ከሆነ (የሚነሳው_ገደል (clk)) ከዚያም (div_cnt> = MAX_COUNT) ከሆነ tmp_clk <= tmp_clk አይደለም ፤ div_cnt: = 0; ሌላ div_cnt: = div_cnt + 1; ከሆነ ያበቃል; ከሆነ ያበቃል; sclk <= tmp_clk; የማጠናቀቂያ ሂደት my_div; የእኔ_clk_div ጨርስ;

ደረጃ 2 የ LED ሰዓት መከፋፈያ ይፍጠሩ

ለዚህ ደረጃ 16 የተለያዩ የጥንካሬ ደረጃዎችን ለመወሰን ለ LED አምፖሉ የሰዓት ክፍፍል እንፈጥራለን። 0 ከፍተኛውን ብሩህነት በማሳየት ወደ 15 ሲጠጋ ፣ የሰዓት መከፋፈሉ እያንዳንዱን ቁልፍ በመጫን እኛ የብሩህነት ደረጃዎች ለመሆን ባደረግነው መሠረት ይጨምራል። እያንዳንዱ የመጨመር ደረጃ ማለት ለ LED አምፖሉ የሰዓት ጭማሪ ማለት ነው። ብሩህነት በመስመር ላይ እንደማይጨምር በማስታወስ ፣ ሰዓቱን ወደሚችለው ከፍ አድርገን በመያዝ ሰዓቶቻችንን በዚህ መሠረት ቀንሰናል።

ማሳሰቢያ: እኛ ሰማያዊ ኤልኢዲ እየተጠቀምን ነው። የተለየ ቀለም (እንደ ቀይ) መጠቀም ትንሽ ለየት ያሉ ሰዓቶችን ይጠይቃል። ለሰማያዊ የመካከለኛ ብሩህነት ቅንብር ቀድሞውኑ ለቀይ ከፍተኛ ብሩህነት ሊሆን ይችላል። ይህ የሚሆነው የተለያዩ የብርሃን ሞገዶች የተለያዩ የኃይል መጠን ስለሚፈልጉ ፣ እንደ ሐምራዊ እና ሰማያዊ ያሉ ቀዝቃዛ ቀለሞች የበለጠ ኃይል የሚሹ ሲሆኑ ፣ እንደ ቀይ እና ብርቱካናማ ያሉ ሞቅ ያሉ ቀለሞች ደግሞ ያነሰ ኃይል ይጠይቃሉ።

አካል led_clkDiv ወደብ (የአሁኑ_ክልል በ STD_LOGIC_VECTOR (3 ወደ 0) ፣ clk: በ STD_LOGIC ፣ led_clk: ከ STD_LOGIC ውጭ) ፤ መጨረሻ led_clkDiv; አርክቴክቸር የ led_clkDiv ባህሪ tmp_clk ነው: std_logic = '0'; የተጋራ ተለዋዋጭ max_count: ኢንቲጀር ፤ count_stuff: process (present_state) case case_state የሚጀምረው "0000" => max_count = 0; መቼ "0001" => max_count: = 2; መቼ "0010" => max_count: = 4; መቼ "0011" => max_count: = 6; መቼ "0100" => max_count: = 8; መቼ "0101" => max_count: = 10; መቼ "0110" => max_count: = 12; መቼ "0111" => max_count: = 14; መቼ "1000" => max_count: = 16; መቼ "1001" => max_count: = 25; መቼ "1010" => max_count: = 50; መቼ "1011" => max_count: = 100; መቼ "1100" => max_count: = 150; መቼ "1101" => max_count: = 200; መቼ "1110" => max_count: = 250; መቼ "1111" => max_count: = 300; የመጨረሻ ጉዳይ; የማጠናቀቂያ ሂደት ብዛት_ቁሶች; my_div: ሂደት (clk ፣ tmp_clk ፣ present_state) ተለዋዋጭ div_cnt: ኢንቲጀር = 0; ከሆነ (የሚነሳው_ገደል (clk)) ከዚያም (div_cnt> = max_count) ከሆነ tmp_clk <= tmp_clk አይደለም ፤ div_cnt: = 0; ሌላ div_cnt: = div_cnt + 1; ከሆነ ያበቃል; ከሆነ ያበቃል; led_clk <= tmp_clk; የማጠናቀቂያ ሂደት my_div; የባህሪ መጨረሻ;

ደረጃ 3 የ LED መቆጣጠሪያን መፍጠር

አሁን ይህን ያደረግነው ፣ እስከ አሁን የፈጠርናቸውን ሁሉንም ክፍሎች በ LED መቆጣጠሪያ ፋይል ውስጥ ማዋሃድ ጊዜው አሁን ነው።

ለማጠቃለል ፣ ያገለገሉ አካላት የሚከተሉት ናቸው።

  • የግቤት ቆጣሪ (updown_counter)
  • የሰዓት ከፋይ (counter_clkDiv)
  • የ LED ሰዓት መከፋፈያ (led_clkDiv)
  • ባለ ሰባት ክፍል ማሳያ ሾፌር (sseg_dec) (የተያያዘ ፋይል)

በሰባቱ ክፍል የማሳያ ሾፌሩ ቀደም ሲል አልተወያየም ነበር ምክንያቱም እኛ በረጅሙ እና በተወሳሰበ ኮድ ምክንያት የ VHDL ፋይልን ከዶክተር ብሪያን ሜሊ ተውሰናል። እሱ የሚያደርገው ነገር ምን ያህል የብሩህነት ደረጃ እንዳለን እንዲያውቁ የእኛን የአዝራር ግብዓቶች በ Basys 3 ሰሌዳ ላይ ወደ ሰባት-ክፍል ማሳያ መንዳት ነው።

ወደ ፊት በመሄድ ፣ የ LED መቆጣጠሪያው ሁለቱንም ሰባተኛ ክፍል ማሳያ እና የ LED አምፖሉን የብሩህነት ደረጃ የሚቆጣጠረውን ቆጠራ ለመጨመር ወይም ለመቀነስ ተንሸራታቾችን ይጠቀማል።

አካል ቆጣሪ ወደብ ነው (clk: በ STD_LOGIC ውስጥ ፣ ሊነሳ የሚችል ፦ በ STD_LOGIC ውስጥ ፣ ወደ ታች የሚቻል ፦ በ STD_LOGIC ውስጥ; ምልክቶች: ከ STD_LOGIC_VECTOR (7 እስከ 0); DISP_EN: ከ STD_LOGIC_VECTOR (3 እስከ 0); led_clG: ውጭ) ማብቂያ ቆጣሪ; የሕንፃ ሥነ -ምግባር የባህሪ ባህርይ አካል ማዘመን ነው_ኮውተር ወደብ ነው (የአሁኑ_ክልል -ውጭ STD_LOGIC_VECTOR (3 እስከ 0) ፣ ቀዳሚ_መንግሥት ፦ በ STD_LOGIC_VECTOR (3 ዳውን 0) ፤ የሚቀጥለው -ሁኔታ በ STD_LOGIC_VECTOR (3 ወደ 0) ፤ clk: STD_LOGIC ውስጥ; STD_LOGIC ውስጥ ሊነሳ የሚችል ፦ በ STD_LOGIC ውስጥ); የማጠናቀቂያ ክፍል updown_counter; ክፍል counter_clkDiv ወደብ ነው (clk: std_logic ውስጥ; sclk: out std_logic); የመጨረሻ ክፍል counter_clkDiv; ክፍል sseg_dec ወደብ ነው (ALU_VAL: በ std_logic_vector (7 downto 0) ፤ SIGN: in std_logic; VALID: std_logic ውስጥ ፦ CLK: std_logic ውስጥ ፤ DISP_EN: out std_logic_vector (3 downto 0); SEGMENTS: out std_logic ወደ ውጭ); መጨረሻ ክፍል sseg_dec; ክፍል led_clkDiv ወደብ ነው (የአሁኑ_ክልል በ STD_LOGIC_VECTOR (3 ታች 0) ፤ clk: በ STD_LOGIC ውስጥ; led_clk: ከ STD_LOGIC ውጭ); መጨረሻ ክፍል led_clkDiv; ምልክት present_state: STD_LOGIC_VECTOR (3 ወደ 0): = "0000"; ምልክት next_state STD_LOGIC_VECTOR (3 ወደ 0): = "0000"; ምልክት ቀዳሚ_ክልል: STD_LOGIC_VECTOR (3 ወደ 0): = "0000"; ምልክት Alu_Val: STD_LOGIC_VECTOR (7 ወደ 0); ምልክት sclk: STD_LOGIC; Alu_Val (7 ወደ 4) <= "0000" ይጀምሩ Alu_Val (3 downto 0) <= present_state; next_state (0) <= አይደለም (የአሁኑ_ክልል (0)); next_state (1) <= present_state (0) xor present_state (1); next_state (2) <= (present_state (0) እና present_state (1)) xor present_state (2); next_state (3) <= (present_state (0) እና present_state (1) and present_state (2)) xor present_state (3); previous_state (0) <= አይደለም (የአሁኑ_ክልል (0)); previous_state (1) <= present_state (0) xnor present_state (1); previous_state (2) <= (present_state (0) nor present_state (1)) xor present_state (2); previous_state (3) sclk ፣ next_state => next_state ፣ previous_state => previous_state ፣ up_enable => up_enable ፣ down_enable => down_enable ፣ present_state => present_state) ፤ ማሳያ: sseg_dec የወደብ ካርታ (ALU_VAL => Alu_Val ፣ SIGN => '0' ፣ VALID => '1' ፣ CLK => clk ፣ DISP_EN => DISP_EN ፣ SEGMENTS => SEGMENTS) ፤ led_div: led_clkDiv ወደብ ካርታ (clk => clk ፣ present_state => present_state ፣ led_clk => led_clk); clk_div: counter_clkDiv ወደብ ካርታ (clk => clk, sclk => sclk); የባህሪ መጨረሻ;

ደረጃ 4 - ገደቦችን እና ስብሰባን ማቋቋም

ገደቦች

የ Basys 3 ሰሌዳውን በትክክል ለማቀናጀት እና ለማዘጋጀት ፣ ከዚህ ደረጃ ጋር የተያያዘውን የእኛን የእገዳዎች ፋይል ማቀናበር አለብን። የሚከተሉት ቅንብሮች ተስተካክለዋል ፦

አዝራሮች

  • T18 ን ወደ “ሊነቃ የሚችል” (ብሩህነት ይጨምሩ) ተለውጧል
  • U17 ን ወደ “down_enable” (ብሩህነት መቀነስ) ተለውጧል

7 ክፍል ማሳያ

  • W7 ፣ W6 ፣ U8 ፣ V8 ፣ U5 ፣ V5 ፣ U7 ፣ V7 እያንዳንዱን የአንድ ማሳያ ክፍልን ይወክላል
  • U2 ፣ U4 ፣ V4 ፣ W4 የሚታየውን እያንዳንዱን አንቶይድ ይወክላል (የእኛ ከፍተኛ ቁጥር 15 ስለሆነ ንቁ የሆኑት 2 ብቻ ናቸው)

PMOD ራስጌ JC

JC7 የኤልዲ አምፖሉን አንዱን ሽቦ የምናገናኝበት ሲሆን ሁለተኛው ሽቦ ወደ GROUND ይመራል።

ይህንን ሁሉ ካዋቀሩ በኋላ ማድረግ ያለብዎት ቢት ዥረትዎን (በየትኛውም ቪቫዶ በሚጠቀሙት ሶፍትዌር) ፣ ሰሌዳዎን በፕሮግራም ማበልፀግ ነው! እርስዎ እራስዎ የሥራ ቦርድ አግኝተዋል።

ማሳሰቢያ -የፒን ካርታ እዚህ በ Basys 3 የውሂብ ሉህ ላይ ሊገኝ ይችላል።

ስብሰባ

ደረጃ 5 - የእርስዎን Dimmer መቀየሪያ በመጠቀም

ሁሉም ነገር ደህና ከሆነ ፣ ሙሉ በሙሉ የሚሰራ የደመና ስርዓት ሊኖርዎት ይገባል። ለማጠቃለል ፣ የላይኛውን ቁልፍ መጫን ብሩህነትዎን (እስከ 15 ድረስ) ይጨምራል ፣ እና የታችኛውን ቁልፍ መጫን ብሩህነትዎን (እስከ 0 ድረስ) ይቀንሳል። አሁን ዘና ባለ እይታዎ ላይ ሁሉም ነገር መልካም እንደሚሆን ተስፋ ያድርጉ!

የሚመከር: