Innholdsfortegnelse:
- Trinn 1: Lag inndatateller
- Trinn 2: Lag LED Clock Divider
- Trinn 3: Opprette LED -kontrolleren
- Trinn 4: Etablering av begrensninger og montering
- Trinn 5: Bruke dimmerbryteren
Video: Dimmbar LED ved hjelp av Basys 3 Board: 5 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:22
I denne guiden skal vi bygge og kontrollere et eksternt LED -dimmesystem. Med de tilgjengelige knappene kan brukeren dimme LED -pæren til ønsket lysstyrke. Systemet bruker Basys 3 -kortet, og det er koblet til et brødbrett som inneholder en motstand og LED -pæren. Trykk på den angitte "opp" -knappen for å øke lysstyrken, og trykke på "ned" -knappen vil redusere lysstyrken helt til null. Dette forhindrer ikke bare at brukeren blir blindet av lyspærer som er så solrike, men det sparer også energi!
Trinn 1: Lag inndatateller
For dette trinnet lager vi komponenten som bestemmer lysstyrken (gjennom en klokke) ved å bruke to brytere: en for å øke og en for å redusere. Ved å bruke VHDL produserte vi disken gjennom bruk av D-flip-flops. Ved å trykke på "opp" -knappen, flyttes den neste tilstanden til nåværende tilstand og sendes til sju segmenters display og LED -pære.
enhet updown_counter er
Port (present_state: ut STD_LOGIC_VECTOR (3 ned til 0); forrige_stat: i STD_LOGIC_VECTOR (3 ned til 0); neste_stat: i STD_LOGIC_VECTOR (3 ned til 0); clk: i STD_LOGIC; ned_aktivering: i STD_LOGIC; up_enable: i STD_LOGIC; avslutte updown_counter; arkitektur Oppførselsoppførsel for updown_counter begynner flop: prosess (next_state, clk, up_enable, down_enable, previous_state) begynner hvis (rising_edge (clk)) deretter hvis (up_enable = '1' og ikke (next_state = "0000")) deretter present_state <= neste_stat; elsif (down_enable = '1' og ikke (previous_state = "1111")) deretter present_state <= previous_state; slutt om; slutt om; slutt prosessen flopp; slutt Behavioral;
Vi trenger også en klokke for hver inngang som skal låses på (når den stiger), så vi opprettet også en klokkeskille som bestemmer hvor raskt knappene kan trykkes mellom hvert lysstyrkenivå. Denne klokkeskilleren lar oss vise riktig nivå på syv segment display og produsere riktig intensitetsnivå for hvert nivå.
enhet counter_clkDiv er
Port (clk: in std_logic; sclk: out std_logic); avslutte counter_clkDiv; arkitektur my_clk_div av counter_clkDiv er konstant max_count: integer: = (10000000); signal tmp_clk: std_logic: = '0'; start my_div: prosess (clk, tmp_clk) variabel div_cnt: heltall: = 0; start if (rising_edge (clk)) så if (div_cnt> = MAX_COUNT) så tmp_clk <= ikke tmp_clk; div_cnt: = 0; annet div_cnt: = div_cnt + 1; slutt om; slutt om; sclk <= tmp_clk; avslutte prosessen my_div; avslutte my_clk_div;
Trinn 2: Lag LED Clock Divider
For dette trinnet lager vi en klokkeskille for LED -pæren for å bestemme 16 forskjellige intensitetsnivåer. Siden 0 er slått av til 15 som viser maksimal lysstyrke, øker klokkeskilleren hvert knappetrykk med det vi har angitt som lysstyrkenivåer. Hvert økende nivå betydde en økning i klokken for LED -pæren. Når vi husker at lysstyrken ikke øker lineært, svingte vi klokken til det høyeste den kunne gå og reduserte klokkene våre tilsvarende.
Merk: Vi bruker en blå LED. Bruk av en annen farge (som rød) vil kreve litt forskjellige klokker helt; en middels lysstyrkeinnstilling for blå kan allerede være maks lysstyrke for rødt. Dette skjer fordi forskjellige bølgelengder av lys vil kreve forskjellige energimengder, mens de kjøligere fargene som lilla og blå krever mer energi, mens de varmere fargene som rødt og oransje krever mindre energi.
enhet led_clkDiv er Port (present_state: i STD_LOGIC_VECTOR (3 ned til 0); clk: i STD_LOGIC; led_clk: ut STD_LOGIC); avslutte led_clkDiv; arkitektur Behavioral for 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; slutt saken; avslutte prosessen count_stuff; my_div: prosess (clk, tmp_clk, present_state) variabel div_cnt: heltall: = 0; start if (rising_edge (clk)) deretter if (div_cnt> = max_count) deretter tmp_clk <= ikke tmp_clk; div_cnt: = 0; annet div_cnt: = div_cnt + 1; slutt om; slutt om; led_clk <= tmp_clk; avslutte prosessen my_div; slutt Behavioral;
Trinn 3: Opprette LED -kontrolleren
Nå som vi har kommet så langt, er det på tide å endelig kombinere alle komponentene vi har laget så langt i LED Controller -filen.
For å oppsummere, er komponentene som brukes følgende:
- Inngangsteller (updown_counter)
- Clock divider (counter_clkDiv)
- LED klokke divider (led_clkDiv)
- Syv-segment skjermdriver (sseg_dec) (vedlagt fil)
Den sju-segmenters skjermdriveren ble faktisk ikke diskutert tidligere fordi vi faktisk lånte VHDL-filen fra Dr. Bryan Mealy på grunn av den lange og kompliserte koden. Det den egentlig gjør, er å drive knappinngangene våre til syv-segmentet på Basys 3-kortet, slik at vi vet hvilket lysstyrkenivå.
Fremover bruker LED -kontrolleren flip -flops for å øke eller redusere antallet som styrer både syv segmentvisning og lysstyrkenivået til LED -pæren samtidig.
enhetsteller er 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); slutten teller; arkitektur Tellerens oppførsel er komponent updown_counter er Port (present_state: out STD_LOGIC_VECTOR (3 ned til 0); forrige_stat: i STD_LOGIC_VECTOR (3 ned til 0); next_state: i STD_LOGIC_VECTOR (3 ned til 0); clk: i STD_LOGIC; ned_aktiveret: up_enable: i STD_LOGIC); sluttkomponent updown_counter; komponent counter_clkDiv er Port (clk: in std_logic; sclk: out std_logic); sluttkomponent 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_EN: out std_logic_vector (3 ned til 0); SEGMENTS: ut std_logic_; sluttkomponent sseg_dec; komponent led_clkDiv er Port (present_state: i STD_LOGIC_VECTOR (3 ned til 0); clk: i STD_LOGIC; led_clk: ut STD_LOGIC); sluttkomponent led_clkDiv; signal present_state: STD_LOGIC_VECTOR (3 ned til 0): = "0000"; signal neste_stat: STD_LOGIC_VECTOR (3 ned til 0): = "0000"; signal forrige_stat: STD_LOGIC_VECTOR (3 ned til 0): = "0000"; signal Alu_Val: STD_LOGIC_VECTOR (7 ned til 0); signal sclk: STD_LOGIC; begynne Alu_Val (7 ned til 4) <= "0000"; Alu_Val (3 ned til 0) <= present_state; next_state (0) <= not (present_state (0)); next_state (1) <= present_state (0) xor present_state (1); next_state (2) <= (present_state (0) og present_state (1)) xor present_state (2); next_state (3) <= (present_state (0) og present_state (1) og present_state (2)) eller present_state (3); previous_state (0) <= not (present_state (0)); forrige_stat (1) <= present_state (0) xnor present_state (1); forrige_stat (2) <= (present_state (0) eller present_state (1)) xeller 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 portkart (clk => clk, present_state => present_state, led_clk => led_clk); clk_div: counter_clkDiv portkart (clk => clk, sclk => sclk); slutt Behavioral;
Trinn 4: Etablering av begrensninger og montering
Begrensninger
For å konfigurere og programmere Basys 3 -kortet riktig, må vi først sette opp begrensningsfilen som er vedlagt dette trinnet. Følgende innstillinger er justert:
Knapper
- Endret T18 til "up_enable" (øk lysstyrken)
- Endret U17 til "down_enable" (reduser lysstyrken)
7 segment display
- W7, W6, U8, V8, U5, V5, U7, V7 representerer hvert segment av en skjerm
- U2, U4, V4, W4 representerer hver anode som vises (bare 2 er aktive fordi vårt høyeste tall er 15)
PMOD Header JC
JC7 er der vi kobler en av ledningene til LED -pæren, og den andre ledningen fører til JORD
Etter at du har konfigurert alt dette, er alt du trenger å gjøre å generere bitstream (med hvilken som helst programvare du bruker, dvs Vivado), programmere brettet og boom! Du skaffer deg et arbeidsstyre.
Merk: Pin -kartleggingen finner du på Basys 3 -databladet her.
montering
Trinn 5: Bruke dimmerbryteren
Hvis alt går bra, bør du ha et fullt fungerende dimmersystem. For å oppsummere, vil du trykke på den øverste knappen for å øke lysstyrken (helt til 15), og trykke på ned -knappen for å redusere lysstyrken (helt til 0). Håper alt går bra for ditt nå avslappede syn!
Anbefalt:
DIY -- Hvordan lage en edderkopprobot som kan kontrolleres ved hjelp av smarttelefon ved hjelp av Arduino Uno: 6 trinn
DIY || Hvordan lage en edderkopprobot som kan kontrolleres ved hjelp av smarttelefon ved hjelp av Arduino Uno: Mens du lager en edderkopprobot, kan du lære så mange ting om robotikk. Som å lage roboter er både underholdende og utfordrende. I denne videoen skal vi vise deg hvordan du lager en Spider -robot, som vi kan bruke ved hjelp av smarttelefonen vår (Androi
Få blind til å gjenkjenne ting ved å berøre ting rundt dem ved hjelp av MakeyMakey: 3 trinn
Gjør blinde gjenkjenne ting ved å berøre ting rundt dem ved hjelp av MakeyMakey: introduksjon Dette prosjektet tar sikte på å gjøre blindes liv lett ved å identifisere ting rundt dem gjennom berøringsfølelsen. Meg og min sønn Mustafa tenkte vi på å finne et verktøy for å hjelpe dem, og i perioden vi brukte MakeyMakey -maskinvaren til
Kontroll ledet over hele verden ved bruk av internett ved hjelp av Arduino: 4 trinn
Kontroll ledet over hele verden ved bruk av internett ved hjelp av Arduino: Hei, jeg er Rithik. Vi kommer til å lage en Internett -kontrollert LED ved hjelp av telefonen din. Vi kommer til å bruke programvare som Arduino IDE og Blynk. Det er enkelt, og hvis du lyktes kan du kontrollere så mange elektroniske komponenter du vilTing We Need: Hardware:
Overvåke akselerasjon ved bruk av Raspberry Pi og AIS328DQTR ved hjelp av Python: 6 trinn
Overvåke akselerasjon ved hjelp av Raspberry Pi og AIS328DQTR Bruke Python: Akselerasjon er begrenset, tror jeg i henhold til noen fysikklover.- Terry Riley En gepard bruker fantastisk akselerasjon og raske endringer i hastighet når jeg jager. Den raskeste skapningen i land en gang i blant bruker sitt høyeste tempo for å fange byttedyr. Den
Hvordan lage en drone ved hjelp av Arduino UNO - Lag en quadcopter ved hjelp av mikrokontroller: 8 trinn (med bilder)
Hvordan lage en drone ved hjelp av Arduino UNO | Lag en Quadcopter ved hjelp av mikrokontroller: Introduksjon Besøk min Youtube -kanal En Drone er en veldig dyr gadget (produkt) å kjøpe. I dette innlegget skal jeg diskutere hvordan jeg får det billig? Og hvordan kan du lage din egen slik til en billig pris … Vel, i India er alle materialer (motorer, ESCer