Tartalomjegyzék:
- 1. lépés: Hozzon létre bemeneti számlálót
- 2. lépés: Hozza létre a LED -es óraosztót
- 3. lépés: A LED vezérlő létrehozása
- 4. lépés: A korlátozások és az összeszerelés megállapítása
- 5. lépés: A dimmer kapcsoló használata
Videó: Halványítható LED a Basys 3 tábla használatával: 5 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:41
Ebben az útmutatóban egy külső LED fényerő -szabályozó rendszert építünk és irányítunk. A rendelkezésre álló gombokkal a felhasználó tetszés szerinti fényerőre állíthatja a LED izzót. A rendszer a Basys 3 táblát használja, és egy olyan kenyérlaphoz van csatlakoztatva, amely ellenállást és LED izzót tartalmaz. A kijelölt "fel" gomb megnyomása növeli a fényerőt, a "le" gomb megnyomása pedig egészen nullára csökkenti a fényerőt. Ez nemcsak megakadályozza, hogy a felhasználó elvakuljon a napfényes izzóktól, hanem energiát is megtakarít!
1. lépés: Hozzon létre bemeneti számlálót
Ehhez a lépéshez két kapcsoló segítségével hozzuk létre azt az összetevőt, amely meghatározza a fényerő szintjét (egy órán keresztül): az egyik növeli, a másik csökkenti. A VHDL segítségével D flip-flopok használatával állítottuk elő a számlálót. A "fel" gomb megnyomásával a következő állapot a jelenlegi állapotba kerül, a hét szegmenses kijelzőre és a LED -es izzóra.
entitás upload_counter az
Port (jelen_állapot: ki STD_LOGIC_VECTOR (3 -tól 0 -ig); előző_állapot: STD_LOGIC_VECTOR -ban (3 -tól 0 -ig); next_state: STD_LOGIC_VECTOR -ban (3 -tól 0 -ig); clk: STD_LOGIC -ban; down_enable: STD_LOGIC -ban; up_enable): STD_LOGIC end updown_counter vége; architektúra Az updown_counter viselkedése elkezdődik flop: folyamat (next_state, clk, up_enable, down_enable, previous_state) kezdődik, ha (emelkedő_szél (clk)), majd ha (up_enable = '1' és nem (next_state = "0000")) akkor present_state <= next_state; elsif (down_enable = '1' és nem (előző_állapot = "1111")), akkor jelen_állapot <= előző_állapot; fejezze be, ha; fejezze be, ha; vége folyamat flop; vége Viselkedés;
Szükségünk van egy órára is, amikor minden bemenethez rögzíteni kell (amikor emelkedik), ezért létrehoztunk egy óraosztót is, amely meghatározza, hogy milyen gyorsan lehet megnyomni a gombokat az egyes fényerőszintek között. Ez az óraosztó lehetővé teszi számunkra, hogy megfelelően megjelenítsük a megfelelő szintet a hét szegmenses kijelzőn, és minden szinthez megfelelő intenzitásszintet állítsunk elő.
entitás counter_clkDiv is
Port (clk: std_logic; sclk: out std_logic); end counter_clkDiv; architektúra my_clk_div of counter_clkDiv állandó max_count: integer: = (10000000); jel tmp_clk: std_logic: = '0'; start my_div: process (clk, tmp_clk) változó div_cnt: integer: = 0; start if (emelkedő szél (clk)), majd ha (div_cnt> = MAX_COUNT), akkor tmp_clk <= nem tmp_clk; div_cnt: = 0; else div_cnt: = div_cnt + 1; fejezze be, ha; fejezze be, ha; sclk <= tmp_clk; folyamat befejezése my_div; end my_clk_div;
2. lépés: Hozza létre a LED -es óraosztót
Ebből a lépésből létrehozunk egy óraosztót a LED izzóhoz, hogy meghatározzuk a 16 különböző intenzitásszintet. A 0 -tól 15 -ig a maximális fényerőt jeleníti meg, az óraosztó minden gombnyomással növeli a beállított fényerő szintet. Minden egyes növekvő szint a LED izzó órájának növekedését jelentette. Emlékezve arra, hogy a fényerő nem nő lineárisan, a lehető legmagasabbra forgattuk az órát, és ennek megfelelően csökkentettük az óráinkat.
Megjegyzés: kék LED -et használunk. Más szín (például piros) használata valamivel eltérő órákat igényel; a közepes fényerő -beállítás a kéknél már a maximális fényerő lehet a pirosnál. Ez azért fordul elő, mert a különböző hullámhosszú fények különböző energiákat igényelnek, a hidegebb színek, mint a lila és a kék, több energiát igényelnek, míg a melegebb színek, mint a piros és a narancs kevesebb energiát igényelnek.
entitás led_clkDiv a Port (jelen_állapot: az STD_LOGIC_VECTOR -ban (3 -tól 0 -ig); clk: az STD_LOGIC -ban; led_clk: ki STD_LOGIC); end led_clkDiv; architektúra A led_clkDiv viselkedése jel tmp_clk: std_logic: = '0'; megosztott változó max_count: integer; begin count_stuff: process (present_state) begin case present_state is when "0000" => max_count: = 0; amikor "0001" => max_count: = 2; amikor "0010" => max_count: = 4; amikor "0011" => max_count: = 6; amikor "0100" => max_count: = 8; amikor "0101" => max_count: = 10; amikor "0110" => max_count: = 12; amikor "0111" => max_count: = 14; amikor "1000" => max_count: = 16; amikor "1001" => max_count: = 25; amikor "1010" => max_count: = 50; amikor "1011" => max_count: = 100; amikor "1100" => max_count: = 150; amikor "1101" => max_count: = 200; amikor "1110" => max_count: = 250; amikor "1111" => max_count: = 300; vég tok; befejezési folyamat count_stuff; my_div: process (clk, tmp_clk, present_state) változó div_cnt: integer: = 0; start if (emelkedő szél (clk)), majd ha (div_cnt> = max_count), akkor tmp_clk <= nem tmp_clk; div_cnt: = 0; else div_cnt: = div_cnt + 1; fejezze be, ha; fejezze be, ha; led_clk <= tmp_clk; folyamat befejezése my_div; vége Viselkedés;
3. lépés: A LED vezérlő létrehozása
Most, hogy idáig eljutottunk, itt az ideje, hogy végre összevonjuk az összes eddig létrehozott összetevőt a LED -vezérlő fájlba.
Összefoglalva, a felhasznált összetevők a következők:
- Bemeneti számláló (updown_counter)
- Óraosztó (counter_clkDiv)
- LED óraosztó (led_clkDiv)
- Hét szegmenses kijelző illesztőprogram (sseg_dec) (csatolt fájl)
A hét szegmenses kijelző-illesztőprogramról valójában korábban nem esett szó, mert valójában a VHDL-fájlt kölcsönöztük Dr. Bryan Mealytől hosszú és bonyolult kódja miatt. Lényegében az, hogy a gombjainkat a Basys 3 tábla hét szegmenses kijelzőjére irányítja, hogy tudjuk, milyen fényerő van.
Továbblépve a LED -vezérlő papucsokkal növeli vagy csökkenti a számot, amely egyszerre szabályozza a hét szegmenses kijelzőt és a LED -izzó fényerejét.
entitásszámláló Port (clk: az STD_LOGIC -ban; fel_enable: az STD_LOGIC -ban; down_enable: a STD_LOGIC -ban; SEGMENTS: out STD_LOGIC_VECTOR (7 downto 0); DISP_EN: out STD_LOGIC_VECTOR (3 downto 0); led_clk: out STD_LOGIC); végszámláló; architektúra A számláló viselkedése komponens. up_enable: a STD_LOGIC -ban); befejező összetevő updown_counter; összetevő counter_clkDiv a Port (clk: az std_logic -ban; sclk: out std_logic); végösszetevő counter_clkDiv; komponens sseg_dec a port (ALU_VAL: 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); SEGMENTS: out 0 std_); végkomponens sseg_dec; komponens led_clkDiv a Port (jelen_állapot: az STD_LOGIC_VECTOR -ban (3 -tól 0 -ig); clk: az STD_LOGIC -ban; led_clk: ki STD_LOGIC); végkomponens led_clkDiv; jel jelen_állapot: STD_LOGIC_VECTOR (3 -tól 0 -ig): = "0000"; jel következő_állapot: STD_LOGIC_VECTOR (3 -tól 0 -ig): = "0000"; jel előző_állapot: STD_LOGIC_VECTOR (3 -tól 0 -ig): = "0000"; jel Alu_Val: STD_LOGIC_VECTOR (7 -től 0 -ig); jel sclk: STD_LOGIC; start Alu_Val (7 -től 4 -ig) <= "0000"; Alu_Val (3 -tól 0 -ig) <= jelenlegi_állapot; next_state (0) <= nem (present_state (0)); next_state (1) <= jelen_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); előző_állapot (0) <= nem (jelen_állapot (0)); előző_állapot (1) <= jelen_állapot (0) xnem jelen_állapot (1); előző_állapot (2) <= (jelen_állapot (0) és jelen_állapot (1)) xvagy_állapot (2); előző_állapot (3) sclk, next_state => next_state, previous_state => előző_állapot, up_enable => up_enable, down_enable => down_enable, present_state => present_state); 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 porttérkép (clk => clk, present_state => present_state, led_clk => led_clk); clk_div: counter_clkDiv porttérkép (clk => clk, sclk => sclk); vége Viselkedés;
4. lépés: A korlátozások és az összeszerelés megállapítása
Korlátok
A Basys 3 tábla megfelelő beállításához és programozásához először be kell állítanunk a lépéshez csatolt kényszerfájlt. A következő beállításokat módosították:
Gombok
- A T18 "up_enable" értékre módosítva (növelje a fényerőt)
- Az U17 -et "down_enable" -re változtatta (csökkentse a fényerőt)
7 szegmenses kijelző
- A W7, W6, U8, V8, U5, V5, U7, V7 egy kijelző minden szegmensét képviseli
- U2, U4, V4, W4 minden megjelenített anódot jelent (csak 2 aktív, mert a legmagasabb számunk 15)
PMOD fejléc JC
A JC7 -hez csatlakoztatjuk a LED -es izzó egyik vezetékét, a másik vezetéket pedig a GROUND -hoz
Miután beállította ezt az egészet, mindössze annyit kell tennie, hogy létrehozza a bitfolyamot (bármilyen szoftvert használ, pl. Vivado), programozza a táblát és a fellendülést! Van egy munkalapod.
Megjegyzés: A tűleképezés itt található a Basys 3 adatlapján.
Összeszerelés
5. lépés: A dimmer kapcsoló használata
Ha minden jól megy, akkor teljesen működőképes fényerő -szabályozó rendszerrel kell rendelkeznie. Összefoglalva: a felső gomb megnyomása növeli a fényerőt (egészen 15 -ig), a le gomb megnyomása pedig csökkenti a fényerőt (egészen 0 -ig). Remélem minden rendben lesz a most ellazult látásoddal!
Ajánlott:
Otthoni automatizálás a Raspberry Pi segítségével a relé tábla használatával: 7 lépés
Otthonautomatizálás a Raspberry Pi segítségével a relé tábla használatával: Az emberek nagy része nagy kényelmet szeretne, de elfogadható áron. Lustának érezzük, hogy minden este megvilágítsuk a házakat, amikor lemegy a nap, és másnap reggel, újra lekapcsolva a villanyt, vagy a klímaberendezést/ventilátort/fűtőtestet be-/kikapcsolni, ahogy az
Halloween ijesztgetőgép PIR, 3D nyomtatott sütőtök és a Troll Arduino kompatibilis audio tréfa/praktikus vicc tábla használatával: 5 lépés
Halloween -ijesztőgép PIR -t, 3D -s nyomtatott tököt és a Troll Arduino -kompatibilis audio tréfát/praktikus vicc táblát használva: A Troll táblát Patrick Thomas Mitchell készítette az EngineeringShock Electronics -ból, és nem is olyan régen teljes mértékben finanszírozták a Kickstarteren. Néhány héttel hamarabb megkaptam a jutalmamat, hogy segítsek néhány használati példát írni, és egy Arduino könyvtárat felépíteni
FM -rádió Inviot U1, Arduino -kompatibilis tábla használatával: 3 lépés
FM rádió Az Inviot U1, Arduino kompatibilis tábla használatával: A TEA5767 könnyen használható arduino -val. TEA5767 modult és InVIoT U1 kártyát használok az InvIoT.com webhelyről
Otthoni automatizálás Bluetooth használatával (intelligens tábla): 6 lépés
Otthonautomatizálás Bluetooth használatával (intelligens tábla): Olvassa el figyelmesen. Az otthoni automatizálás magában foglalja a háztartási környezeti berendezések automatizálását. Ugyanez elérése érdekében egy intelligens táblát terveztünk, amelyet könnyű telepíteni, és a csatlakoztatott berendezések okostelefonos alkalmazáson keresztül vezérelhetők
Az Arduino WeMos D1 WiFi UNO ESP8266 IOT IDE kompatibilis tábla használata a Blynk használatával: 10 lépés
Az Arduino WeMos D1 WiFi UNO ESP8266 IOT IDE kompatibilis kártya használata a Blynk használatával: Arduino WeMos D1 WiFi UNO ESP8266 IOT IDE kompatibilis kártya Leírás: WiFi ESP8266 Development Board WEMOS D1. A WEMOS D1 egy ESIF8266 12E alapú WIFI fejlesztő tábla. A működés hasonló a NODEMCU -hoz, kivéve, hogy a hardver beépített