Satura rādītājs:

Regulējams LED, izmantojot Basys 3 Board: 5 soļi
Regulējams LED, izmantojot Basys 3 Board: 5 soļi

Video: Regulējams LED, izmantojot Basys 3 Board: 5 soļi

Video: Regulējams LED, izmantojot Basys 3 Board: 5 soļi
Video: Электрика в квартире своими руками. Финал. Переделка хрущевки от А до Я. #11 2024, Jūlijs
Anonim
Regulējams LED, izmantojot Basys 3 dēli
Regulējams LED, izmantojot Basys 3 dēli

Šajā rokasgrāmatā mēs izveidosim un kontrolēsim ārēju LED aptumšošanas sistēmu. Izmantojot pieejamās pogas, lietotājs var aptumšot LED spuldzi līdz vajadzīgajam spilgtumam. Sistēma izmanto Basys 3 plāksni, un tā ir savienota ar maizes dēli, kurā ir rezistors un LED spuldze. Nospiežot norādīto pogu "uz augšu", palielinās spilgtums, un, nospiežot pogu "uz leju", spilgtums samazināsies līdz nullei. Tas ne tikai neļauj lietotājam apžilbināt ar spožām saules gaismas spuldzēm, bet arī ietaupa enerģiju!

1. darbība: izveidojiet ievades skaitītāju

Šim solim mēs izveidojam komponentu, kas nosaka spilgtuma līmeni (caur pulksteni), izmantojot divus slēdžus: vienu, lai palielinātu, un otru, lai samazinātu. Izmantojot VHDL, mēs izgatavojām skaitītāju, izmantojot D flip-flops. Nospiežot pogu "uz augšu", nākamais stāvoklis tiek pārvietots uz pašreizējo stāvokli, izvadot septiņu segmentu displeju un LED spuldzi.

entītijas atjaunināšanas_skaitītājs ir

Ports (pašreizējais_valsts: ārpus STD_LOGIC_VECTOR (3 līdz 0); iepriekšējais_valsts: STD_LOGIC_VECTOR (no 3 līdz 0); nākamais_valsts: STD_LOGIC_VECTOR (3 līdz 0); clk: STD_LOGIC; down_enable: STD_LOGIC; up_enable): STD_LOGIC end updown_counter; arhitektūra Updown_counter uzvedība sākas flop: process (next_state, clk, up_enable, down_enable, previous_state) sākas, ja (pieaug_mala (clk)), tad ja (up_enable = '1' un nevis (next_state = "0000")), tad present_state <= next_state; elsif (down_enable = '1' un nevis (previous_state = "1111")) tad present_state <= iepriekšējais_valsts; beigt, ja; beigt, ja; beigu procesa flops; beigas Uzvedība;

Mums ir nepieciešams arī pulkstenis katrai ieejai, kas tiek fiksēta (kad tā paceļas), tāpēc mēs arī izveidojām pulksteņa dalītāju, kas nosaka, cik ātri pogas var nospiest starp katru spilgtuma līmeni. Šis pulksteņa dalītājs ļauj mums pareizi parādīt pareizo līmeni septiņu segmentu displejā un radīt pareizo intensitātes līmeni katram līmenim.

entītija counter_clkDiv ir

Ports (clk: in std_logic; sclk: out std_logic); end counter_clkDiv; arhitektūra my_clk_div no counter_clkDiv ir nemainīga max_count: vesels skaitlis: = (10000000); signāls tmp_clk: std_logic: = '0'; sākt my_div: process (clk, tmp_clk) mainīgais div_cnt: vesels skaitlis: = 0; sākt, ja (pieaugošā mala (clk)), tad, ja (div_cnt> = MAX_COUNT), tad tmp_clk <= nav tmp_clk; div_cnt: = 0; cits div_cnt: = div_cnt + 1; beigt, ja; beigt, ja; sclk <= tmp_clk; beigt procesu my_div; beigas my_clk_div;

2. darbība: izveidojiet LED pulksteņa dalītāju

Šim solim mēs izveidojam LED spuldzes pulksteņa dalītāju, lai noteiktu 16 dažādus intensitātes līmeņus. Tā kā 0 ir izslēgts līdz 15, parādot maksimālo spilgtumu, pulksteņa dalītājs palielina katru pogas nospiešanu par to, ko mēs iestatām kā spilgtuma līmeni. Katrs pieaugošais līmenis nozīmēja LED spuldzes pulksteņa palielināšanos. Atceroties, ka spilgtums nepalielinās lineāri, mēs pagriezām pulksteni pēc iespējas augstāk un attiecīgi samazinājām pulksteņa rādītājus.

Piezīme: mēs izmantojam zilu LED. Izmantojot citu krāsu (piemēram, sarkanu), būs nepieciešami nedaudz atšķirīgi pulksteņi; vidēja spilgtuma iestatījums zilajam jau varētu būt maksimālais spilgtums sarkanajam. Tas notiek tāpēc, ka dažādiem gaismas viļņu garumiem būs vajadzīgs atšķirīgs enerģijas daudzums, un vēsākām krāsām, piemēram, purpursarkanai un zilai, būs vajadzīgs vairāk enerģijas, savukārt siltākām krāsām, piemēram, sarkanai un oranžai, nepieciešams mazāk enerģijas.

entītija led_clkDiv ir osta (pašreizējā_valsts: STD_LOGIC_VECTOR (3 līdz 0); clk: STD_LOGIC; led_clk: out STD_LOGIC); beigas led_clkDiv; arhitektūra LED_clkDiv uzvedība ir signāls tmp_clk: std_logic: = '0'; koplietojamais mainīgais maks. kad "0001" => max_count: = 2; kad "0010" => max_count: = 4; kad "0011" => max_count: = 6; kad "0100" => max_count: = 8; kad "0101" => max_count: = 10; kad "0110" => max_count: = 12; kad "0111" => max_count: = 14; kad "1000" => max_count: = 16; kad "1001" => max_count: = 25; kad "1010" => max_count: = 50; kad "1011" => max_count: = 100; kad "1100" => max_count: = 150; kad "1101" => max_count: = 200; kad "1110" => max_count: = 250; kad "1111" => max_count: = 300; beigu korpuss; beigu process count_stuff; my_div: process (clk, tmp_clk, present_state) mainīgais div_cnt: vesels skaitlis: = 0; sākt, ja (pieaugošā mala (clk)), tad, ja (div_cnt> = max_count), tad tmp_clk <= nav tmp_clk; div_cnt: = 0; cits div_cnt: = div_cnt + 1; beigt, ja; beigt, ja; led_clk <= tmp_clk; beigt procesu my_div; beigas Uzvedība;

3. darbība: LED kontroliera izveide

Tagad, kad esam tik tālu tikuši, ir pienācis laiks beidzot apvienot visas līdz šim izveidotās sastāvdaļas LED kontroliera failā.

Rezumējot, izmantotie komponenti ir šādi:

  • Ievades skaitītājs (updown_counter)
  • Pulksteņu dalītājs (counter_clkDiv)
  • LED pulksteņu dalītājs (led_clkDiv)
  • Septiņu segmentu displeja draiveris (sseg_dec) (pievienots fails)

Septiņu segmentu displeja draiveris faktiski iepriekš netika apspriests, jo mēs faktiski aizņēmāmies VHDL failu no Dr Bryan Mealy, pateicoties tā ilgajam un sarežģītajam kodam. Tas būtībā dara mūsu pogu ievadi septiņu segmentu displejā uz Basys 3 tāfeles, lai mēs zinātu, kāds ir spilgtuma līmenis.

Virzoties uz priekšu, LED kontrolieris izmanto flip flops, lai palielinātu vai samazinātu skaitu, kas vienlaikus kontrolē gan septiņu segmentu displeju, gan LED spuldzes spilgtuma līmeni.

entītijas skaitītājs ir ports (clk: STD_LOGIC; up_enable: STD_LOGIC; down_enable: STD_LOGIC; SEGMENTS: out STD_LOGIC_VECTOR (7 līdz 0); DISP_EN: out STD_LOGIC_VECTOR (3 līdz 0); led_clk: out STD_LOGIC); gala skaitītājs; arhitektūra Skaitītāja uzvedība ir komponenta atjaunināšana_skaitītājs ir ports (pašreizējais_stāvoklis: ārpus STD_LOGIC_VECTOR (3 līdz 0); iepriekšējais_stāvoklis: sadaļā STD_LOGIC_VECTOR (3 līdz 0); next_state: in STD_LOGIC_VECTOR (3 līdz 0)); clk: in STD_LOGIC; in ST_LOGIC; up_enable: STD_LOGIC); beigu komponents updown_counter; komponents counter_clkDiv ir ports (clk: in std_logic; sclk: out std_logic); beigu komponents counter_clkDiv; komponents sseg_dec ir ports (ALU_VAL: std_logic_vector (7 līdz 0); SIGN: in std_logic; VALID: in std_logic; CLK: in std_logic; DISP_EN: out std_logic_vector (3 downto 0); SEGMENTS: out 0 std_); gala komponents sseg_dec; komponents led_clkDiv ir osta (pašreizējais_valsts: STD_LOGIC_VECTOR (3 līdz 0); clk: STD_LOGIC; led_clk: out STD_LOGIC); beigu komponents led_clkDiv; signāls pašreizējais_valsts: STD_LOGIC_VECTOR (3 līdz 0): = "0000"; signāls next_state: STD_LOGIC_VECTOR (3 līdz 0): = "0000"; signāls iepriekšējais_valsts: STD_LOGIC_VECTOR (3 līdz 0): = "0000"; signāls Alu_Val: STD_LOGIC_VECTOR (7 līdz 0); signāla sclk: STD_LOGIC; sākt Alu_Val (7 līdz 4) <= "0000"; Alu_Val (3 līdz 0) <= pašreizējais_valsts; nākamā_valsts (0) <= nav (pašreizējā_valsts (0)); nākamais_valsts (1) <= pašreizējais_valsts (0) x vai pašreizējais_valsts (1); nākamais_valsts (2) <= (pašreizējais_valsts (0) un pašreizējais_valsts (1)) x vai pašreizējais_valsts (2); nākamais_valsts (3) <= (pašreizējais_valsts (0) un pašreizējais_valsts (1) un pašreizējais_valsts (2)) vai pašreizējais_valsts (3); iepriekšējais_valsts (0) <= nav (pašreizējais_valsts (0)); iepriekšējais_valsts (1) <= pašreizējais_valsts (0) xnor pašreizējais_valsts (1); iepriekšējais_valsts (2) <= (pašreizējais_valsts (0) vai pašreizējais_valsts (1)) x vai pašreizējais_valsts (2); iepriekšējais_valsts (3) sclk, next_state => next_state, previous_state => iepriekšējais_valsts, up_enable => up_enable, down_enable => down_enable, present_state => present_state); displejs: sseg_dec porta karte (ALU_VAL => Alu_Val, SIGN => '0', VALID => '1', CLK => clk, DISP_EN => DISP_EN, SEGMENTS => SEGMENTS); led_div: led_clkDiv ostas karte (clk => clk, present_state => present_state, led_clk => led_clk); clk_div: counter_clkDiv ostas karte (clk => clk, sclk => sclk); beigas Uzvedība;

4. solis: ierobežojumu noteikšana un montāža

Ierobežojumi

Lai pareizi uzstādītu un ieprogrammētu Basys 3 tāfelīti, mums vispirms ir jāiestata ierobežojumu fails, kas pievienots šai darbībai. Ir pielāgoti šādi iestatījumi:

Pogas

  • T18 mainīts uz “up_enable” (palielināt spilgtumu)
  • U17 mainīts uz “down_enable” (samazināt spilgtumu)

7 segmentu displejs

  • W7, W6, U8, V8, U5, V5, U7, V7 attēlo katru viena displeja segmentu
  • U2, U4, V4, W4 apzīmē katru parādīto anodu (tikai 2 ir aktīvi, jo mūsu lielākais skaitlis ir 15)

PMOD galvene JC

JC7 ir vieta, kur mēs savienojam vienu no LED spuldzes vadiem, bet otru vadu - pie ZEMES

Pēc šī iestatīšanas viss, kas jums jādara, ir ģenerēt savu bitu plūsmu (ar jebkuru programmatūru, ko izmantojat, piemēram, Vivado), ieprogrammēt savu dēli un uzplaukumu! Jūs esat ieguvis darba dēli.

Piezīme. Tapu kartēšanu var atrast Basys 3 datu lapā šeit.

Montāža

5. darbība: regulēšanas slēdža izmantošana

Ja viss iet labi, jums vajadzētu būt pilnībā funkcionējošai regulēšanas sistēmai. Rezumējot, nospiežot augšējo pogu, palielināsies spilgtums (līdz 15), un, nospiežot lejupvērsto pogu, spilgtums samazināsies (līdz 0). Ceru, ka viss izdosies jūsu tagad atvieglotajai redzei!

Ieteicams: