Orodha ya maudhui:

Dimmable LED Kutumia Basys 3 Bodi: 5 Hatua
Dimmable LED Kutumia Basys 3 Bodi: 5 Hatua

Video: Dimmable LED Kutumia Basys 3 Bodi: 5 Hatua

Video: Dimmable LED Kutumia Basys 3 Bodi: 5 Hatua
Video: Контрольная лампа переменного тока с диммером Arduino AC 2024, Desemba
Anonim
Dimmable LED Kutumia Basys 3 Bodi
Dimmable LED Kutumia Basys 3 Bodi

Katika mwongozo huu tutaunda na kudhibiti mfumo wa nje wa upunguzaji wa LED. Kwa vifungo vinavyopatikana, mtumiaji anaweza kupunguza balbu ya LED kwa mwangaza wowote unaotaka. Mfumo hutumia bodi ya Basys 3, na imeunganishwa na ubao wa mkate ambao una kontena na balbu ya LED. Kubonyeza kitufe cha "juu" kutaongeza mwangaza, na kubonyeza kitufe cha "chini" itapunguza mwangaza hadi sifuri. Sio tu kwamba inazuia mtumiaji kupofushwa na balbu za mwanga-kama-jua lakini pia huhifadhi nguvu!

Hatua ya 1: Unda Counter Input

Kwa hatua hii tunaunda sehemu ambayo huamua kiwango cha mwangaza (kupitia saa) kwa kutumia swichi mbili: moja kuongezeka na moja kupungua. Kutumia VHDL, tulitengeneza kaunta kupitia matumizi ya D flip-flops. Kubonyeza kitufe cha "juu" inasukuma hali inayofuata kwa hali ya sasa, ikitoa kwa onyesho la sehemu saba na balbu ya LED.

shirika updown_counter ni

Bandari mwisho kusasisha_kuhesabu; Tabia ya usanifu ya kusasisha_kibali inaanza kuzunguka: mchakato (next_state, clk, up_enable, down_enable, previous_state) kuanza ikiwa (rising_edge (clk)) basi ikiwa (up_enable = '1' na sio (next_state = "0000")) kisha present_state <= ijayo_jimbo; elsif (down_enable = '1' na sio (previous_state = "1111")) kisha present_state <= previous_state; mwisho ikiwa; mwisho ikiwa; mchakato wa mwisho; mwisho Tabia;

Tunahitaji pia saa kwa kila pembejeo kuwekewa (wakati inapoinuka), kwa hivyo pia tuliunda mgawanyiko wa saa ambayo huamua jinsi vifungo vinaweza kushonwa haraka kati ya kila ngazi ya mwangaza. Mgawanyiko wa saa hii inaruhusu sisi kuonyesha kiwango sawa kwenye onyesho la sehemu saba na tuzalishe kiwango sahihi cha kiwango kwa kila ngazi.

chombo counter_clkDiv ni

Bandari (clk: in std_logic; sclk: nje std_logic); mwisho counter_clkDiv; usanifu my_clk_div ya counter_clkDiv ni mara kwa mara max_count: integer: = (10000000); ishara tmp_clk: std_logic: = '0'; Anza my_div: mchakato (clk, tmp_clk) div_cnt: nambari kamili: = 0; Anza ikiwa (kupanda_dge (clk)) basi ikiwa (div_cnt> = MAX_COUNT) basi tmp_clk <= sio tmp_clk; div_cnt: = 0; mwingine div_cnt: = div_cnt + 1; mwisho ikiwa; mwisho ikiwa; sclk <= tmp_clk; mchakato wa mwisho my_div; maliza div_clk_div yangu;

Hatua ya 2: Unda Mgawanyiko wa Saa ya LED

Kwa hatua hii tunaunda msuluhishi wa saa kwa balbu ya LED kuamua viwango 16 tofauti vya nguvu. Pamoja na 0 kuwa mbali hadi 15 kuonyesha mwangaza upeo, msuluhishi wa saa huongeza kila kitufe cha waandishi wa habari na kile tunachoweka kuwa viwango vya mwangaza. Kila ngazi inayoongezeka ilimaanisha kuongezeka kwa saa kwa balbu ya LED. Kukumbuka kuwa mwangaza hauzidi sawasawa, tulikunja saa hadi juu kabisa na inaweza kupunguza saa zetu ipasavyo.

