Innehållsförteckning:
- Steg 1: Skapa inmatningsräknare
- Steg 2: Skapa LED Clock Divider
- Steg 3: Skapa LED -styrenheten
- Steg 4: Fastställande av begränsningar och montering
- Steg 5: Använda din Dimmer Switch
Video: Dimbar LED med Basys 3 Board: 5 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:43
I den här guiden ska vi bygga och styra ett externt LED -dimningssystem. Med de tillgängliga knapparna kan användaren dimma LED -lampan till önskad ljusstyrka. Systemet använder Basys 3 -kortet och det är anslutet till en brödbräda som innehåller ett motstånd och LED -lampan. Genom att trycka på den angivna "upp" -knappen ökar ljusstyrkan, och genom att trycka på "ned" -knappen sänks ljusstyrkan hela vägen till noll. Detta förhindrar inte bara att användaren blir förblindad av ljus-som-solen-glödlampor utan det sparar också energi!
Steg 1: Skapa inmatningsräknare
För detta steg skapar vi komponenten som bestämmer ljusstyrkan (genom en klocka) med hjälp av två omkopplare: en för att öka och en för att minska. Med hjälp av VHDL producerade vi räknaren genom att använda D-flip-flops. Genom att trycka på "upp" -knappen flyttas nästa tillstånd till det nuvarande läget, vilket går ut till displayen med sju segment och LED -lampan.
enhet updown_counter är
Port (present_stat: ut STD_LOGIC_VECTOR (3 ner till 0); föregående_stat: i STD_LOGIC_VECTOR (3 ner till 0); nästa_stat: i STD_LOGIC_VECTOR (3 ner till 0); clk: i STD_LOGIC; ned_aktiverad: i STD_LOGIC; upp_aktiverad: i STD_LOGIC) avsluta updown_counter; arkitektur Beteende för updown_counter börjar flop: process (next_state, clk, up_enable, down_enable, previous_state) börjar om (rising_edge (clk)) sedan om (up_enable = '1' och inte (next_state = "0000")) sedan present_state <= nästa_stat; elsif (down_enable = '1' och inte (previous_state = "1111")) sedan present_state <= previous_state; sluta om; sluta om; avsluta processfloppen; slut Beteende;
Vi behöver också en klocka för att varje ingång ska låsas fast (när den stiger), så vi skapade också en klockavdelare som avgör hur snabbt knapparna kan tryckas mellan varje ljusstyrka. Denna klockavdelare tillåter oss att korrekt visa rätt nivå på sjusegmentsdisplayen och producera rätt intensitetsnivå för varje nivå.
entitet counter_clkDiv är
Port (clk: in std_logic; sclk: out std_logic); avsluta counter_clkDiv; arkitektur my_clk_div av counter_clkDiv är konstant max_count: heltal: = (10000000); signal tmp_clk: std_logic: = '0'; börja my_div: process (clk, tmp_clk) variabel div_cnt: heltal: = 0; börja om (stigande_kant (clk)) sedan om (div_cnt> = MAX_COUNT) sedan tmp_clk <= inte tmp_clk; div_cnt: = 0; annars div_cnt: = div_cnt + 1; sluta om; sluta om; sclk <= tmp_clk; avsluta processen my_div; avsluta my_clk_div;
Steg 2: Skapa LED Clock Divider
För detta steg skapar vi en klockavdelare för LED -lampan för att bestämma 16 olika intensitetsnivåer. Eftersom 0 är avstängd till 15 som visar maximal ljusstyrka, ökar klockavdelaren varje knapptryckning med vad vi ställde in för att vara ljusstyrkan. Varje ökande nivå innebar en ökning av klockan för LED -lampan. Kom ihåg att ljusstyrkan inte ökar linjärt, vi slog klockan till det högsta den kunde gå och minskade våra klockor i enlighet därmed.
Obs: vi använder en blå lysdiod. Att använda en annan färg (som röd) kräver helt olika klockor; en medelljusstyrka för blå kan redan vara maximal ljusstyrka för rött. Detta händer eftersom olika våglängder av ljus kommer att kräva olika mängder energi, medan de kallare färgerna som lila och blå kräver mer energi, medan de varmare färgerna som rött och orange kräver mindre energi.
enhet led_clkDiv är Port (present_state: i STD_LOGIC_VECTOR (3 ner till 0); clk: i STD_LOGIC; led_clk: ut STD_LOGIC); avsluta led_clkDiv; arkitektur Beteende för led_clkDiv är signal tmp_clk: std_logic: = '0'; delad variabel max_count: heltal; börja count_stuff: process (present_state) begin case present_state är när "0000" => max_count: = 0; när "0001" => max_count: = 2; när "0010" => max_count: = 4; när "0011" => max_count: = 6; när "0100" => max_count: = 8; när "0101" => max_count: = 10; när "0110" => max_count: = 12; när "0111" => max_count: = 14; när "1000" => max_count: = 16; när "1001" => max_count: = 25; när "1010" => max_count: = 50; när "1011" => max_count: = 100; när "1100" => max_count: = 150; när "1101" => max_count: = 200; när "1110" => max_count: = 250; när "1111" => max_count: = 300; slutfall; avsluta process count_stuff; my_div: process (clk, tmp_clk, present_state) variabel div_cnt: heltal: = 0; börja om (stigande_kant (clk)) sedan om (div_cnt> = max_count) sedan tmp_clk <= inte tmp_clk; div_cnt: = 0; annars div_cnt: = div_cnt + 1; sluta om; sluta om; led_clk <= tmp_clk; avsluta processen my_div; slut Beteende;
Steg 3: Skapa LED -styrenheten
Nu när vi har kommit så här långt är det dags att äntligen kombinera alla komponenter vi har skapat hittills i LED Controller -filen.
För att sammanfatta är komponenterna som används följande:
- Ingångsräknare (updown_counter)
- Klockavdelare (counter_clkDiv)
- LED klockavdelare (led_clkDiv)
- Sju-segment displaydrivrutin (sseg_dec) (bifogad fil)
Sju-segment display-drivrutinen diskuterades faktiskt inte tidigare eftersom vi faktiskt lånade VHDL-filen från Dr Bryan Mealy på grund av dess långa och komplicerade kod. Vad den i huvudsak gör är att driva våra knappar till sju-segmentskärmen på Basys 3-kortet så att vi vet vilken ljusstyrka.
Framåt använder LED -styrenheten flip -flops för att öka eller minska antalet som styr både sju segmentdisplayen och ljusstyrkan för LED -lampan samtidigt.
entitetsräknare är Port (clk: i STD_LOGIC; up_enable: i STD_LOGIC; down_enable: i STD_LOGIC; SEGMENTS: out STD_LOGIC_VECTOR (7 ned till 0); DISP_EN: ut STD_LOGIC_VECTOR (3 ner till 0); led_clk: ut STD_LOGIC); sluträknare; arkitektur Beteende för räknare är komponent updown_counter är Port (present_stat: ut STD_LOGIC_VECTOR (3 ner till 0); föregående_stat: i STD_LOGIC_VECTOR (3 ner till 0); nästa_stat: i STD_LOGIC_VECTOR (3 ner till 0); clk: i STD_LOGIC; ned_aktiverad: up_enable: i STD_LOGIC); slutet komponent updown_counter; komponent counter_clkDiv är Port (clk: in std_logic; sclk: out std_logic); slutkomponent counter_clkDiv; komponent sseg_dec är Port (ALU_VAL: i std_logic_vector (7 ned till 0); SIGN: i std_logic; GILD: i std_logic; CLK: i std_logic; DISP_EN: ut std_logic_vector (3 nedåt 0); SEGMENTS: ut std_logic_; slutkomponent sseg_dec; komponent led_clkDiv är Port (present_stat: i STD_LOGIC_VECTOR (3 ner till 0); clk: i STD_LOGIC; led_clk: ut STD_LOGIC); slutkomponent led_clkDiv; signal present_state: STD_LOGIC_VECTOR (3 ner till 0): = "0000"; signal nästa_stat: STD_LOGIC_VECTOR (3 ner till 0): = "0000"; signal föregående_stat: STD_LOGIC_VECTOR (3 ner till 0): = "0000"; signal Alu_Val: STD_LOGIC_VECTOR (7 ner till 0); signal sclk: STD_LOGIC; börja Alu_Val (7 ned till 4) <= "0000"; Alu_Val (3 ned till 0) <= present_state; next_state (0) <= not (present_state (0)); next_state (1) <= present_state (0) xor present_state (1); nästa_stat (2) <= (present_state (0) och present_state (1)) xeller present_state (2); next_state (3) <= (present_state (0) och present_state (1) och present_state (2)) eller present_state (3); previous_state (0) <= not (present_state (0)); föregående_stat (1) <= present_state (0) xnor present_state (1); föregående_stat (2) <= (present_state (0) eller present_state (1)) eller 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); 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 -portkarta (clk => clk, present_state => present_state, led_clk => led_clk); clk_div: counter_clkDiv portkarta (clk => clk, sclk => sclk); slut Beteende;
Steg 4: Fastställande av begränsningar och montering
Begränsningar
För att korrekt konfigurera och programmera Basys 3 -kortet måste vi först konfigurera vår begränsningsfil som är bifogad detta steg. Följande inställningar har justerats:
Knappar
- Ändrade T18 till "up_enable" (öka ljusstyrkan)
- Ändrade U17 till "down_enable" (minska ljusstyrkan)
7 segment display
- W7, W6, U8, V8, U5, V5, U7, V7 representerar varje segment i en display
- U2, U4, V4, W4 representerar varje anod som visas (endast 2 är aktiva eftersom vårt högsta tal är 15)
PMOD Header JC
JC7 är där vi ansluter en av ledningarna till LED -lampan, och den andra ledningen leder till JORD
Efter att du har ställt in allt detta är det bara att generera din bitström (med vilken programvara du än använder, dvs Vivado), programmera din bräda och boom! Du fick dig en arbetsstyrelse.
Obs! Stiftmappningen finns i Basys 3 -databladet här.
hopsättning
Steg 5: Använda din Dimmer Switch
Om allt går bra bör du ha ett fullt fungerande dimmersystem. För att sammanfatta, ökar din ljusstyrka genom att trycka på den övre knappen (hela vägen till 15), och genom att trycka på nedåtknappen kommer du att minska din ljusstyrka (ända till 0). Hoppas allt går bra för din nu avslappnade syn!
Rekommenderad:
MXY Board - Low -budget XY Plotter Drawing Robot Board: 8 steg (med bilder)
MXY Board - Lågbudget XY Plotter Drawing Robot Board: Mitt mål var att designa mXY -kortet för att göra en låg budget till XY -plotterritningsmaskinen. Så jag designade en tavla som gör det lättare för dem som vill göra det här projektet. I det föregående projektet, medan du använder 2 st Nema17 stegmotorer, använder detta kort dig
LED -dimbar ljusbox: 11 steg
LED -dimbar ljusbox: Bygg din 18W LED -ljusbox för att bekämpa vinterbluesen. Denna ljusbox är diffunderad och dimbar med PWM. Om du har en lamptimer kan du använda den som ett alternativ till en väckarklocka
Dimbar LED -panel: 15 steg (med bilder)
Dimbar LED -panel: När jag såg LED -tävlingen fick jag mig att tänka på om det var något som skulle vara roligt att göra som använde LED -lampor. Jag är egentligen ingen elektrisk kille så jag tänkte att det skulle vara en rolig utmaning. Jag hade letat efter att få en arbetslampa ett tag så
DIY dimbar LED Flood Light: 5 steg (med bilder)
DIY dimbar LED Flood Light: Flood lights tenderar ibland att sluta fungera över tid även om de idag använder lysdioder. Detta kan bero på många orsaker som överhettning eller fel i LED -drivrutinen eller ett fel i tillverkningsprocessen. De flesta av oss slutar kasta bort en produkt
Dimbar Led Array: 4 steg
Dimmbar Led Array: Detta projekt uppnår tre huvudmål:- Läs ett analogt värde från en potentiometer- Skriv ett analogt värde till varje led- Variera ljusstyrkan för varje lysdiod baserat på potentiometeringången Nödvändiga material:- 5 lysdioder- Potentiometer- (5) 220 ohm resis