Kazalo:

Zatemnilna LED z uporabo Basys 3 Board: 5 korakov
Zatemnilna LED z uporabo Basys 3 Board: 5 korakov

Video: Zatemnilna LED z uporabo Basys 3 Board: 5 korakov

Video: Zatemnilna LED z uporabo Basys 3 Board: 5 korakov
Video: Возведение перегородок санузла из блоков. Все этапы. #4 2024, November
Anonim
Zatemnilna LED z uporabo plošče Basys 3
Zatemnilna LED z uporabo plošče Basys 3

V tem priročniku bomo zgradili in upravljali zunanji sistem zatemnitve LED. Z razpoložljivimi gumbi lahko uporabnik zatemni LED žarnico na želeno svetlost. Sistem uporablja ploščo Basys 3 in je povezan s ploščo, ki vsebuje upor in LED žarnico. S pritiskom na določen gumb "navzgor" se svetlost poveča, s pritiskom na gumb "navzdol" pa se svetlost zmanjša do nič. To ne le preprečuje, da bi uporabnika zaslepile svetleče žarnice kot sonce, ampak tudi prihrani energijo!

1. korak: Ustvarite števec vnosov

Za ta korak ustvarimo komponento, ki določa stopnjo svetlosti (skozi uro) z dvema stikaloma: eno za povečanje in eno za zmanjšanje. Z uporabo VHDL smo števec izdelali z uporabo natikačev D. S pritiskom gumba "navzgor" se naslednje stanje premakne v trenutno stanje, ki se prikaže na sedemsegmentnem zaslonu in LED žarnici.

entiteta updown_counter je

