Orodha ya maudhui:
- Hatua ya 1: Unda Counter Input
- Hatua ya 2: Unda Mgawanyiko wa Saa ya LED
- Hatua ya 3: Kuunda Kidhibiti cha LED
- Hatua ya 4: Kuanzisha Vikwazo na Mkutano
- Hatua ya 5: Kutumia Kubadilisha Dimmer yako
Video: Dimmable LED Kutumia Basys 3 Bodi: 5 Hatua
2024 Mwandishi: John Day | [email protected]. Mwisho uliobadilishwa: 2024-01-30 12:51
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:
Bodi ya MXY - Bodi ya Uchoraji wa chini ya Bajeti ya XY ya Bajeti: Hatua 8 (na Picha)
Bodi ya MXY - Bodi ya Robot ya Kuchora ya Bajeti ya chini ya Bajeti: Lengo langu lilikuwa kubuni bodi ya mXY kutengeneza bajeti ndogo mashine ya kuchora ya XY. Kwa hivyo nilibuni bodi ambayo inafanya iwe rahisi kwa wale ambao wanataka kufanya mradi huu. Katika mradi uliopita, wakati wa kutumia pcs 2 Nema17 stepper motors, bodi hii u
Bodi ya mkate ya Bodi ya Dev: Hatua 12 (na Picha)
Bodi ya Mkate wa Bodi ya Dev: Maagizo haya yanaonyesha jinsi ya kuunda ubao wa mikate uliotengenezwa maalum kwa bodi ya dev
Jinsi ya Kutumia Arduino WeMos D1 WiFi UNO ESP8266 IOT IDE Bodi Inayoendana kwa Kutumia Blynk: Hatua 10
Jinsi ya Kutumia Bodi ya Sambamba ya Arduino WeMos D1 WiFi UNO ESP8266 IOT IDE kwa Kutumia Blynk: Arduino WeMos D1 WiFi UNO ESP8266 IOT IDE Bodi Sambamba Ufafanuzi: WiFi ESP8266 Bodi ya Maendeleo WEMOS D1. WEMOS D1 ni bodi ya maendeleo ya WIFI kulingana na ESP8266 12E. Utendaji ni sawa na ile ya NODEMCU, isipokuwa kwamba vifaa ni boil
Jinsi ya Kupanga Bodi ya AVR Kutumia Bodi ya Arduino: Hatua 6
Jinsi ya Kupanga Bodi ya AVR Kutumia Bodi ya Arduino: Je! Una bodi ya kudhibiti microcontroller ya AVR iliyowekwa kote? Je! Ni ngumu kuipanga? Kweli, uko mahali pazuri. Hapa, nitakuonyesha jinsi ya kupanga bodi ndogo ya Atmega8a kwa kutumia bodi ya Arduino Uno kama programu. Kwa hivyo bila furth
Kutumia Quadcopter Kutumia Bodi ya Zybo Zynq-7000: Hatua 5
Quadcopter Kutumia Bodi ya Zybo Zynq-7000: Kabla hatujaanza, hapa kuna vitu kadhaa unavyotaka kwa mradi: Sehemu ya Orodha1x Digilent Zybo Zynq-7000 bodi ya 1x Quadcopter Frame inayoweza kupandisha Zybo (Faili ya Adobe Illustrator ya kushtaki kwa kushikamana) 4x Turnigy D3530 / 14 1100KV Brushless Motors 4x