Satura rādītājs:
- 1. darbība: izveidojiet ievades skaitītāju
- 2. darbība: izveidojiet LED pulksteņa dalītāju
- 3. darbība: LED kontroliera izveide
- 4. solis: ierobežojumu noteikšana un montāža
- 5. darbība: regulēšanas slēdža izmantošana
Video: Regulējams LED, izmantojot Basys 3 Board: 5 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:54
Š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:
Led kontrole, izmantojot lietotni Blynk, izmantojot Nodemcu, izmantojot internetu: 5 soļi
Led kontrole, izmantojot lietotni Blynk, izmantojot Nodemcu, izmantojot internetu: Sveiki, visi šodien, mēs jums parādīsim, kā jūs varat kontrolēt LED, izmantojot viedtālruni internetā
Regulējams sprieguma līdzstrāvas padeve, izmantojot sprieguma regulatoru LM317: 10 soļi
Regulējams sprieguma līdzstrāvas padeve, izmantojot LM317 sprieguma regulatoru: Šajā projektā esmu izstrādājis vienkāršu regulējama sprieguma līdzstrāvas barošanas avotu, izmantojot LM317 IC ar LM317 barošanas shēmas shēmu. Tā kā šai shēmai ir iebūvēts tilta taisngriezis, lai mēs varētu tieši savienot 220V/110V maiņstrāvas padevi pie ieejas
Regulējams barošanas avots, izmantojot lētas eBay detaļas: 8 soļi
Regulējams barošanas avots, izmantojot lētas EBay detaļas: Šajā rokasgrāmatā mēs izgatavojam lētu regulējamu barošanas avotu, lai palīdzētu mums darbināt mūsu arduino projektus, maksimālajai strāvas padeves jaudai saskaņā ar mūsu izmantoto detaļu ražotājiem vajadzētu būt aptuveni 60 W. Projekta cenai vajadzētu būt
Regulējams barošanas avots, izmantojot diodes: 5 soļi
Regulējams barošanas avots, izmantojot diodes: Hi draugs, šodien es izveidošu regulējamu barošanas ķēdi, izmantojot 1N4007 diodes. Šo shēmu ir ļoti viegli izgatavot, un tā ir ļoti lēta. Sāksim
Atskaņojiet dziesmas, izmantojot Arduino, izmantojot ADC līdz PWM, izmantojot Flyback transformatoru vai skaļruni: 4 soļi
Atskaņot dziesmas ar Arduino, izmantojot ADC, lai PWM Flyback transformatorā vai skaļrunī: Sveiki, puiši, šī ir mana cita pamācības otrā daļa (tas bija daudz grūti). Būtībā šajā projektā esmu izmantojis ADC un taimeri savā Arduino, lai pārvērst audio signālu par PWM signālu. Tas ir daudz vieglāk nekā mana iepriekšējā instrukcija