Kumbuka: tunatumia LED ya bluu. Kutumia rangi tofauti (kama nyekundu) itahitaji saa tofauti kidogo kabisa; mpangilio wa mwangaza wa wastani wa bluu inaweza kuwa mwangaza wa juu kwa nyekundu. Hii hufanyika kwa sababu urefu tofauti wa mwangaza utahitaji nguvu tofauti, na rangi baridi kama zambarau na hudhurungi inayohitaji nguvu zaidi, wakati rangi zenye joto kama nyekundu na machungwa zinahitaji nguvu kidogo.

chombo led_clkDiv ni Port (state_state: katika STD_LOGIC_VECTOR (3 downto 0); clk: katika STD_LOGIC; led_clk: nje STD_LOGIC); mwisho led_clkDiv; Tabia ya usanifu wa led_clkDiv ni ishara tmp_clk: std_logic: = '0'; shiriki variable max_count: integer; anza hesabu_stuff: mchakato (sasa_state) anza kesi sasa_state ni wakati "0000" => max_count: = 0; wakati "0001" => hesabu ya upeo: = 2; wakati "0010" => hesabu ya upeo: = 4; wakati "0011" => hesabu ya upeo: = 6; wakati "0100" => hesabu ya upeo: = 8; wakati "0101" => hesabu ya upeo: = 10; wakati "0110" => hesabu ya upeo: = 12; wakati "0111" => hesabu ya upeo: = 14; wakati "1000" => hesabu ya upeo: = 16; wakati "1001" => hesabu ya upeo: = 25; wakati "1010" => hesabu ya upeo: = 50; wakati "1011" => hesabu ya upeo: = 100; wakati "1100" => hesabu ya upeo: = 150; wakati "1101" => hesabu ya upeo: = 200; wakati "1110" => hesabu ya juu: = 250; wakati "1111" => hesabu ya upeo: = 300; kesi ya mwisho; mchakato wa mwisho hesabu_stuff; my_div: mchakato (clk, tmp_clk, present_state) variable div_cnt: integer: = 0; anza ikiwa (kupanda_dge (clk)) basi ikiwa (div_cnt> = max_count) kisha tmp_clk <= sio tmp_clk; div_cnt: = 0; mwingine div_cnt: = div_cnt + 1; mwisho ikiwa; mwisho ikiwa; led_clk <= tmp_clk; mchakato wa mwisho my_div; mwisho Tabia;

Hatua ya 3: Kuunda Kidhibiti cha LED

Sasa kwa kuwa tumeifanya hivi sasa, ni wakati wa hatimaye kuchanganya vifaa vyote ambavyo tumeunda hadi sasa kwenye faili ya Mdhibiti wa LED.

Kwa muhtasari, vifaa vilivyotumika ni vifuatavyo:

  • Kaunta ya kuingiza data (sasisho_ya kusasisha)
  • Mgawanyiko wa saa (counter_clkDiv)
  • Mgawanyiko wa saa ya LED (led_clkDiv)
  • Dereva wa sehemu saba (sseg_dec) (faili iliyoambatanishwa)

Dereva wa sehemu saba hakujadiliwa hapo awali kwa sababu kwa kweli tulikopa faili ya VHDL kutoka kwa Dr Bryan Mealy kwa sababu ya nambari yake ndefu na ngumu. Inachofanya kimsingi ni kuendesha pembejeo zetu za vifungo kwenye onyesho la sehemu saba kwenye bodi ya Basys 3 ili tujue ni kiwango gani cha mwangaza.

Kuendelea mbele, Kidhibiti cha LED hutumia vijikaratasi kuongeza au kupunguza hesabu inayodhibiti onyesho la sehemu saba na kiwango cha mwangaza wa balbu ya LED wakati huo huo.

kaunta ya chombo ni Port (clk: in STD_LOGIC; up_enable: in STD_LOGIC; down_enable: in STD_LOGIC; SEGMENTS: out STD_LOGIC_VECTOR (7 downto 0); DISP_EN: out STD_LOGIC_VECTOR (3 downto 0); led_clk: out STD_LOGIC); kaunta ya mwisho; Tabia ya usanifu wa kaunta ni sehemu ya kusasisha_kuhesabu ni Port (eneo la sasa: nje STD_LOGIC_VECTOR (3 downto 0); jimbo la zamani: katika STD_LOGIC_VECTOR (3 downto 0); next_state: in STD_LOGIC_VECTOR (3 downto 0); clk: katika STD_LOGIC; up_enable: in STD_LOGIC); sehemu ya mwisho kusasisha_kuhesabu; sehemu counter_clkDiv ni Port (clk: in std_logic; sclk: out std_logic); sehemu ya mwisho counter_clkDiv; sehemu sseg_dec ni Port (ALU_VAL: in std_logic_vector (7 downto 0); ISHARA: katika std_logic; VALID: in std_logic; CLK: in std_logic;; sehemu ya mwisho sseg_dec; sehemu led_clkDiv ni Port (state_state: katika STD_LOGIC_VECTOR (3 downto 0); clk: katika STD_LOGIC; led_clk: nje STD_LOGIC); sehemu ya mwisho led_clkDiv; ishara present_state: STD_LOGIC_VECTOR (3 chini ya 0): = "0000"; ishara next_state: STD_LOGIC_VECTOR (3 chini ya 0): = "0000"; ishara previous_state: STD_LOGIC_VECTOR (3 chini ya 0): = "0000"; ishara Alu_Val: STD_LOGIC_VECTOR (7 chini ya 0); sclk ya ishara: STD_LOGIC; anza Alu_Val (7 chini ya 4) <= "0000"; Alu_Val (3 chini ya 0) <= state_state; next_state (0) <= not (present_state (0)); jimbo la pili (1) next_state (2) <= (state_state (0) and present_state (1)) xor present_state (2); next_state (3) <= (state_state (0) and present_state (1) and present_state (2)) xor present_state (3); jimbo la zamani (0) <= sio (sasa_state (0)); jimbo la awali (1) <= jimbo la sasa (0) xnor hali ya sasa (1); jimbo_lilopita (2) uliopita_state (3) sclk, next_state => next_state, previous_state => state_state, up_enable => up_enable, down_enable => down_enable, present_state => state_state); onyesha: sseg_dec ramani ya bandari (ALU_VAL => Alu_Val, SIGN => '0', VALID => '1', CLK => clk, DISP_EN => DISP_EN, SEGMENTS => SEGMENTS); led_div: led_clkDiv ramani ya bandari (clk => clk, present_state => state_state, led_clk => led_clk); clk_div: counter_clkDiv ramani ya bandari (clk => clk, sclk => sclk); mwisho Tabia;

Hatua ya 4: Kuanzisha Vikwazo na Mkutano

Vikwazo

Ili kuanzisha vizuri na kupanga bodi ya Basys 3, lazima kwanza tuweke faili yetu ya vizuizi ambayo imeambatanishwa na hatua hii. Mipangilio ifuatayo imerekebishwa:

Vifungo

  • Ilibadilisha T18 kuwa "inayowezekana" (ongeza mwangaza)
  • U17 ilibadilishwa kuwa "chini_yawezeshwa" (punguza mwangaza)

Uonyesho wa sehemu 7

  • W7, W6, U8, V8, U5, V5, U7, V7 zinawakilisha kila sehemu ya onyesho moja
  • U2, U4, V4, W4 zinawakilisha kila anode iliyoonyeshwa (2 tu zinafanya kazi kwa sababu nambari yetu ya juu ni 15)

Kichwa cha PMOD JC

JC7 ni mahali ambapo tunaunganisha moja ya waya za balbu ya LED, na waya mwingine husababisha GROUND

Baada ya kuweka hii yote, unachotakiwa kufanya ni kutengeneza mkondo wako (na programu yoyote unayotumia yaani Vivado), panga bodi yako, na ujiongeze! Ulijipatia bodi ya kufanya kazi.

Kumbuka: Ramani ya pini inaweza kupatikana kwenye Jedwali la Basys 3 hapa.

Mkutano

Hatua ya 5: Kutumia Kubadilisha Dimmer yako

Ikiwa yote yanaenda vizuri, unapaswa kuwa na mfumo wa dimmer inayofanya kazi kikamilifu. Kwa muhtasari, kubonyeza kitufe cha juu kutaongeza mwangaza wako (hadi 15), na kubonyeza kitufe cha chini kitapunguza mwangaza wako (hadi 0). Natumahi yote yataenda sawa kwa macho yako yaliyopumzika sasa!

Ilipendekeza: