Talaan ng mga Nilalaman:
- Hakbang 1: Lumikha ng Input Counter
- Hakbang 2: Lumikha ng LED Clock Divider
- Hakbang 3: Lumilikha ng LED Controller
- Hakbang 4: Ang pagtaguyod ng mga hadlang at pagpupulong
- Hakbang 5: Paggamit ng Iyong Dimmer Switch
Video: Dimmable LED Gamit ang Basys 3 Board: 5 Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:12
Sa gabay na ito magtatayo at makokontrol namin ang isang panlabas na LED dimming system. Gamit ang mga magagamit na pindutan, maaaring madilim ng gumagamit ang LED bombilya sa anumang nais na ningning. Gumagamit ang system ng board na Basys 3, at ito ay konektado sa isang breadboard na naglalaman ng isang risistor at ang LED bombilya. Ang pagpindot sa itinalagang "pataas" na pindutan ay magpapataas ng ningning, at ang pagpindot sa "pababa" na pindutan ay magbabawas ng liwanag hanggang sa zero. Hindi lamang pinipigilan nito ang gumagamit na mabulag ng mga maliwanag na bombilya ngunit pinapanatili din nito ang enerhiya!
Hakbang 1: Lumikha ng Input Counter
Para sa hakbang na ito nilikha namin ang bahagi na tumutukoy sa antas ng ningning (sa pamamagitan ng isang orasan) sa pamamagitan ng paggamit ng dalawang switch: isa upang madagdagan at isa upang bawasan. Gamit ang VHDL, gumawa kami ng counter sa pamamagitan ng paggamit ng D flip-flops. Ang pagpindot sa pindutan na "pataas" ay itinutulak ang susunod na estado sa kasalukuyang estado, na lumalabas sa pitong segment na display at ang LED bombilya.
entity updown_counter ay
Port (present_state: out STD_LOGIC_VECTOR (3 downto 0); nakaraang_state: sa STD_LOGIC_VECTOR (3 pababa 0); susunod_state: sa STD_LOGIC_VECTOR (3 pababa sa 0); clk: sa STD_LOGIC; down_enable: sa STD_LOGIC; up_enIC); tapusin ang updown_counter; arkitektura Pag-uugali ng updown_counter ay nagsisimula flop: proseso (next_state, clk, up_enable, down_enable, nakaraang_state) magsimula kung (tumataas_edge (clk)) pagkatapos kung (up_enable = '1' at hindi (next_state = "0000")) pagkatapos present_state <= susunod_state; elsif (down_enable = '1' at hindi (nakaraang_state = "1111")) pagkatapos ay present_state <= nakaraang_state; tapusin kung; tapusin kung; tapusin ang proseso ng pag-flop; wakasan ang Pag-uugali;
Kailangan din namin ng isang orasan para sa bawat pag-input ay mai-latched (kapag tumaas ito), kaya lumikha din kami ng isang divider ng orasan na tumutukoy kung gaano kabilis ang pagpindot sa mga pindutan sa pagitan ng bawat antas ng ningning. Pinapayagan kaming magbahagi ng orasan na ito upang maipakita nang maayos ang tamang antas sa pitong segment na display at makagawa ng tamang antas ng intensidad para sa bawat antas.
entity counter_clkDiv ay
Port (clk: sa std_logic; sclk: out std_logic); tapusin ang counter_clkDiv; arkitektura my_clk_div ng counter_clkDiv ay pare-pareho ang max_count: integer: = (10000000); signal tmp_clk: std_logic: = '0'; simulan ang my_div: proseso (clk, tmp_clk) variable div_cnt: integer: = 0; simulan kung (tumataas_edge (clk)) pagkatapos kung (div_cnt> = MAX_COUNT) pagkatapos tmp_clk <= hindi tmp_clk; div_cnt: = 0; iba pa div_cnt: = div_cnt + 1; tapusin kung; tapusin kung; sclk <= tmp_clk; tapusin ang proseso my_div; tapusin ang aking_clk_div;
Hakbang 2: Lumikha ng LED Clock Divider
Para sa hakbang na ito lumikha kami ng isang oras na divider para sa LED bombilya upang matukoy ang 16 magkakaibang antas ng kasidhian. Sa 0 na hanggang sa 15 na nagpapakita ng maximum na ningning, ang paghati ng orasan ay nagdaragdag ng bawat pindutin ang pagpindot sa pamamagitan ng kung ano ang itinakda namin upang maging mga antas ng ningning. Ang bawat antas ng pagtaas ay nangangahulugang isang pagtaas ng orasan para sa LED bombilya. Naalala na ang ningning ay hindi tataas nang tuwid, nilagyan namin ang orasan sa pinakamataas na maaari nitong puntahan at nabawasan ang aming mga orasan nang naaayon.
Tandaan: gumagamit kami ng isang asul na LED. Ang paggamit ng ibang kulay (tulad ng pula) ay mangangailangan ng bahagyang iba't ibang mga orasan nang sama-sama; ang isang setting ng medium na ilaw para sa asul ay maaaring maging pinakamataas na ilaw para sa pula. Nangyayari ito dahil ang iba't ibang mga haba ng daluyong ng ilaw ay mangangailangan ng magkakaibang dami ng enerhiya, na may mga malamig na kulay tulad ng lila at asul na nangangailangan ng mas maraming enerhiya, habang ang mga mas maiinit na kulay tulad ng pula at kahel ay nangangailangan ng mas kaunting enerhiya.
entity led_clkDiv ay Port (present_state: sa STD_LOGIC_VECTOR (3 hanggang 0); clk: sa STD_LOGIC; led_clk: out STD_LOGIC); tapusin led_clkDiv; arkitektura Pag-uugali ng led_clkDiv ay signal tmp_clk: std_logic: = '0'; ibinahaging variable max_count: integer; simulan ang count_stuff: proseso (present_state) simulan ang case present_state ay kapag "0000" => max_count: = 0; kapag "0001" => max_count: = 2; kailan "0010" => max_count: = 4; kailan "0011" => max_count: = 6; kapag "0100" => max_count: = 8; kailan "0101" => max_count: = 10; kapag "0110" => max_count: = 12; kailan "0111" => max_count: = 14; kapag "1000" => max_count: = 16; kailan "1001" => max_count: = 25; kailan "1010" => max_count: = 50; kailan "1011" => max_count: = 100; kailan "1100" => max_count: = 150; kapag "1101" => max_count: = 200; kailan "1110" => max_count: = 250; kailan "1111" => max_count: = 300; kaso ng pagtatapos; tapusin ang bilang ng proseso_stuff; my_div: proseso (clk, tmp_clk, present_state) variable div_cnt: integer: = 0; simulan kung (tumataas_edge (clk)) pagkatapos kung (div_cnt> = max_count) pagkatapos tmp_clk <= hindi tmp_clk; div_cnt: = 0; iba pa div_cnt: = div_cnt + 1; tapusin kung; tapusin kung; led_clk <= tmp_clk; tapusin ang proseso my_div; wakasan ang Pag-uugali;
Hakbang 3: Lumilikha ng LED Controller
Ngayon na nagawa natin ito sa ngayon, oras na upang pagsamahin sa wakas ang lahat ng mga sangkap na nilikha namin sa ngayon sa file na LED Controller.
Upang ibuod, ang mga sangkap na ginamit ay ang mga sumusunod:
- Input counter (updown_counter)
- Cider divider (counter_clkDiv)
- LED clock divider (led_clkDiv)
- Seven-segment display driver (sseg_dec) (kalakip na file)
Ang pitong-segment na driver ng display ay hindi talaga napag-usapan dati sapagkat hiniram talaga namin ang file na VHDL mula kay Dr. Bryan Mealy dahil sa mahaba at kumplikadong code nito. Ang mahalagang ginagawa nito ay himukin ang aming mga pag-input ng pindutan sa pitong-segment na pagpapakita sa board ng Basys 3 upang malaman namin kung anong antas ng ningning.
Sumusulong, ang LED Controller ay gumagamit ng mga flip flop upang madagdagan o mabawasan ang bilang na kumokontrol sa parehong pitong segment na pagpapakita at sa antas ng ningning ng LED bombilya nang sabay-sabay.
ang entity counter ay Port (clk: sa STD_LOGIC; up_enable: sa STD_LOGIC; down_enable: sa STD_LOGIC; SEGMENTS: out STD_LOGIC_VECTOR (7 hanggang 0); DISP_EN: out STD_LOGIC_VECTOR (3 pababa sa 0); led_clk: out STD_LOGIC); pagtatapos ng counter; arkitektura Ang pag-uugali ng counter ay bahagi ng updown_counter ay Port (present_state: labas ng STD_LOGIC_VECTOR (3 pababa 0); nakaraang_state: sa STD_LOGIC_VECTOR (3 pababa sa 0); next_state: sa STD_LOGIC_VECTOR (3 pababa sa 0); clk: sa STD_LOGIC; down_enIC; up_enable: sa STD_LOGIC); tapusin ang bahagi ng pag-update ng_counter; ang bahagi ng counter_clkDiv ay Port (clk: sa std_logic; sclk: out std_logic); tapusin ang bahagi ng counter_clkDiv; sangkap sseg_dec ay Port (ALU_VAL: sa std_logic_vector (7 pababa 0); SIGN: sa std_logic; VALID: sa std_logic; CLK: sa std_logic; DISP_EN: out std_logic_vector (3 pababa 0); SEGMENTS: outcd_logic_; tapusin ang bahagi sseg_dec; Ang sangkap na led_clkDiv ay Port (present_state: sa STD_LOGIC_VECTOR (3 hanggang 0); clk: sa STD_LOGIC; led_clk: out STD_LOGIC); tapusin ang bahagi led_clkDiv; signal present_state: STD_LOGIC_VECTOR (3 pababa sa 0): = "0000"; signal next_state: STD_LOGIC_VECTOR (3 pababa sa 0): = "0000"; signal nakaraang_state: STD_LOGIC_VECTOR (3 pababa sa 0): = "0000"; signal Alu_Val: STD_LOGIC_VECTOR (7 pababa sa 0); signal sclk: STD_LOGIC; simulan ang Alu_Val (7 hanggang 4) <= "0000"; Alu_Val (3 pababa 0) <= kasalukuyan_state; next_state (0) <= not (present_state (0)); next_state (1) <= present_state (0) xor present_state (1); next_state (2) <= (present_state (0) at present_state (1)) xor present_state (2); next_state (3) <= (present_state (0) at present_state (1) at present_state (2)) xor present_state (3); nakaraang_state (0) <= hindi (present_state (0)); nakaraang_state (1) <= present_state (0) xnor present_state (1); nakaraang_state (2) <= (present_state (0) o present_state (1)) xor present_state (2); nakaraang_state (3) sclk, next_state => susunod_state, nakaraang_state => nakaraang_state, up_enable => up_enable, down_enable => down_enable, present_state => present_state); ipakita: sseg_dec port map (ALU_VAL => Alu_Val, SIGN => '0', VALID => '1', CLK => clk, DISP_EN => DISP_EN, SEGMENTS>> SEGMENTS); led_div: led_clkDiv port map (clk => clk, present_state => present_state, led_clk => led_clk); clk_div: counter_clkDiv port map (clk => clk, sclk => sclk); wakasan ang Pag-uugali;
Hakbang 4: Ang pagtaguyod ng mga hadlang at pagpupulong
Mga hadlang
Upang maayos na mai-setup at mai-program ang board ng Basys 3, dapat muna naming i-setup ang aming mga hadlang na file na naka-attach sa hakbang na ito. Ang mga sumusunod na setting ay nabago:
Mga Pindutan
- Pinalitan ang T18 sa "up_enable" (taasan ang ningning)
- Pinalitan ang U17 sa "down_enable" (bawasan ang ningning)
7 segment na pagpapakita
- Ang W7, W6, U8, V8, U5, V5, U7, V7 ay kumakatawan sa bawat segment ng isang display
- Ang U2, U4, V4, W4 ay kumakatawan sa bawat anode na ipinakita (2 lamang ang aktibo dahil ang pinakamataas na bilang namin ay 15)
PMOD Header JC
Ang JC7 ay kung saan ikinonekta namin ang isa sa mga wires ng LED bombilya, at ang iba pang kawad ay humahantong sa GROUND
Matapos i-set up ang lahat ng ito, ang kailangan mo lang gawin ay makabuo ng iyong bitstream (sa anumang software na ginagamit mo ie Vivado), i-program ang iyong board, at boom! Nakuha mo ang iyong sarili isang nagtatrabaho board.
Tandaan: Ang pagmamapa ng pin ay matatagpuan sa Basys 3 Datasheet dito.
Assembly
Hakbang 5: Paggamit ng Iyong Dimmer Switch
Kung maayos ang lahat, dapat ay mayroon kang isang ganap na gumagana na dimmer system. Upang buod, ang pagpindot sa tuktok na pindutan ay magpapataas ng iyong ningning (hanggang sa 15), at ang pagpindot sa down na pindutan ay magbabawas ng iyong ilaw (hanggang sa 0). Inaasahan kong maayos ang lahat para sa iyong nakakarelaks na paningin ngayon!
Inirerekumendang:
DIY -- Paano Gumawa ng isang Spider Robot Aling Maaaring Kontrolin Gamit ang Smartphone Gamit ang Arduino Uno: 6 Mga Hakbang
DIY || Paano Gumawa ng isang Spider Robot Aling Maaaring Kontrolin Gamit ang Smartphone Gamit ang Arduino Uno: Habang gumagawa ng isang Spider robot, maaaring malaman ng maraming mga bagay tungkol sa robot. Tulad ng paggawa ng Robots ay Nakakaaliw pati na rin ang mapaghamong. Sa video na ito ipapakita namin sa iyo kung paano gumawa ng isang Spider robot, na maaari naming mapatakbo gamit ang aming smartphone (Androi
Subukan ang Bare Arduino, Gamit ang Software ng Laro Gamit ang Capacitive Input at LED: 4 na Hakbang
Subukan ang Bare Arduino, Gamit ang Software ng Laro Gamit ang Capacitive Input at LED: " Push-It " Interactive na laro gamit ang isang hubad na Arduino board, walang mga panlabas na bahagi o mga kable na kinakailangan (gumagamit ng isang capacitive 'touch' input). Ipinapakita sa itaas, ipinapakita ang pagtakbo nito sa dalawang magkakaibang board. Push-Mayroon itong dalawang layunin. Upang mabilis na maipakita / v
Internet Clock: Ipakita ang Petsa at Oras Gamit ang isang OLED Gamit ang ESP8266 NodeMCU Sa NTP Protocol: 6 na Hakbang
Internet Clock: Display Date and Time With an OLED Gamit ang ESP8266 NodeMCU With NTP Protocol: Kumusta mga tao sa mga itinuturo na ito na magtatayo kami ng isang orasan sa internet na magkakaroon ng oras mula sa internet kaya't ang proyektong ito ay hindi mangangailangan ng anumang RTC upang tumakbo, kakailanganin lamang nito ang isang nagtatrabaho koneksyon sa internet At para sa proyektong ito kailangan mo ng isang esp8266 na magkakaroon ng
Hindi gumagana ang NODEMcu Usb Port? I-upload ang Code Gamit ang USB sa TTL (FTDI) Module sa 2 Hakbang lamang: 3 Hakbang
Hindi gumagana ang NODEMcu Usb Port? I-upload ang Code Gamit ang USB sa TTL (FTDI) Module sa Lamang 2 Mga Hakbang: Pagod na sa pagkonekta sa maraming mga wire mula sa USB hanggang TTL module sa NODEMcu, sundin ang itinuturo na ito, upang mai-upload ang code sa 2 hakbang lamang. Kung ang USB port ng Ang NODEMcu ay hindi gumagana, pagkatapos ay huwag panic. Ito lang ang USB driver chip o ang konektor ng USB,
Kontrolin ang Arduino Gamit ang Smartphone Sa pamamagitan ng USB Gamit ang Blynk App: 7 Mga Hakbang (na may Mga Larawan)
Kontrolin ang Arduino Gamit ang Smartphone Sa Pamamagitan ng USB Sa Blynk App: Sa tutorial na ito, matututunan namin kung paano gamitin ang Blynk app at Arduino upang makontrol ang lampara, ang kumbinasyon ay sa pamamagitan ng USB serial port. Ang layunin ng pagtuturo na ito ay upang ipakita ang pinakasimpleng solusyon sa malayo-pagkontrol ng iyong Arduino o c