Vrata (trenutno stanje: zunaj STD_LOGIC_VECTOR (3 navzdol 0); prejšnje stanje: v STD_LOGIC_VECTOR (3 navzdol 0); naslednje stanje: v STD_LOGIC_VECTOR (3 navzdol 0); end updown_counter; vedenje updown_counter je start flop: process (next_state, clk, up_enable, down_enable, previous_state) begin if (rise_edge (clk)) then if (up_enable = '1' in not (next_state = "0000")) then present_state <= next_state; elsif (down_enable = '1' in ne (previous_state = "1111")) potem present_state <= prejšnje_stanje; konec če; konec če; končni proces flop; konec vedenjskega;

Potrebujemo tudi uro za vsak vhod (ko se dvigne), zato smo ustvarili tudi delilnik ure, ki določa, kako hitro je mogoče pritisniti gumbe med vsako stopnjo svetlosti. Ta delilnik ure nam omogoča, da pravilno prikažemo pravo raven na sedemsegmentnem zaslonu in ustvarimo pravo stopnjo intenzivnosti za vsako stopnjo.

entiteta counter_clkDiv je

Vrata (clk: v std_logic; sclk: ven std_logic); konec števec_clkDiv; arhitektura my_clk_div of counter_clkDiv je konstantna max_count: integer: = (10000000); signal tmp_clk: std_logic: = '0'; začni my_div: spremenljivka process (clk, tmp_clk) div_cnt: integer: = 0; začni if (vzhajajoči rob (clk)) potem if (div_cnt> = MAX_COUNT) potem tmp_clk <= ni tmp_clk; div_cnt: = 0; else div_cnt: = div_cnt + 1; konec če; konec če; sclk <= tmp_clk; končaj proces my_div; konec my_clk_div;

2. korak: Ustvarite LED -razdelilnik ure

Za ta korak ustvarimo razdelilnik ure za LED žarnico, da določimo 16 različnih stopenj intenzivnosti. Pri izklopu 0 do 15, ki prikazuje največjo svetlost, delilnik ure poveča vsak pritisk gumba za tisto, kar nastavimo na ravni svetlosti. Vsaka višja raven je pomenila povečanje ure LED žarnice. Ker se spomnimo, da se svetlost ne povečuje linearno, smo uro zavili na najvišjo možno vrednost in ustrezno zmanjšali uro.

Opomba: uporabljamo modro LED. Uporaba drugačne barve (na primer rdeče) bo zahtevala nekoliko drugačne ure; srednja nastavitev svetlosti za modro je lahko že največja svetlost za rdečo. To se zgodi zato, ker različne svetlobne valovne dolžine zahtevajo različne količine energije, hladnejše barve, kot sta vijolična in modra, pa zahtevajo več energije, medtem ko toplejše barve, kot sta rdeča in oranžna, potrebujejo manj energije.

entiteta led_clkDiv je vrata (trenutno_stanje: v STD_LOGIC_VECTOR (3 navzdol 0); clk: v STD_LOGIC; led_clk: ven STD_LOGIC); end led_clkDiv; arhitektura Vedenje LED_clkDiv je signal tmp_clk: std_logic: = '0'; spremenljivka v skupni rabi max_count: integer; start count_stuff: process (present_state) začetek primera present_state je, ko je "0000" => max_count: = 0; ko "0001" => max_count: = 2; ko je "0010" => max_count: = 4; ko je "0011" => max_count: = 6; ko je "0100" => max_count: = 8; ko je "0101" => max_count: = 10; ko je "0110" => max_count: = 12; ko je "0111" => max_count: = 14; ko je "1000" => max_count: = 16; ko je "1001" => max_count: = 25; ko je "1010" => max_count: = 50; ko "1011" => max_count: = 100; ko je "1100" => max_count: = 150; ko je "1101" => max_count: = 200; ko je "1110" => max_count: = 250; ko je "1111" => max_count: = 300; zaključni primer; končaj procesa count_stuff; my_div: spremenljivka process (clk, tmp_clk, present_state) div_cnt: integer: = 0; začni if (vzhajajoči rob (clk)) potem if (div_cnt> = max_count) potem tmp_clk <= ni tmp_clk; div_cnt: = 0; else div_cnt: = div_cnt + 1; konec če; konec če; led_clk <= tmp_clk; končaj proces my_div; konec vedenjskega;

3. korak: Ustvarjanje LED krmilnika

Zdaj, ko smo prišli tako daleč, je čas, da vse datoteke, ki smo jih ustvarili, končno združimo v datoteko LED krmilnika.

Če povzamemo, so uporabljene naslednje komponente:

  • Vhodni števec (updown_counter)
  • Ločilnik ure (counter_clkDiv)
  • LED delilnik ure (led_clkDiv)
  • Gonilnik za sedem segmentov zaslona (sseg_dec) (priložena datoteka)

Govornika o sedmih segmentih zaslona prej nismo razpravljali, ker smo si datoteko VHDL dejansko izposodili od dr. Bryana Mealyja zaradi njene dolge in zapletene kode. V bistvu naredi vnose svojih gumbov na sedem-segmentni zaslon na plošči Basys 3, tako da vemo, na kateri ravni svetlosti je vključena.

Ko gremo naprej, LED krmilnik uporablja japonke za povečanje ali zmanjšanje števila, ki hkrati nadzoruje sedemsegmentni zaslon in raven svetlosti LED žarnice.

števec entitet je vrata (clk: v STD_LOGIC; up_enable: v STD_LOGIC; down_enable: v STD_LOGIC; SEGMENTS: out STD_LOGIC_VECTOR (7 navzdol 0); DISP_EN: out STD_LOGIC_VECTOR (3 downto 0); led_clIC: out; števec konca; arhitektura Vedenje števca je komponenta updown_counter je Port (present_state: out STD_LOGIC_VECTOR (3 downto 0); previous_state: in STD_LOGIC_VECTOR (3 downto 0); next_state: in STD_LOGIC_VECTOR (3 downto 0); up_enable: v STD_LOGIC); končna komponenta updown_counter; komponenta counter_clkDiv je vrata (clk: v std_logic; sclk: ven std_logic); končna komponenta counter_clkDiv; komponenta sseg_dec je vrata (ALU_VAL: v std_logic_vector (7 downto 0); SIGN: in std_logic; VALID: in std_logic; CLK: in std_logic; DISP_EN: out std_logic_vector (3 downto 0); SEGMENTS: out std_logic_ve; končna komponenta sseg_dec; komponenta led_clkDiv je vrata (trenutno_stanje: v STD_LOGIC_VECTOR (3 navzdol 0); clk: v STD_LOGIC; led_clk: ven STD_LOGIC); končna komponenta led_clkDiv; signal trenutno_stanje: STD_LOGIC_VECTOR (3 navzdol 0): = "0000"; signal next_state: STD_LOGIC_VECTOR (3 navzdol 0): = "0000"; signal previous_state: STD_LOGIC_VECTOR (3 navzdol 0): = "0000"; signal Alu_Val: STD_LOGIC_VECTOR (7 navzdol 0); sclk signala: STD_LOGIC; začni Alu_Val (7 downto 4) <= "0000"; Alu_Val (3 downto 0) <= trenutno_stanje; next_state (0) <= not (present_state (0)); next_state (1) <= present_state (0) xor present_state (1); next_state (2) <= (present_state (0) in present_state (1)) xor present_state (2); next_state (3) <= (present_state (0) in present_state (1) in present_state (2)) xor present_state (3); prejšnje_stanje (0) <= ni (sedanje_stanje (0)); prejšnje_stanje (1) <= sedanje_stanje (0) xnor sedanje_stanje (1); prejšnje_stanje (2) <= (sedanje_stanje (0) niti sedanje_stanje (1)) xor trenutno_stanje (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); prikaz: sseg_dec zemljevid vrat (ALU_VAL => Alu_Val, SIGN => '0', VALID => '1', CLK => clk, DISP_EN => DISP_EN, SEGMENTS => SEGMENTS); led_div: led_clkDiv zemljevid vrat (clk => clk, present_state => present_state, led_clk => led_clk); clk_div: counter_clkDiv zemljevid vrat (clk => clk, sclk => sclk); konec vedenjskega;

4. korak: Vzpostavitev omejitev in sestavljanje

Omejitve

Za pravilno nastavitev in programiranje plošče Basys 3 moramo najprej nastaviti datoteko omejitev, ki je priložena temu koraku. Prilagojene so bile naslednje nastavitve:

Gumbi

  • T18 spremenjen v "up_enable" (poveča svetlost)
  • U17 spremenjeno v "down_enable" (zmanjša svetlost)

7 -segmentni zaslon

  • W7, W6, U8, V8, U5, V5, U7, V7 predstavljajo vsak segment enega zaslona
  • U2, U4, V4, W4 predstavljajo vsako prikazano anodo (aktivni sta le 2, ker je naše največje število 15)

PMOD Glava JC

JC7 je mesto, kjer povežemo eno od žic LED žarnice, druga pa žico na OZEMLJE

Ko vse to nastavite, morate samo ustvariti svoj bitni tok (s katero koli programsko opremo, ki jo uporabljate, npr. Vivado), programirati svojo ploščo in se dvigniti! Delovni odbor si imaš.

Opomba: Preslikavo pin lahko najdete na podatkovnem listu Basys 3 tukaj.

Montaža

5. korak: Uporaba stikala za zatemnitev

Če je vse v redu, bi morali imeti popolnoma delujoč sistem zatemnitve. Če povzamemo, pritisk zgornjega gumba poveča svetlost (vse do 15), pritisk gumba navzdol pa zmanjša svetlost (vse do 0). Upam, da bo z vašim zdaj sproščenim vidom vse v redu!

Priporočena: