Sisukord:

Hämardatav LED Basys 3 -plaadi abil: 5 sammu
Hämardatav LED Basys 3 -plaadi abil: 5 sammu

Video: Hämardatav LED Basys 3 -plaadi abil: 5 sammu

Video: Hämardatav LED Basys 3 -plaadi abil: 5 sammu
Video: Контрольная лампа переменного тока с диммером Arduino AC 2024, Juuli
Anonim
Hämardatav LED, kasutades Basys 3 tahvlit
Hämardatav LED, kasutades Basys 3 tahvlit

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: