Spisu treści:
- Krok 1: Utwórz licznik wejściowy
- Krok 2: Utwórz dzielnik zegara LED
- Krok 3: Tworzenie kontrolera LED
- Krok 4: Ustalenie ograniczeń i montaż
- Krok 5: Korzystanie ze ściemniacza
Wideo: Ściemnialna dioda LED za pomocą płytki Basys 3: 5 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:29
W tym przewodniku zamierzamy zbudować i kontrolować zewnętrzny system ściemniania LED. Za pomocą dostępnych przycisków użytkownik może przyciemnić żarówkę LED do dowolnej jasności. System wykorzystuje płytkę Basys 3 i jest podłączony do płytki stykowej zawierającej rezystor i żarówkę LED. Naciśnięcie wyznaczonego przycisku „w górę” zwiększy jasność, a naciśnięcie przycisku „w dół” zmniejszy jasność do zera. Nie tylko zapobiega to oślepieniu użytkownika przez jasne jak słońce żarówki, ale także oszczędza energię!
Krok 1: Utwórz licznik wejściowy
W tym kroku tworzymy komponent określający poziom jasności (poprzez zegar) za pomocą dwóch przełączników: jednego do zwiększania i drugiego do zmniejszania. Korzystając z VHDL wyprodukowaliśmy licznik przy użyciu przerzutników D. Naciśnięcie przycisku „w górę” przesuwa następny stan do stanu obecnego, wyprowadzając go na siedmiosegmentowy wyświetlacz i żarówkę LED.
encja updown_counter to
Port (stan_obecny: out STD_LOGIC_VECTOR (3 downto 0); previous_state: in STD_LOGIC_VECTOR (3 downto 0); next_state: in STD_LOGIC_VECTOR (3 downto 0); clk: in STD_LOGIC; down_enable: in STD_LOGIC; up_enable: in STD_LOGIC; koniec licznika updown; architektura Zachowanie updown_counter to begin flop: process(next_state, clk, up_enable, down_enable, previous_state) begin if (rising_edge(clk)) then if (up_enable = '1' i not(next_state="0000")), then present_state <= następny_stan; elsif (down_enable = '1' i not(previous_state= "1111")), then present_state <= previous_state; koniec jeśli; koniec jeśli; koniec procesu flop; koniec Behawioralny;
Potrzebujemy również zegara dla każdego wejścia, które ma się zatrzasnąć (gdy się podnosi), więc stworzyliśmy również dzielnik zegara, który określa, jak szybko można naciskać przyciski między poszczególnymi poziomami jasności. Ten dzielnik zegara pozwala nam prawidłowo wyświetlać odpowiedni poziom na siedmiosegmentowym wyświetlaczu i wytwarzać odpowiedni poziom intensywności dla każdego poziomu.
jednostka counter_clkDiv to
Port (clk: in std_logic; sclk: out std_logic); koniec counter_clkDiv; architektura my_clk_div z counter_clkDiv jest stała max_count: integer:= (10000000); sygnał tmp_clk: std_logic:= '0'; początek my_div: process (clk, tmp_clk) zmienna div_cnt: integer:= 0; rozpocząć if (rising_edge(clk)) then if (div_cnt >= MAX_COUNT) then tmp_clk <= nie tmp_clk; div_cnt:= 0; w przeciwnym razie div_cnt:= div_cnt + 1; koniec jeśli; koniec jeśli; sclk <= tmp_clk; zakończ proces my_div; zakończ mój_clk_div;
Krok 2: Utwórz dzielnik zegara LED
Na tym etapie tworzymy dzielnik zegara dla żarówki LED, aby określić 16 różnych poziomów intensywności. Gdy 0 jest wyłączone do 15 wyświetlającego maksymalną jasność, dzielnik zegara zwiększa każde naciśnięcie przycisku o ustawiony przez nas poziom jasności. Każdy rosnący poziom oznaczał wzrost zegara dla żarówki LED. Pamiętając, że jasność nie wzrasta liniowo, podkręciliśmy zegar do najwyższego możliwego poziomu i odpowiednio zmniejszyliśmy nasze zegary.
Uwaga: używamy niebieskiej diody LED. Użycie innego koloru (np. czerwonego) będzie wymagało zupełnie innych zegarów; średnie ustawienie jasności dla koloru niebieskiego może już być maksymalną jasnością dla koloru czerwonego. Dzieje się tak, ponieważ różne długości fal światła będą wymagały różnych ilości energii, przy czym chłodniejsze kolory, takie jak fioletowy i niebieski, wymagają więcej energii, podczas gdy cieplejsze kolory, takie jak czerwony i pomarańczowy, wymagają mniej energii.
podmiot led_clkDiv to Port (present_state: w STD_LOGIC_VECTOR (3 do 0); clk: w STD_LOGIC; led_clk: out STD_LOGIC); koniec led_clkDiv; architektura Zachowanie led_clkDiv to sygnał tmp_clk: std_logic:= '0'; współdzielona zmienna max_count: integer;begin count_stuff: process (present_state) begin case present_state jest gdy "0000" => max_count:= 0; kiedy "0001" => max_count:= 2; kiedy "0010" => max_count:= 4; kiedy "0011" => max_count:= 6; kiedy "0100" => max_count:= 8; kiedy "0101" => max_count:= 10; kiedy "0110" => max_count:= 12; kiedy "0111" => max_count:= 14; kiedy "1000" => max_count:= 16; kiedy "1001" => max_count:= 25; gdy "1010" => max_count:= 50; gdy "1011" => max_count:= 100; kiedy "1100" => max_count:= 150; kiedy "1101" => max_count:= 200; gdy "1110" => max_count:= 250; kiedy "1111" => max_count:= 300; sprawa końcowa; koniec procesu count_stuff; my_div: process (clk, tmp_clk, present_state) zmienna div_cnt: integer:= 0; rozpocznij if (rising_edge(clk)) then if (div_cnt >= max_count) then tmp_clk <= nie tmp_clk; div_cnt:= 0; w przeciwnym razie div_cnt:= div_cnt + 1; koniec jeśli; koniec jeśli; led_clk <= tmp_clk; zakończ proces my_div; koniec Behawioralny;
Krok 3: Tworzenie kontrolera LED
Teraz, gdy zaszliśmy tak daleko, nadszedł czas, aby w końcu połączyć wszystkie komponenty, które do tej pory stworzyliśmy w pliku LED Controller.
Podsumowując, użyte komponenty są następujące:
- Licznik wejściowy (licznik updown_counter)
- Dzielnik zegara (counter_clkDiv)
- Dzielnik zegara LED (led_clkDiv)
- Siedmiosegmentowy sterownik ekranu (sseg_dec) (załączony plik)
Siedmiosegmentowy sterownik wyświetlacza nie był wcześniej omawiany, ponieważ faktycznie pożyczyliśmy plik VHDL od dr. Bryana Mealy'ego ze względu na jego długi i skomplikowany kod. Zasadniczo kieruje nasze wejścia przycisków do siedmiosegmentowego wyświetlacza na płycie Basys 3, abyśmy wiedzieli, na jakim poziomie jasności.
Idąc dalej, kontroler LED wykorzystuje klapki, aby zwiększyć lub zmniejszyć liczbę, która jednocześnie kontroluje zarówno wyświetlacz siedmiosegmentowy, jak i poziom jasności żarówki LED.
licznik jednostek to Port (clk: w STD_LOGIC; up_enable: w STD_LOGIC; down_enable: w STD_LOGIC; SEGMENTS: out STD_LOGIC_VECTOR (7 do 0); DISP_EN: out STD_LOGIC_VECTOR (3 do 0); led_clk: out STD_LOGIC); licznik końca; architektura Zachowanie licznika to komponent updown_counter to Port (present_state: out STD_LOGIC_VECTOR (3 downto 0); previous_state: in STD_LOGIC_VECTOR (3 downto 0); next_state: in STD_LOGIC_VECTOR (3 downto 0); clk: in STD_LOGIC; down_LOGIC:in up_enable: w STD_LOGIC); składnik końcowy updown_counter; komponent counter_clkDiv to Port (clk: in std_logic; sclk: out std_logic); komponent końcowy counter_clkDiv; komponent sseg_dec to Port (ALU_VAL: w std_logic_vector(7 do 0); SIGN: w std_logic; VALID: w std_logic; CLK: w std_logic; DISP_EN: na std_logic_vector(3 do 0); SEGMENTS(7 na std_logic); składnik końcowy sseg_dec; komponent led_clkDiv to Port (present_state: w STD_LOGIC_VECTOR (3 do 0); clk: w STD_LOGIC; led_clk: out STD_LOGIC); komponent końcowy led_clkDiv; sygnał stan_obecny: STD_LOGIC_VECTOR (3 do 0):= "0000"; sygnał next_state: STD_LOGIC_VECTOR (3 do 0):= "0000"; sygnał poprzedni_stan: STD_LOGIC_VECTOR (3 do 0):= "0000"; sygnał Alu_Val: STD_LOGIC_VECTOR (7 do 0); sygnał sclk: STD_LOGIC; rozpocznij Alu_Val(7 do 4) <= "0000"; Alu_Val(3 do 0) <= stan_obecny; next_state(0) <= not(present_state(0)); następny_stan(1) <= obecny_stan(0) xor obecny_stan(1); next_state(2) <= (present_state(0) i present_state(1)) xor present_state(2); następny_stan(3) <= (stan_obecny(0) i stan_obecny(1) i stan_obecny(2)) xor stan_obecny(3); poprzedni_stan(0) <= not(obecny_stan(0)); poprzedni_stan(1) <= obecny_stan(0) xnor obecny_stan(1); poprzedni_stan(2) <= (stan_obecny(0) ani stan_obecny(1)) xor stan_obecny(2); poprzedni_stan(3) sclk, następny_stan => następny_stan, poprzedni_stan => poprzedni_stan, up_enable => up_enable, down_enable => down_enable, obecny_stan => obecny_stan); wyświetlanie: mapa portów sseg_dec(ALU_VAL => Alu_Val, SIGN => '0', VALID => '1', CLK => clk, DISP_EN => DISP_EN, SEGMENTY => SEGMENTY); led_div: mapa portów led_clkDiv(clk => clk, present_state => present_state, led_clk => led_clk); clk_div: mapa portów counter_clkDiv(clk => clk, sclk => sclk); koniec Behawioralny;
Krok 4: Ustalenie ograniczeń i montaż
Ograniczenia
Aby poprawnie skonfigurować i zaprogramować płytę Basys 3, musimy najpierw skonfigurować nasz plik z ograniczeniami, który jest dołączony do tego kroku. Zmieniono następujące ustawienia:
guziki
- Zmieniono T18 na „up_enable” (zwiększenie jasności)
- Zmieniono U17 na „down_enable” (zmniejszenie jasności)
7-segmentowy wyświetlacz
- W7, W6, U8, V8, U5, V5, U7, V7 reprezentują każdy segment jednego wyświetlacza
- U2, U4, V4, W4 reprezentują każdą wyświetlaną anodę (tylko 2 są aktywne, ponieważ nasza najwyższa liczba to 15)
PMOD nagłówek JC
JC7 to miejsce, w którym podłączamy jeden z przewodów żarówki LED, a drugi przewód prowadzi do MASY
Po skonfigurowaniu tego wszystkiego, wszystko, co musisz zrobić, to wygenerować strumień bitów (z dowolnym oprogramowaniem, którego używasz, np. Vivado), zaprogramować swoją płytę i bum! Masz deskę do pracy.
Uwaga: mapowanie pinów można znaleźć w arkuszu danych Basys 3 tutaj.
montaż
Krok 5: Korzystanie ze ściemniacza
Jeśli wszystko pójdzie dobrze, powinieneś mieć w pełni działający system ściemniacza. Podsumowując, naciśnięcie górnego przycisku zwiększy jasność (aż do 15), a naciśnięcie przycisku w dół zmniejszy jasność (aż do 0). Mam nadzieję, że wszystko pójdzie dobrze dla twojego teraz zrelaksowanego wzroku!
Zalecana:
Jak zaprogramować PIC MCU za pomocą programatora PICkit za pomocą płytki do krojenia chleba: 3 kroki
Jak zaprogramować PIC MCU za pomocą programatora PICkit za pomocą płytki do krojenia chleba: Nie potrzebujesz drogich i wyrafinowanych narzędzi do zabawy z mikrokontrolerami PIC (lub dowolnymi innymi). Wszystko czego potrzebujesz to płytka prototypowa, na której testujesz swój obwód i programowanie. Oczywiście potrzebny jest jakiś programista i IDE. W tej instrukcji
Jak zrobić falownik za pomocą płytki wzmacniacza: 7 kroków
Jak zrobić falownik za pomocą płytki wzmacniacza: Cześć przyjacielu, Dzisiaj zamierzam zrobić falownik za pomocą płytki wzmacniacza. Ten falownik możesz łatwo zrobić w swoim domu. To obwód jest bardzo łatwy. Zacznijmy
DIY ściemnialna lampa powodziowa LED: 5 kroków (ze zdjęciami)
DIY Dimmable LED Flood Light: Reflektory czasami przestają działać z czasem, mimo że obecnie używają diod LED. Może to wynikać z wielu przyczyn, takich jak przegrzanie lub usterka sterownika LED lub usterka w procesie produkcyjnym. Większość z nas wyrzuca prod
Jak zaprogramować płytkę AVR za pomocą płytki Arduino: 6 kroków
Jak zaprogramować płytkę AVR za pomocą płytki Arduino: Czy masz układającą się płytkę mikrokontrolera AVR? Czy trudno go zaprogramować? Cóż, jesteś we właściwym miejscu. Tutaj pokażę, jak zaprogramować płytkę mikrokontrolera Atmega8a za pomocą płytki Arduino Uno jako programatora. Więc bez dalszych
Polecenia AT dla modułu Bluetooth (HC-05 W / EN Pin i BUTTON) za pomocą płytki Arduino!: 5 kroków
Polecenia AT dla modułu Bluetooth (HC-05 W / EN Pin i BUTTON) Korzystanie z płyty Arduino!: Jay Amiel AjocGensan PH Ta instrukcja pomoże ci rozpocząć korzystanie z modułu bluetooth HC05. Pod koniec tej instrukcji nauczysz się o wysyłaniu komend AT do modułu w celu jego skonfigurowania/zmodyfikowania (nazwa, hasło, prędkość transmisji