Sisukord:
- Samm: looge sisendloendur
- Samm: looge LED -kellajagur
- 3. samm: LED -kontrolleri loomine
- 4. samm: piirangute kehtestamine ja kokkupanek
- Samm: kasutage hämarduslülitit
Video: Hämardatav LED Basys 3 -plaadi abil: 5 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:47
Selles juhendis ehitame ja juhime välist LED -hämardussüsteemi. Saadaolevate nuppude abil saab kasutaja LED -pirni soovitud heleduseni hämardada. Süsteem kasutab tahvlit Basys 3 ja see on ühendatud leivalauaga, mis sisaldab takistit ja LED -pirni. Määratud "üles" nupu vajutamine suurendab heledust ja "alla" nupu vajutamine vähendab heledust täielikult nullini. See mitte ainult ei takista kasutajal pimestamist eredate päikesekiirgusega pirnide poolt, vaid säästab ka energiat!
Samm: looge sisendloendur
Selle sammu jaoks loome komponendi, mis määrab heleduse taseme (kella kaudu), kasutades kahte lülitit: üks suurendamiseks ja teine vähendamiseks. Kasutades VHDL-i, valmistasime loenduri D-plätude abil. Nupu "üles" vajutamine viib järgmise oleku praegusesse olekusse, väljastades seitsme segmendi kuva ja LED -pirni.
üksus updown_counter on
Port (olev_seisund: väljas STD_LOGIC_VECTOR (3 kuni 0); eelmine_seis: STD_LOGIC_VECTOR (3 kuni 0); järgmine_seis: STD_LOGIC_VECTOR (3 kuni 0); clk: STD_LOGIC; down_enable: STD_LOGIC; up_enable): STD_LOGIC lõpp updown_counter; arhitektuur Updown_counter käitumine algab flop: protsess (järgmine_seisund, clk, üles_võimaldatav, allapoole lubatav, eelmine_seis) algab, kui (tõusev serv (clk)), siis kui (üles_võimalik = '1' ja mitte (järgmine_seisund = "0000")), siis olev_seis <= next_state; elsif (alla_võimalik = '1' ja mitte (eelmine_riik = "1111")) siis olev_riik <= eelmine_riik; lõpetada, kui; lõpetada, kui; lõpetada protsessi flop; lõpp Käitumine;
Samuti vajame kella iga sisendi kinnitamiseks (kui see tõuseb), seega lõime ka kellajaguri, mis määrab, kui kiiresti saab iga heledustaseme vahel nuppe vajutada. See kellajagur võimaldab meil õigesti kuvada õiget taset seitsme segmendi ekraanil ja toota igale tasemele õige intensiivsuse taseme.
olem counter_clkDiv on
Port (clk: std_logic; sclk: out std_logic); end counter_clkDiv; arhitektuur my_clk_div of counter_clkDiv on konstantne max_count: integer: = (10000000); signaal tmp_clk: std_logic: = '0'; start my_div: process (clk, tmp_clk) muutuja div_cnt: täisarv: = 0; alusta kui (tõusev serv (clk)), siis kui (div_cnt> = MAX_COUNT), siis tmp_clk <= mitte tmp_clk; div_cnt: = 0; muidu div_cnt: = div_cnt + 1; lõpetada, kui; lõpetada, kui; sclk <= tmp_clk; lõpeta protsess my_div; lõpp my_clk_div;
Samm: looge LED -kellajagur
Selle sammu jaoks loome LED -pirni jaoks kellajaguri, et määrata 16 erinevat intensiivsustaset. Kui 0 on välja lülitatud kuni 15, kuvatakse maksimaalne heledus, suurendab kellajagur iga nupuvajutuse võrra meie määratud heledustasemete võrra. Iga tõusutase tähendas LED -pirni kella suurendamist. Pidades meeles, et heledus ei suurene lineaarselt, keerasime kella nii kõrgele kui võimalik ja vähendasime vastavalt kella.
Märkus: kasutame sinist LED -i. Erineva värvi (näiteks punase) kasutamine nõuab pisut erinevaid kellasid; sinise keskmise heleduse säte võiks juba punase jaoks olla maksimaalne heledus. See juhtub seetõttu, et erinevad valguse lainepikkused vajavad erinevat kogust energiat, jahedamad värvid, nagu lilla ja sinine, nõuavad rohkem energiat, samas kui soojemad värvid, nagu punane ja oranž, vajavad vähem energiat.
olem led_clkDiv on sadam (olev_seis: STD_LOGIC_VECTORis (3 kuni 0); clk: STD_LOGIC -s; led_clk: väljas STD_LOGIC); lõpp led_clkDiv; arhitektuur LED_clkDiv käitumine on signaal tmp_clk: std_logic: = '0'; jagatud muutuja max_count: täisarv; begin count_stuff: process (present_state) algus case present_state is when "0000" => max_count: = 0; kui "0001" => max_count: = 2; kui "0010" => max_count: = 4; kui "0011" => max_count: = 6; kui "0100" => max_count: = 8; kui "0101" => max_count: = 10; kui "0110" => max_count: = 12; kui "0111" => max_count: = 14; kui "1000" => max_count: = 16; kui "1001" => max_count: = 25; kui "1010" => max_count: = 50; kui "1011" => max_count: = 100; kui "1100" => max_count: = 150; kui "1101" => max_count: = 200; kui "1110" => max_count: = 250; kui "1111" => max_count: = 300; lõppjuhtum; lõpu protsess count_stuff; my_div: process (clk, tmp_clk, present_state) muutuja div_cnt: täisarv: = 0; alusta kui (tõusev serv (clk)), siis kui (div_cnt> = max_count), siis tmp_clk <= mitte tmp_clk; div_cnt: = 0; muidu div_cnt: = div_cnt + 1; lõpetada, kui; lõpetada, kui; led_clk <= tmp_clk; lõpeta protsess my_div; lõpp Käitumine;
3. samm: LED -kontrolleri loomine
Nüüd, kui oleme nii kaugele jõudnud, on aeg lõpuks ühendada kõik seni loodud komponendid LED -kontrolleri faili.
Kokkuvõtteks võib öelda, et kasutatud komponendid on järgmised:
- Sisendloendur (updown_counter)
- Kellajagur (counter_clkDiv)
- LED kellajagur (led_clkDiv)
- Seitsme segmendi kuva draiver (sseg_dec) (manustatud fail)
Seitsme segmendi kuvaridraiverit tegelikult varem ei arutatud, sest tegelikult laenasime VHDL-faili dr Bryan Mealylt selle pika ja keerulise koodi tõttu. Põhimõtteliselt juhib see meie nuppude sisendid Basys 3 tahvli seitsme segmendi ekraanile, et me teaksime, milline heleduse tase on sisse lülitatud.
Edasi liikudes kasutab LED -kontroller plätusid, et suurendada või vähendada arvu, mis juhib üheaegselt nii seitsme segmendi ekraani kui ka LED -pirni heledustaset.
olemiloendur on port (clk: STD_LOGIC; up_enable: in STD_LOGIC; down_enable: STD_LOGIC; SEGMENTS: out STD_LOGIC_VECTOR (7 down to 0); DISP_EN: out STD_LOGIC_VECTOR (3 down to 0); led_clk: out STD_LOGIC); otsa loendur; arhitektuur Loenduri käitumine on komponent uuendatud_loendur on port (olev_seisund: väljas STD_LOGIC_VECTOR (3 kuni 0); eelmine_seis: STD_LOGIC_VECTOR -is (3 kuni 0); next_state: in STD_LOGIC_VECTOR (3 kuni 0); clk: in STD_LOGIC; in ST_LOGIC); up_enable: STD_LOGIC -is); lõppkomponent updown_counter; komponent counter_clkDiv on port (clk: in std_logic; sclk: out std_logic); lõppkomponent counter_clkDiv; komponent sseg_dec on port (ALU_VAL: in 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); SEGMENTSog out: std_); lõppkomponent sseg_dec; komponent led_clkDiv on port (olev_seis: STD_LOGIC_VECTORis (3 kuni 0); clk: STD_LOGIC -s; led_clk: väljas STD_LOGIC); lõppkomponent led_clkDiv; signaal olev_seis: STD_LOGIC_VECTOR (3 kuni 0): = "0000"; signaal next_state: STD_LOGIC_VECTOR (3 kuni 0): = "0000"; signaal eelmine riik: STD_LOGIC_VECTOR (3 kuni 0): = "0000"; signaal Alu_Val: STD_LOGIC_VECTOR (7 kuni 0); signaali sclk: STD_LOGIC; algus Alu_Val (7 kuni 4) <= "0000"; Alu_Val (3 kuni 0) <= praegune_riik; järgmine_riik (0) <= ei (praegune_riik (0)); järgmine_riik (1) <= olev_riik (0) x või olev_riik (1); järgmine_riik (2) <= (praegune_riik (0) ja olev_riik (1)) x või olev_riik (2); järgmine_riik (3) <= (praegune_riik (0) ja olev_riik (1) ja olev_riik (2)) x või olev_riik (3); eelmine_riik (0) <= ei (praegune_riik (0)); eelmine riik (1) <= praegune riik (0) x ega praegune riik (1); eelmine_riik (2) <= (praegune_riik (0) ega olev_riik (1)) x või olev_riik (2); eelmine_riik (3) sclk, järgmine_riik => järgmine_riik, eelmine_riik => eelmine_riik, üles_võimalik => üles_võimalik, allapoole_võimalik => allapoole lubatav, oleviku_seis => olev_seis); kuva: sseg_dec pordikaart (ALU_VAL => Alu_Val, SIGN => '0', VALID => '1', CLK => clk, DISP_EN => DISP_EN, SEGMENTS => SEGMENTS); led_div: led_clkDiv pordikaart (clk => clk, present_state => present_state, led_clk => led_clk); clk_div: counter_clkDiv pordikaart (clk => clk, sclk => sclk); lõpp Käitumine;
4. samm: piirangute kehtestamine ja kokkupanek
Piirangud
Tahvli Basys 3 nõuetekohaseks seadistamiseks ja programmeerimiseks peame esmalt seadistama oma piirangute faili, mis on lisatud sellele sammule. Järgmisi seadeid on kohandatud:
Nupud
- T18 muudeti "up_enable" (heleduse suurendamiseks)
- U17 muudeti asendiks "down_enable" (vähendage heledust)
7 segmendi ekraan
- W7, W6, U8, V8, U5, V5, U7, V7 tähistavad ühe ekraani iga segmenti
- U2, U4, V4, W4 tähistavad iga kuvatavat anoodi (ainult 2 on aktiivsed, kuna meie suurim arv on 15)
PMOD päis JC
JC7 on koht, kus me ühendame ühe LED -pirni juhtmest ja teine juhe viib maandusesse
Pärast selle seadistamist peate vaid looma oma bitivoo (mis tahes tarkvaraga, nt Vivadoga), programmeerima oma plaadi ja buumi! Teil on töölaud.
Märkus. Tihvtide kaardistamise leiate Basys 3 andmelehelt siit.
Kokkupanek
Samm: kasutage hämarduslülitit
Kui kõik läheb hästi, peaks teil olema täielikult toimiv hämardussüsteem. Kokkuvõtteks võib öelda, et ülemise nupu vajutamine suurendab heledust (kuni 15) ja allanupu vajutamine vähendab heledust (kuni 0). Loodan, et teie nüüd lõdvestunud nägemise jaoks läheb kõik hästi!
Soovitan:
LED hämardatav valguskast: 11 sammu
LED hämardatav valguskast: ehitage oma 18 W LED -valguskast talvise bluusi vastu võitlemiseks. See valguskast on PWM -i abil hajutatud ja hämardatav. Kui teil on lambitaimer, saate seda kasutada äratuskella alternatiivina
Hämardatav LED -paneel: 15 sammu (piltidega)
Hämardatav LED -paneel: Kui nägin LED -võistlust, pani mind mõtlema, kas kasutatud LED -ide valmistamine oleks midagi lõbusat. Ma ei ole tegelikult elektrik, nii et arvasin, et see oleks lõbus väljakutse. Olin juba mõnda aega otsinud töölambi hankimist, nii et
DIY hämardatav LED -üleujutusvalgus: 5 sammu (piltidega)
DIY hämardatav LED -üleujutusvalgus: üleujutustuled kipuvad mõnikord aja jooksul töötama, kuigi tänapäeval kasutavad nad LED -e. See võib olla tingitud paljudest põhjustest, nagu ülekuumenemine või LED -draiveri rike või tootmisprotsessi viga. Enamik meist viskab toote minema
Tehke oma hämardatav LED -töökoja valgustus!: 11 sammu (piltidega)
Tehke oma hämardatav LED -töökoja valgustus!: Selles juhendis näitan teile, kuidas teha oma töökoja jaoks oma äärmiselt tõhus LED -valgustus! Meil, tegijatel, pole töölaual kunagi piisavalt valgustust, seega peame ostma lambid. Kuid tegijatena ei osta me asju (ja saame räsitud …)
Hämardatav LED -massiiv: 4 sammu
Hämardatav LED-massiiv: selle projektiga saavutatakse kolm peamist eesmärki:- loe potentsiomeetrilt analoogväärtust;- kirjutage igale LED-le analoogväärtus;- muutke iga LED-i heledust potentsiomeetri sisendi põhjal. Vajalikud materjalid:- 5 LED-i- potentsiomeeter- (5) Resistentsus 220 oomi