Sisällysluettelo:
- Vaihe 1: Luo tulolaskuri
- Vaihe 2: Luo LED -kellonjakaja
- Vaihe 3: Led -ohjaimen luominen
- Vaihe 4: Rajoitusten asettaminen ja kokoonpano
- Vaihe 5: Himmenninkytkimen käyttäminen
Video: Himmennettävä LED Basys 3 -levyä käyttämällä: 5 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:01
Tässä oppaassa aiomme rakentaa ja ohjata ulkoista LED -himmennysjärjestelmää. Käytettävissä olevilla painikkeilla käyttäjä voi himmentää LED -lampun haluamaansa kirkkauteen. Järjestelmä käyttää Basys 3 -korttia ja se on liitetty leipälevyyn, joka sisältää vastuksen ja LED -lampun. Painamalla "ylös" -painiketta lisätään kirkkautta ja "alas" -painikkeen painaminen vähentää kirkkautta kokonaan nollaan. Tämä ei ainoastaan estä käyttäjää sokeutumasta kirkkaina auringonvalolampuina, vaan myös säästää energiaa!
Vaihe 1: Luo tulolaskuri
Tässä vaiheessa luomme komponentin, joka määrittää kirkkauden tason (kellon kautta) käyttämällä kahta kytkintä: toinen lisää ja toinen pienentää. VHDL: n avulla tuotimme laskurin käyttämällä D-varvastossuja. "Ylös" -painikkeen painaminen siirtää seuraavan tilan nykyiseen tilaan ja tuottaa seitsemän segmentin näytön ja LED -lampun.
entiteetti updown_counter on
Portti (nykyinen_tila: ulos STD_LOGIC_VECTOR (3 - 0); edellinen_tila: STD_LOGIC_VECTOR (3 - 0); next_state: in STD_LOGIC_VECTOR (3 downto 0); clk: in STD_LOGIC; down_enable: in STD_LOGIC; up_enable: in ST) end updown_counter; arkkitehtuuri updown_counterin käyttäytyminen alkaa flop: prosessi (seuraava_tila, clk, ylös_enable, alas_enable, edellinen_tila) alkaa jos (nouseva reuna (clk)) sitten jos (up_enable = '1' ja ei (next_state = "0000")) sitten present_state <= seuraava_tila; elsif (down_enable = '1' eikä ei (previous_state = "1111")) sitten present_state <= edellinen_tila; loppu Jos; loppu Jos; lopeta prosessin floppi; lopeta käyttäytyminen;
Tarvitsemme myös kellon jokaista tuloa varten (kun se nousee), joten loimme myös kellonjakajan, joka määrittää, kuinka nopeasti painikkeita voidaan painaa kunkin kirkkaustason välillä. Tämän kellonjakajan avulla voimme näyttää oikean tason oikein seitsemän segmentin näytöllä ja tuottaa oikean intensiteetin tason kullekin tasolle.
entiteetti counter_clkDiv on
Portti (clk: in std_logic; sclk: out std_logic); end counter_clkDiv; arkkitehtuuri my_clk_div / counter_clkDiv on vakio max_count: integer: = (10000000); signaali tmp_clk: std_logic: = '0'; aloita my_div: process (clk, tmp_clk) muuttuja div_cnt: integer: = 0; aloita jos (nouseva reuna (clk)) sitten jos (div_cnt> = MAX_COUNT) sitten tmp_clk <= ei tmp_clk; div_cnt: = 0; else div_cnt: = div_cnt + 1; loppu Jos; loppu Jos; sclk <= tmp_clk; lopeta prosessi my_div; end my_clk_div;
Vaihe 2: Luo LED -kellonjakaja
Tässä vaiheessa luomme kellonjakajan LED -lampulle 16 eri voimakkuustason määrittämiseksi. Kun 0 on pois päältä ja 15 näyttää suurimman kirkkauden, kellonjakaja lisää jokaista painikkeen painallusta valitsemallamme kirkkaustasoksi. Jokainen nouseva taso merkitsi LED -lampun kellon kasvua. Muistaessamme, että kirkkaus ei kasva lineaarisesti, käänsimme kelloa suurimmalle mahdolliselle tasolle ja laskimme kelloja vastaavasti.
Huomaa: käytämme sinistä LEDiä. Eri värin (kuten punaisen) käyttäminen vaatii hieman erilaisia kelloja; keskikokoinen kirkkausasetus siniselle voisi jo olla punaisen kirkkaus. Tämä johtuu siitä, että erilaiset valon aallonpituudet vaativat erilaisia määriä energiaa, ja viileämmät värit, kuten violetti ja sininen, vaativat enemmän energiaa, kun taas lämpimät värit, kuten punainen ja oranssi, vaativat vähemmän energiaa.
entiteetti led_clkDiv on portti (nykyinen_tila: kohteessa STD_LOGIC_VECTOR (3 - 0); clk: in STD_LOGIC; led_clk: out STD_LOGIC); end led_clkDiv; arkkitehtuuri led_clkDivin käyttäytyminen on signaali tmp_clk: std_logic: = '0'; jaettu muuttuja max_count: kokonaisluku; aloita count_stuff: process (present_state) aloita tapaus present_state is when "0000" => max_count: = 0; kun "0001" => max_count: = 2; kun "0010" => max_count: = 4; kun "0011" => max_count: = 6; kun "0100" => max_count: = 8; kun "0101" => max_count: = 10; kun "0110" => max_count: = 12; kun "0111" => max_count: = 14; kun "1000" => max_count: = 16; kun "1001" => max_count: = 25; kun "1010" => max_count: = 50; kun "1011" => max_count: = 100; kun "1100" => max_count: = 150; kun "1101" => max_count: = 200; kun "1110" => max_count: = 250; kun "1111" => max_count: = 300; päätykotelo; lopeta prosessi count_stuff; my_div: process (clk, tmp_clk, present_state) muuttuja div_cnt: integer: = 0; aloita jos (nouseva reuna (clk)) sitten jos (div_cnt> = max_count) sitten tmp_clk <= ei tmp_clk; div_cnt: = 0; else div_cnt: = div_cnt + 1; loppu Jos; loppu Jos; led_clk <= tmp_clk; lopeta prosessi my_div; lopeta käyttäytyminen;
Vaihe 3: Led -ohjaimen luominen
Nyt kun olemme päässeet tähän asti, on aika yhdistää kaikki tähän mennessä luomamme komponentit LED -ohjaintiedostoon.
Yhteenvetona voidaan todeta, että käytetyt komponentit ovat seuraavat:
- Syöttölaskuri (päivityslaskuri)
- Kellonjakaja (counter_clkDiv)
- LED -kellonjakaja (led_clkDiv)
- Seitsemän segmentin näytönohjain (sseg_dec) (liitteenä oleva tiedosto)
Seitsemän segmentin näytönohjaimesta ei oikeastaan keskusteltu aiemmin, koska lainasimme VHDL-tiedoston tohtori Bryan Mealylta sen pitkän ja monimutkaisen koodin vuoksi. Pohjimmiltaan se ohjaa painikkeemme syötteet Basys 3 -kortin seitsemän segmentin näyttöön, jotta tiedämme kirkkauden tason.
Jatkossa LED -ohjain lisää tai vähentää laskuja, jotka ohjaavat samanaikaisesti sekä seitsemän segmentin näyttöä että LED -lampun kirkkautta.
entiteettilaskuri on portti (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); päätylaskuri; arkkitehtuuri Laskurin käyttäytyminen on komponentti päivitys_laskuri on portti (nykyinen_tila: ulos STD_LOGIC_VECTOR (3 - 0); edellinen_tila: STD_LOGIC_VECTOR (3 - 0); next_state: in STD_LOGIC_VECTOR (3 downto 0); clk: in STD_LOGIC; ST_LOGIC) up_enable: STD_LOGIC); loppukomponentti updown_counter; komponentti counter_clkDiv on portti (clk: in std_logic; sclk: out std_logic); pääkomponentti counter_clkDiv; komponentti sseg_dec on portti (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 out std_); pääkomponentti sseg_dec; komponentti led_clkDiv on portti (nykyinen_tila: STD_LOGIC_VECTORissa (3 - 0); clk: in STD_LOGIC; led_clk: out STD_LOGIC); pääkomponentti led_clkDiv; signaali nykyinen_tila: STD_LOGIC_VECTOR (3 - 0): = "0000"; signaali next_state: STD_LOGIC_VECTOR (3 - 0): = "0000"; signaali edellinen_tila: STD_LOGIC_VECTOR (3 - 0): = "0000"; signaali Alu_Val: STD_LOGIC_VECTOR (7 - 0); signaali sclk: STD_LOGIC; aloita Alu_Val (7 - 4) <= "0000"; Alu_Val (3 - 0) <= nykyinen_tila; seuraava_tila (0) <= ei (nykyinen_tila (0)); seuraava_tila (1) <= nykyinen_tila (0) xtai nykyinen_tila (1); seuraava_tila (2) <= (nykyinen_tila (0) ja nykyinen_tila (1)) xtai nykyinen_tila (2); seuraava_tila (3) <= (nykyinen_tila (0) ja nykyinen_tila (1) ja nykyinen_tila (2)) xtai nykyinen_tila (3); edellinen_tila (0) <= ei (nykyinen_tila (0)); edellinen_tila (1) <= nykyinen_tila (0) xtai nykyinen_tila (1); edellinen_tila (2) <= (nykyinen_tila (0) eikä nykyinen_tila (1)) xtai nykyinen_tila (2); edellinen_tila (3) sclk, seuraava_tila => seuraava_tila, edellinen_tila => edellinen_tila, ylös_enable => ylös_kelpoinen, alas_kelpoinen => alas_käytettävä, nykyinen_tila => nykyinen tila); display: sseg_dec port map (ALU_VAL => Alu_Val, SIGN => '0', VALID => '1', CLK => clk, DISP_EN => DISP_EN, SEGMENTS => SEGMENTS); led_div: led_clkDiv -porttikartta (clk => clk, present_state => present_state, led_clk => led_clk); clk_div: counter_clkDiv -porttikartta (clk => clk, sclk => sclk); lopeta käyttäytyminen;
Vaihe 4: Rajoitusten asettaminen ja kokoonpano
Rajoitukset
Jotta voimme asentaa ja ohjelmoida Basys 3 -levyn oikein, meidän on ensin määritettävä tähän vaiheeseen liitetty rajoitustiedosto. Seuraavia asetuksia on muutettu:
Painikkeet
- T18 muutettu arvoon "up_enable" (lisää kirkkautta)
- Vaihdettu U17 arvoon "down_enable" (vähennä kirkkautta)
7 segmentin näyttö
- W7, W6, U8, V8, U5, V5, U7, V7 edustavat yhden näytön jokaista segmenttiä
- U2, U4, V4, W4 edustavat jokaista näytettyä anodia (vain 2 on aktiivinen, koska suurin lukumme on 15)
PMOD -otsikko JC
JC7 kytketään yksi LED -lampun johtimista ja toinen johdin maadoitukseen
Kun olet asettanut tämän kaiken, sinun tarvitsee vain luoda bittivirta (millä tahansa ohjelmistolla, jota käytät, esim. Vivado), ohjelmoida korttisi ja puomi! Sinulla on työtaulu.
Huomautus: Pin -kartoitus löytyy Basys 3 -esitteestä täältä.
Kokoonpano
Vaihe 5: Himmenninkytkimen käyttäminen
Jos kaikki menee hyvin, sinulla pitäisi olla täysin toimiva himmennysjärjestelmä. Yhteenvetona voidaan todeta, että yläpainikkeen painaminen lisää kirkkautta (aina 15: een) ja alas -painikkeen painaminen vähentää kirkkautta (aina 0). Toivottavasti kaikki menee hyvin nyt rentoutuneelle näkökyvyllesi!
Suositeltava:
LED -himmennettävä valolaatikko: 11 vaihetta
Himmennettävä LED -valolaatikko: Rakenna 18 W: n LED -valolaatikkosi taistelemaan talven bluesia vastaan. Tämä valolaatikko on hajautettu ja himmennettävä PWM: n avulla. Jos sinulla on lampun ajastin, voit käyttää sitä vaihtoehtona herätyskellolle
PWM ja ESP32 - Himmennettävä LED PWM: llä ESP 32: ssa ja Arduino IDE: 6 vaihetta
PWM ja ESP32 | Himmennettävä LED PWM: llä ESP 32: ssa Arduino IDE: Tässä oppaassa näemme, kuinka luoda PWM -signaaleja ESP32: lla Arduino IDE & PWM: ää käytetään pohjimmiltaan analogialähdön tuottamiseen mistä tahansa MCU: sta ja että analoginen lähtö voi olla mitä tahansa 0 V - 3,3 V (esp32: n tapauksessa) & alkaen
Himmennettävä LED -paneeli: 15 vaihetta (kuvilla)
Himmennettävä LED -paneeli: Kun näin LED -kilpailun, se sai minut miettimään, olisiko jotain hauskaa tehdä käytetyt LEDit. En ole oikeastaan sähkömies, joten ajattelin, että se olisi hauska haaste. Olin jo jonkin aikaa odottanut työlampun hankkimista, joten
DIY Himmennettävä LED -tulovalo: 5 vaihetta (kuvilla)
DIY -himmennettävä LED -tulovalo: Tulvavalot joskus lakkaavat toimimasta ajan myötä, vaikka nykyään ne käyttävät LED -valoja. Tämä voi johtua monista syistä, kuten ylikuumenemisesta tai LED -ohjaimen viasta tai valmistusvirheestä. Useimmat meistä heittävät tuotteen pois
Tee oma himmennettävä LED -työpajavalaistus!: 11 vaihetta (kuvilla)
Tee oma himmennettävä LED -työpajavalaistus!: Tässä opetusohjelmassa näytän sinulle, miten voit tehdä oman erittäin tehokkaan LED -valaistuksen työpajaasi varten! Meillä, tekijöillä, ei koskaan ole tarpeeksi valaistusta työpöydällämme, joten meidän on ostettava lamput. Mutta päättäjinä emme osta asioita (ja tullaan repimään …)