Indholdsfortegnelse:
- Trin 1: Opret inputtæller
- Trin 2: Opret LED Clock Divider
- Trin 3: Oprettelse af LED -controlleren
- Trin 4: Etablering af begrænsninger og samling
- Trin 5: Brug af din lysdæmperkontakt
Video: Dæmpbar LED ved hjælp af Basys 3 Board: 5 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:27
I denne vejledning skal vi bygge og styre et eksternt LED -dæmpningssystem. Med de tilgængelige knapper kan brugeren dæmpe LED -pæren til enhver ønsket lysstyrke. Systemet bruger Basys 3 -kortet, og det er forbundet til et brødbræt, der indeholder en modstand og LED -pæren. Ved at trykke på den angivne "op" -knap øges lysstyrken, og ved at trykke på knappen "ned" sænkes lysstyrken helt til nul. Dette forhindrer ikke kun, at brugeren bliver blændet af lyse pærer, men det sparer også energi!
Trin 1: Opret inputtæller
Til dette trin opretter vi den komponent, der bestemmer lysstyrkeniveauet (gennem et ur) ved hjælp af to kontakter: en for at øge og en for at reducere. Ved hjælp af VHDL producerede vi tælleren ved hjælp af D-flip-flops. Ved at trykke på "op" -knappen skubbes den næste tilstand til den nuværende tilstand og sendes til displayet med syv segmenter og LED -pæren.
enhed updown_counter er
Port (nuværende_stat: ud STD_LOGIC_VECTOR (3 ned til 0); forrige_stat: i STD_LOGIC_VECTOR (3 ned til 0); næste_stat: i STD_LOGIC_VECTOR (3 ned til 0); clk: i STD_LOGIC; ned_aktiveret: i STD_LOGIC; op_aktiveret: i STD_LOGIC afslut updown_counter; arkitektur Adfærdsadfærd for updown_counter starter flop: proces (next_state, clk, up_enable, down_enable, previous_state) begynder hvis (rising_edge (clk)) derefter hvis (up_enable = '1' og ikke (next_state = "0000")) derefter present_state <= næste_stat; elsif (down_enable = '1' og ikke (previous_state = "1111")) derefter present_state <= previous_state; Afslut Hvis; Afslut Hvis; slut proces flop; ende Adfærdsmæssig;
Vi har også brug for et ur til hver indgang, der skal låses fast (når den stiger), så vi har også oprettet en urdeler, der bestemmer, hvor hurtigt knapperne kan trykkes mellem hvert lysstyrkeniveau. Denne urdeler giver os mulighed for korrekt at vise det rigtige niveau på syv segment display og producere det rigtige intensitetsniveau for hvert niveau.
enhed counter_clkDiv er
Port (clk: in std_logic; sclk: out std_logic); afslut counter_clkDiv; arkitektur my_clk_div for counter_clkDiv er konstant max_count: heltal: = (10000000); signal tmp_clk: std_logic: = '0'; begynde my_div: proces (clk, tmp_clk) variabel div_cnt: heltal: = 0; start if (rising_edge (clk)) derefter hvis (div_cnt> = MAX_COUNT) derefter tmp_clk <= ikke tmp_clk; div_cnt: = 0; ellers div_cnt: = div_cnt + 1; Afslut Hvis; Afslut Hvis; sclk <= tmp_clk; afslutte processen my_div; afslut my_clk_div;
Trin 2: Opret LED Clock Divider
Til dette trin opretter vi en urdeler til LED -pæren for at bestemme 16 forskellige intensitetsniveauer. Da 0 er slukket til 15, der viser maksimal lysstyrke, øger uropdeleren hvert knaptryk med det, vi har indstillet til at være lysstyrkeniveauer. Hvert stigende niveau betød en stigning i uret til LED -pæren. Ved at huske på, at lysstyrken ikke stiger lineært, slog vi uret til det højeste, det kunne gå, og reducerede vores ure i overensstemmelse hermed.
Bemærk: vi bruger en blå LED. Brug af en anden farve (som rød) vil kræve lidt forskellige ure helt; en medium lysstyrkeindstilling for blå kunne allerede være maks lysstyrke for rød. Dette sker, fordi forskellige lysbølgelængder vil kræve forskellige mængder energi, hvor de køligere farver som lilla og blå kræver mere energi, mens de varmere farver som rød og orange kræver mindre energi.
enhed led_clkDiv er Port (nuværende_stat: i STD_LOGIC_VECTOR (3 ned til 0); clk: i STD_LOGIC; led_clk: ude STD_LOGIC); slut led_clkDiv; arkitektur Adfærdsmæssig af led_clkDiv er signal tmp_clk: std_logic: = '0'; delt variabel max_count: integer; begin count_stuff: process (present_state) begin case present_state er 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; slut sag; afslutte processen count_stuff; my_div: proces (clk, tmp_clk, present_state) variabel div_cnt: heltal: = 0; begynde hvis (stigende_kant (clk)) derefter hvis (div_cnt> = max_count) derefter tmp_clk <= ikke tmp_clk; div_cnt: = 0; ellers div_cnt: = div_cnt + 1; Afslut Hvis; Afslut Hvis; led_clk <= tmp_clk; afslutte processen my_div; ende Adfærdsmæssig;
Trin 3: Oprettelse af LED -controlleren
Nu hvor vi er nået så langt, er det tid til endelig at kombinere alle de komponenter, vi har skabt indtil nu, i LED Controller -filen.
For at opsummere er de anvendte komponenter følgende:
- Input tæller (updown_counter)
- Urdeler (counter_clkDiv)
- LED clock divider (led_clkDiv)
- Syv segment display driver (sseg_dec) (vedhæftet fil)
Den syv-segmenters displaydriver blev faktisk ikke tidligere diskuteret, fordi vi faktisk lånte VHDL-filen fra Dr. Bryan Mealy på grund af dens lange og komplicerede kode. Hvad det i det væsentlige gør, er at drive vores knapindgange til syv-segmentets display på Basys 3-kortet, så vi ved, hvilket lysstyrkeniveau der er.
Fremadrettet bruger LED -controlleren flip -flops til at øge eller reducere antallet, der styrer både det syv segment display og lysstyrkeniveauet for LED -pæren samtidigt.
enhedstæller er Port (clk: i STD_LOGIC; up_enable: i STD_LOGIC; down_enable: i STD_LOGIC; SEGMENTS: out STD_LOGIC_VECTOR (7 ned til 0); DISP_EN: ud STD_LOGIC_VECTOR (3 ned til 0); led_clk: ud STD_LOGIC); slut tæller; arkitektur Tællers adfærd er komponent updown_counter er Port (nuværende_stat: ude STD_LOGIC_VECTOR (3 ned til 0); forrige_stat: i STD_LOGIC_VECTOR (3 ned til 0); næste_stat: i STD_LOGIC_VECTOR (3 ned til 0); clk: i STD_LOGIC; ned_aktiveret: up_enable: i STD_LOGIC); slutkomponent updown_counter; komponent counter_clkDiv er Port (clk: in std_logic; sclk: out std_logic); slutkomponent counter_clkDiv; komponent sseg_dec er Port (ALU_VAL: i std_logic_vector (7 ned til 0); SIGN: i std_logic; Gyldig: i std_logic; CLK: i std_logic; DISP_DA: out std_logic_vector (3 ned til 0); SEGMENTS: ud std_logic_; slutkomponent sseg_dec; komponent led_clkDiv er Port (nuværende_stat: i STD_LOGIC_VECTOR (3 ned til 0); clk: i STD_LOGIC; led_clk: ud STD_LOGIC); slutkomponent led_clkDiv; signal present_state: STD_LOGIC_VECTOR (3 ned til 0): = "0000"; signal næste_stat: STD_LOGIC_VECTOR (3 ned til 0): = "0000"; signal foregående_stat: STD_LOGIC_VECTOR (3 ned til 0): = "0000"; signal Alu_Val: STD_LOGIC_VECTOR (7 ned til 0); signal sclk: STD_LOGIC; begynde Alu_Val (7 ned til 4) <= "0000"; Alu_Val (3 ned til 0) <= nuværende_stat; 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) og present_state (1) og present_state (2)) xor present_state (3); previous_state (0) <= not (present_state (0)); previous_state (1) <= present_state (0) xnor present_state (1); forrige_stat (2) <= (præsent_stat (0) eller præsent_stat (1)) eller nuværende_stat (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 portkort (clk => clk, present_state => present_state, led_clk => led_clk); clk_div: counter_clkDiv portkort (clk => clk, sclk => sclk); ende Adfærdsmæssig;
Trin 4: Etablering af begrænsninger og samling
Begrænsninger
For at konfigurere og programmere Basys 3 -kortet korrekt skal vi først konfigurere vores begrænsningsfil, der er vedhæftet dette trin. Følgende indstillinger er blevet justeret:
Knapper
- Ændret T18 til "up_enable" (øg lysstyrken)
- Ændret U17 til "down_enable" (reducer lysstyrken)
7 segment display
- W7, W6, U8, V8, U5, V5, U7, V7 repræsenterer hvert segment i et display
- U2, U4, V4, W4 repræsenterer hver anode, der vises (kun 2 er aktive, fordi vores højeste tal er 15)
PMOD Header JC
JC7 er, hvor vi forbinder en af ledningerne på LED -pæren, og den anden ledning fører til JORD
Efter at have konfigureret alt dette, er alt du skal gøre at generere din bitstream (med den software du bruger, dvs. Vivado), programmere dit board og boom! Du skaffede dig en arbejdsgruppe.
Bemærk: Pin -mapping kan findes på Basys 3 -databladet her.
montage
Trin 5: Brug af din lysdæmperkontakt
Hvis alt går godt, skal du have et fuldt fungerende lysdæmper. For at opsummere, øges din lysstyrke ved at trykke på den øverste knap (helt til 15), og ved at trykke på ned -knappen reduceres din lysstyrke (helt til 0). Håber alt går godt for dit nu afslappede syn!
Anbefalede:
DIY -- Sådan laver du en edderkoprobot, der kan kontrolleres ved hjælp af smartphone ved hjælp af Arduino Uno: 6 trin
DIY || Sådan laver du en edderkoprobot, der kan styres ved hjælp af smartphone Brug af Arduino Uno: Mens du laver en edderkoprobot, kan man lære så mange ting om robotik. Ligesom at lave robotter er underholdende såvel som udfordrende. I denne video vil vi vise dig, hvordan du laver en Spider -robot, som vi kan betjene ved hjælp af vores smartphone (Androi
Kontrol ledt over hele verden ved hjælp af internet ved hjælp af Arduino: 4 trin
Kontrol ledt over hele verden ved hjælp af internet ved hjælp af Arduino: Hej, jeg er Rithik. Vi kommer til at lave en internetstyret LED ved hjælp af din telefon. Vi kommer til at bruge software som Arduino IDE og Blynk.Det er enkelt, og hvis det lykkedes dig, kan du styre så mange elektroniske komponenter, du ønskerTing We Need: Hardware:
LED dæmpbar lysboks: 11 trin
LED dæmpbar lysboks: Byg din 18W LED -lysboks til at bekæmpe vinterblues. Denne lysboks er diffunderet og dæmpbar ved hjælp af PWM. Hvis du har en lampetimer, kan du bruge den som et alternativ til et vækkeur
Sådan laver du en drone ved hjælp af Arduino UNO - Lav en quadcopter ved hjælp af mikrokontroller: 8 trin (med billeder)
Sådan laver du en drone ved hjælp af Arduino UNO | Lav en Quadcopter ved hjælp af mikrokontroller: Introduktion Besøg min Youtube -kanal En Drone er en meget dyr gadget (produkt) at købe. I dette indlæg vil jeg diskutere, hvordan jeg gør det billigt ?? Og hvordan kan du lave din egen sådan til en billig pris … Nå i Indien alle materialer (motorer, ESC'er
DIY dæmpbar LED Flood Light: 5 trin (med billeder)
DIY dæmpbar LED Flood Light: Flood lights undertiden har en tendens til at stoppe med at fungere over tid, selvom de i dag bruger LED'er. Dette kan skyldes mange årsager såsom overophedning eller en fejl i LED -driveren eller en fejl i fremstillingsprocessen. De fleste af os ender med at smide en vare