Obsah:

Stmievateľné LED pomocou základov 3 doska: 5 krokov
Stmievateľné LED pomocou základov 3 doska: 5 krokov

Video: Stmievateľné LED pomocou základov 3 doska: 5 krokov

Video: Stmievateľné LED pomocou základov 3 doska: 5 krokov
Video: Измерьте ток до 500A с помощью шунтирующего резистора с помощью Arduino 2024, Júl
Anonim
Stmievateľná LED dióda pomocou 3 dosiek Basys
Stmievateľná LED dióda pomocou 3 dosiek Basys

V tejto príručke sa chystáme vybudovať a ovládať externý systém stmievania LED. Pomocou dostupných tlačidiel môže používateľ stlmiť LED žiarovku na ľubovoľný požadovaný jas. Systém používa dosku Basys 3 a je pripojený k doske, ktorá obsahuje odpor a LED žiarovku. Stlačením určeného tlačidla „nahor“sa zvýši jas a stlačením tlačidla „nadol“sa jas zníži až na nulu. Nielenže to zabráni tomu, aby bol používateľ oslepený žiarovkami jasných ako slnko, ale tiež to šetrí energiu!

Krok 1: Vytvorte počítadlo vstupov

V tomto kroku vytvoríme komponent, ktorý určuje úroveň jasu (prostredníctvom hodín) pomocou dvoch prepínačov: jeden na zvýšenie a jeden na zníženie. Použitím VHDL sme vyrobili počítadlo pomocou D žabiek. Stlačením tlačidla „hore“sa nasledujúci stav prepne do súčasného stavu, pričom sa zobrazí výstup na sedemsegmentový displej a LED žiarovku.

aktualizácia_četnosti entity je

Port (súčasný_stav: mimo STD_LOGIC_VECTOR (3 nadol až 0); predchádzajúci_štát: v STD_LOGIC_VECTOR (3 až 0); nasledujúci_štát: v STD_LOGIC_VECTOR (3 až 0); clk: v STD_LOGIC; down_enable: v STD_LOGIC; up_enable: v STD_) ukončiť aktualizáciu_počítača; architektúra Správanie updown_counter je begin flop: process (next_state, clk, up_enable, down_enable, previous_state) begin if (rise_edge (clk)) then if (up_enable = '1' and not (next_state = "0000")) then present_state <= next_state; elsif (down_enable = '1' a not (previous_state = "1111")) then present_state <= previous_state; koniec Ak; koniec Ak; flop konca procesu; koniec Behaviorálne;

Potrebujeme tiež hodiny, na ktoré by sa mal zapnúť každý vstup (keď stúpa), takže sme tiež vytvorili rozdeľovač hodín, ktorý určuje, ako rýchlo je možné tlačidlá stlačiť medzi jednotlivými úrovňami jasu. Tento rozdeľovač hodín nám umožňuje správne zobraziť správnu úroveň na sedemsegmentovom displeji a vytvoriť správnu úroveň intenzity pre každú úroveň.

entita counter_clkDiv je

Port (clk: in std_logic; sclk: out std_logic); koniec counter_clkDiv; architektúra my_clk_div counter_clkDiv je konštantná max_count: integer: = (10000000); signál tmp_clk: std_logic: = '0'; začať my_div: process (clk, tmp_clk) premenná div_cnt: integer: = 0; begin if (rise_edge (clk)) then if (div_cnt> = MAX_COUNT) then tmp_clk <= not tmp_clk; div_cnt: = 0; else div_cnt: = div_cnt + 1; koniec Ak; koniec Ak; sclk <= tmp_clk; ukončiť proces my_div; koniec my_clk_div;

Krok 2: Vytvorte rozdeľovač LED hodín

V tomto kroku vytvoríme hodinový delič pre LED žiarovku na určenie 16 rôznych úrovní intenzity. Keď 0 zobrazuje hodnotu maximálneho jasu od 15 do 15, delič hodín zvyšuje každé stlačenie tlačidla o úroveň jasu, ktorú sme nastavili. Každá rastúca úroveň znamenala zvýšenie hodín pre LED žiarovku. Pamätajúc si, že jas sa lineárne nezvyšuje, natiahli sme hodiny na najvyššiu možnú hodnotu a podľa toho znížili hodiny.

Poznámka: používame modrú LED diódu. Použitie inej farby (napríklad červenej) bude vyžadovať celkom odlišné hodiny; nastavenie stredného jasu pre modrú už môže byť maximálnym jasom pre červenú. Stáva sa to preto, že rôzne vlnové dĺžky svetla budú vyžadovať rôzne množstvo energie, pričom chladnejšie farby ako fialová a modrá vyžadujú viac energie, zatiaľ čo teplejšie farby, ako je červená a oranžová, vyžadujú menej energie.

entita led_clkDiv je port (súčasný_stav: v STD_LOGIC_VECTOR (3 až 0); clk: v STD_LOGIC; led_clk: mimo STD_LOGIC); koniec led_clkDiv; architektúra Správanie led_clkDiv je signál tmp_clk: std_logic: = '0'; zdieľaná premenná max_count: integer; begin count_stuff: process (present_state) begin case present_state is when "0000" => max_count: = 0; keď "0001" => max_count: = 2; keď "0010" => max_count: = 4; keď "0011" => max_count: = 6; keď "0100" => max_count: = 8; keď "0101" => max_count: = 10; keď "0110" => max_count: = 12; keď "0111" => max_count: = 14; keď „1000“=> max_count: = 16; keď "1001" => max_count: = 25; keď "1010" => max_count: = 50; keď "1011" => max_count: = 100; keď "1100" => max_count: = 150; keď "1101" => max_count: = 200; keď "1110" => max_count: = 250; keď "1111" => max_count: = 300; koncový prípad; ukončiť proces count_stuff; my_div: process (clk, tmp_clk, present_state) premenná div_cnt: integer: = 0; begin if (rise_edge (clk)) then if (div_cnt> = max_count) then tmp_clk <= not tmp_clk; div_cnt: = 0; else div_cnt: = div_cnt + 1; koniec Ak; koniec Ak; led_clk <= tmp_clk; ukončiť proces my_div; koniec Behaviorálne;

Krok 3: Vytvorenie ovládača LED

Teraz, keď sme sa dostali až sem, je čas konečne skombinovať všetky komponenty, ktoré sme doteraz vytvorili, do súboru LED Controller.

Aby sme to zhrnuli, použité komponenty sú nasledujúce:

  • Počítadlo vstupu (aktualizačné_počítadlo)
  • Rozdeľovač hodín (counter_clkDiv)
  • LED rozdeľovač hodín (led_clkDiv)
  • Sedemsegmentový ovládač displeja (sseg_dec) (priložený súbor)

O sedemsegmentovom ovládači displeja sa v skutočnosti predtým nehovorilo, pretože sme si skutočne požičali súbor VHDL od doktora Bryana Mealyho kvôli jeho dlhému a komplikovanému kódu. V podstate to robí presmerovanie našich tlačidlových vstupov na sedemsegmentový displej na doske Basys 3, aby sme vedeli, akú úroveň jasu je zapnutá.

LED ovládač vpred používa pomocou žabiek na zvýšenie alebo zníženie počtu, ktoré súčasne ovládajú sedemsegmentový displej a úroveň jasu žiarovky LED.

počítadlo entít je port (clk: in STD_LOGIC; up_enable: in STD_LOGIC; down_enable: in STD_LOGIC; SEGMENTS: out STD_LOGIC_VECTOR (7 downto 0); DISP_EN: out STD_LOGIC_VECTOR (3 downto 0); led_clk: out STD_LOGIC); počítadlo konca; architektúra Správanie počítadla je komponent aktualizovaný_počítač je port (súčasný_stav: mimo STD_LOGIC_VECTOR (3 až 0); predchádzajúci_štát: v STD_LOGIC_VECTOR (3 až 0); nasledujúci_štát: v STD_LOGIC_VECTOR (3 až 0); clk: v STD_LOGIC; in_Lable: up_enable: v STD_LOGIC); koncový komponent updown_counter; komponent counter_clkDiv je port (clk: in std_logic; sclk: out std_logic); koncový komponent counter_clkDiv; komponent sseg_dec je port (ALU_VAL: v std_logic_vector (7 až 0); SIGN: v std_logic; PLATNÉ: v std_logic; CLK: v std_logic; DISP_EN: out std_logic_vector (3 až 0); SEGMENTY: mimo std_logic_vector; koncový komponent sseg_dec; komponent led_clkDiv je port (súčasný_stav: v STD_LOGIC_VECTOR (3 až 0); clk: v STD_LOGIC; led_clk: mimo STD_LOGIC); koncový komponent led_clkDiv; signál súčasný_stav: STD_LOGIC_VECTOR (3 až 0): = "0000"; signál next_state: STD_LOGIC_VECTOR (3 až 0): = "0000"; signál predchádzajúci_stav: STD_LOGIC_VECTOR (3 až 0): = "0000"; signál Alu_Val: STD_LOGIC_VECTOR (7 až 0); signál sclk: STD_LOGIC; začať Alu_Val (7 až 4) <= "0000"; Alu_Val (3 až 0) <= súčasný_stav; next_state (0) <= not (present_state (0)); next_state (1) <= present_state (0) xor present_state (1); next_state (2) <= (present_state (0) and present_state (1)) xor present_state (2); next_state (3) <= (present_state (0) and present_state (1) and present_state (2)) xor present_state (3); previous_state (0) <= not (present_state (0)); previous_state (1) <= present_state (0) xnor present_state (1); previous_state (2) <= (present_state (0) ani present_state (1)) xor present_state (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); zobrazenie: mapa portu sseg_dec (ALU_VAL => Alu_Val, SIGN => '0', VALID => '1', CLK => clk, DISP_EN => DISP_EN, SEGMENTS => SEGMENTS); led_div: led_clkDiv mapa portu (clk => clk, present_state => present_state, led_clk => led_clk); clk_div: mapa portu counter_clkDiv (clk => clk, sclk => sclk); koniec Behaviorálne;

Krok 4: Vytvorenie obmedzení a montáž

Obmedzenia

Aby sme správne nastavili a naprogramovali dosku Basys 3, musíme najskôr nastaviť súbor s obmedzeniami, ktorý je priložený k tomuto kroku. Nasledujúce nastavenia boli upravené:

Gombíky

  • T18 bolo zmenené na „up_enable“(zvýšiť jas)
  • Zmenené U17 na „down_enable“(zníženie jasu)

7 segmentový displej

  • W7, W6, U8, V8, U5, V5, U7, V7 predstavujú každý segment jedného displeja
  • U2, U4, V4, W4 predstavujú každú zobrazenú anódu (aktívne sú iba 2, pretože naše najvyššie číslo je 15)

Hlavička PMOD JC

JC7 je miesto, kde spájame jeden z vodičov žiarovky LED a druhý vodič vedie k ZEMI

Po nastavení tohto všetkého stačí vygenerovať svoj bitový tok (pomocou akéhokoľvek softvéru, ktorý používate, tj. Vivado), naprogramovať dosku a bum! Máte pracovnú dosku.

Poznámka: Mapovanie pinov nájdete v technickom liste Basys 3 tu.

zhromaždenie

Krok 5: Použitie stmievača

Ak všetko pôjde dobre, mali by ste mať plne funkčný stmievací systém. Ak to zhrnieme, stlačením horného tlačidla sa zvýši váš jas (až na 15) a stlačením tlačidla nadol sa jas zníži (až na 0). Dúfam, že vášmu teraz už uvoľnenému zraku všetko dobre dopadne!

Odporúča: