Obsah:

Stmívatelné LED pomocí základen 3 desky: 5 kroků
Stmívatelné LED pomocí základen 3 desky: 5 kroků

Video: Stmívatelné LED pomocí základen 3 desky: 5 kroků

Video: Stmívatelné LED pomocí základen 3 desky: 5 kroků
Video: Zigbee LED ovladač C01Z - pro stmívatelné lampy, recenze a testování 2024, Červenec
Anonim
Stmívatelná LED pomocí základní desky 3
Stmívatelná LED pomocí základní desky 3

V této příručce budeme stavět a ovládat externí systém stmívání LED. Pomocí dostupných tlačítek může uživatel ztlumit LED žárovku na libovolný požadovaný jas. Systém používá desku Basys 3 a je připojen k prkénku, které obsahuje odpor a LED žárovku. Stisknutím určeného tlačítka „nahoru“zvýšíte jas a stisknutím tlačítka „dolů“snížíte jas až na nulu. Nejen, že to zabrání tomu, aby byl uživatel oslepen žárovkami jasných slunečních paprsků, ale také to šetří energii!

Krok 1: Vytvořte vstupní čítač

V tomto kroku vytvoříme komponentu, která určuje úroveň jasu (prostřednictvím hodin) pomocí dvou přepínačů: jeden pro zvýšení a jeden pro snížení. Pomocí VHDL jsme vyrobili čítač pomocí D žabek. Stisknutím tlačítka "nahoru" se přepne na další stav do současného stavu, výstup na sedmisegmentový displej a LED žárovku.

entity updown_counter je

Port (present_state: out STD_LOGIC_VECTOR (3 downto 0); previous_state: in STD_LOGIC_VECTOR (3 downto 0); next_state: in STD_LOGIC_VECTOR (3 downto 0); clk: in STD_LOGIC; down_enable: in STD_LOGIC; up_enable: in STD_) konec aktualizovaného_počítače; architektura Behavioral of updown_counter is 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 ne (previous_state = "1111")) then present_state <= previous_state; konec pokud; konec pokud; konec procesu flop; konec Behaviorální;

Potřebujeme také hodiny pro každý vstup, na který se má zapnout (když stoupá), takže jsme také vytvořili dělič hodin, který určuje, jak rychle lze tlačítka stisknout mezi jednotlivými úrovněmi jasu. Tento dělič hodin nám umožňuje správně zobrazit správnou úroveň na sedmisegmentovém displeji a vytvořit správnou úroveň intenzity pro každou úroveň.

entita counter_clkDiv je

Port (clk: in std_logic; sclk: out std_logic); konec counter_clkDiv; architektura my_clk_div of counter_clkDiv je konstantní max_count: integer: = (10000000); signál tmp_clk: std_logic: = '0'; begin my_div: process (clk, tmp_clk) proměnná 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; konec pokud; konec pokud; sclk <= tmp_clk; ukončit proces my_div; konec my_clk_div;

Krok 2: Vytvořte dělič LED hodin

Pro tento krok vytvoříme hodinový dělič pro LED žárovku pro určení 16 různých úrovní intenzity. Když je 0 vypnuto na 15 a zobrazuje maximální jas, dělič hodin zvyšuje každé stisknutí tlačítka o to, co jsme nastavili jako úrovně jasu. Každá rostoucí úroveň znamenala zvýšení hodin pro LED žárovku. Pamatujeme si, že jas se lineárně nezvyšuje, natáhli jsme hodiny na nejvyšší možnou hodnotu a podle toho snížili naše hodiny.

Poznámka: používáme modrou LED. Použití jiné barvy (například červené) bude vyžadovat úplně jiné hodiny; nastavení středního jasu pro modrou již může být maximální jas pro červenou. Stává se to proto, že různé vlnové délky světla budou vyžadovat různá množství energie, přičemž chladnější barvy jako fialová a modrá vyžadují více energie, zatímco teplejší barvy jako červená a oranžová vyžadují méně energie.

entity led_clkDiv is Port (present_state: in STD_LOGIC_VECTOR (3 downto 0); clk: in STD_LOGIC; led_clk: out STD_LOGIC); konec led_clkDiv; architektura Behavioral of led_clkDiv is signal tmp_clk: std_logic: = '0'; sdílená proměnná max_count: integer; begin count_stuff: process (present_state) begin case present_state is when "0000" => max_count: = 0; když "0001" => max_count: = 2; když "0010" => max_count: = 4; když "0011" => max_count: = 6; když "0100" => max_count: = 8; když "0101" => max_count: = 10; když "0110" => max_count: = 12; když "0111" => max_count: = 14; když "1000" => max_count: = 16; když "1001" => max_count: = 25; když "1010" => max_count: = 50; když "1011" => max_count: = 100; když "1100" => max_count: = 150; když "1101" => max_count: = 200; když "1110" => max_count: = 250; když "1111" => max_count: = 300; koncový případ; ukončit proces count_stuff; my_div: process (clk, tmp_clk, present_state) proměnná 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; konec pokud; konec pokud; led_clk <= tmp_clk; ukončit proces my_div; konec Behaviorální;

Krok 3: Vytvoření ovladače LED

Nyní, když jsme se dostali tak daleko, je čas konečně zkombinovat všechny komponenty, které jsme dosud vytvořili, do souboru LED Controller.

Abychom to shrnuli, použité komponenty jsou následující:

  • Počitadlo vstupu (aktualizační_počítač)
  • Dělič hodin (counter_clkDiv)
  • LED dělič hodin (led_clkDiv)
  • Sedmisegmentový ovladač zobrazení (sseg_dec) (přiložený soubor)

O sedmisegmentovém ovladači displeje se ve skutečnosti dříve nemluvilo, protože jsme si ve skutečnosti vypůjčili soubor VHDL od Dr. Bryana Mealyho kvůli jeho dlouhému a komplikovanému kódu. To, co v podstatě dělá, je řídit naše tlačítkové vstupy na sedmisegmentový displej na desce Basys 3, abychom věděli, na jaké úrovni jasu je.

Při pohybu vpřed ovladač LED pomocí žabek zvyšuje nebo snižuje počet, který ovládá současně sedmisegmentový displej a úroveň jasu LED žárovky.

čítač entit 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); koncové počítadlo; architektura Behavioral of counter is component updown_counter is Port (present_state: out STD_LOGIC_VECTOR (3 downto 0); previous_state: in STD_LOGIC_VECTOR (3 downto 0); next_state: in STD_LOGIC_VECTOR (3 downto 0); clk: in STD_LOGIC; down_enable: up_enable: v STD_LOGIC); konec komponenty updown_counter; komponent counter_clkDiv je Port (clk: in std_logic; sclk: out std_logic); koncová součást counter_clkDiv; komponenta 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á komponenta sseg_dec; komponenta led_clkDiv je Port (present_state: in STD_LOGIC_VECTOR (3 down to 0); clk: in STD_LOGIC; led_clk: out STD_LOGIC); koncová komponenta led_clkDiv; signál present_state: STD_LOGIC_VECTOR (3 dolů 0): = "0000"; signál next_state: STD_LOGIC_VECTOR (3 až 0): = "0000"; signál previous_state: STD_LOGIC_VECTOR (3 až 0): = "0000"; signál Alu_Val: STD_LOGIC_VECTOR (7 až 0); signal sclk: STD_LOGIC; begin Alu_Val (7 downto 4) <= "0000"; Alu_Val (3 až 0) <= současný_stát; 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); zobrazení: 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); konec Behaviorální;

Krok 4: Stanovení omezení a sestavení

Omezení

Abychom správně nastavili a naprogramovali desku Basys 3, musíme nejprve nastavit náš soubor omezení, který je připojen k tomuto kroku. Byla upravena následující nastavení:

Tlačítka

  • Změněno T18 na „up_enable“(zvýšit jas)
  • Změněno U17 na „down_enable“(snížení jasu)

7segmentový displej

  • W7, W6, U8, V8, U5, V5, U7, V7 představují každý segment jednoho displeje
  • U2, U4, V4, W4 představují každou zobrazenou anodu (aktivní jsou pouze 2, protože naše nejvyšší číslo je 15)

Záhlaví PMOD JC

JC7 je místo, kde připojujeme jeden z vodičů LED žárovky a druhý vodič vede do UZEMNĚNÍ

Poté, co toto vše nastavíte, stačí vygenerovat bitový tok (s jakýmkoli softwarem, který používáte, tj. Vivado), naprogramovat desku a bum! Máte pracovní desku.

Poznámka: Mapování pinů najdete v datovém listu Basys 3 zde.

Shromáždění

Krok 5: Použití stmívače

Pokud vše půjde dobře, měli byste mít plně funkční systém stmívače. Abychom to shrnuli, stisknutím horního tlačítka zvýšíte jas (až na 15) a stisknutím tlačítka dolů snížíte jas (až na 0). Doufám, že vše dobře dopadne na váš nyní uvolněný zrak!

Doporučuje: