Daftar Isi:
- Langkah 1: Buat Penghitung Masukan
- Langkah 2: Buat Pembagi Jam LED
- Langkah 3: Membuat Pengontrol LED
- Langkah 4: Menetapkan Batasan dan Perakitan
- Langkah 5: Menggunakan Sakelar Dimmer Anda
Video: LED Dimmable Menggunakan Basys 3 Board: 5 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:55
Dalam panduan ini kita akan membangun dan mengontrol sistem peredupan LED eksternal. Dengan tombol yang tersedia, pengguna dapat meredupkan bohlam LED ke kecerahan yang diinginkan. Sistem menggunakan papan Basys 3, dan terhubung ke papan tempat memotong roti yang berisi resistor dan bohlam LED. Menekan tombol "naik" yang ditentukan akan meningkatkan kecerahan, dan menekan tombol "turun" akan mengurangi kecerahan hingga nol. Ini tidak hanya mencegah pengguna dibutakan oleh bola lampu yang terang benderang, tetapi juga menghemat energi!
Langkah 1: Buat Penghitung Masukan
Untuk langkah ini kami membuat komponen yang menentukan tingkat kecerahan (melalui jam) dengan menggunakan dua sakelar: satu untuk naik dan satu untuk turun. Menggunakan VHDL, kami menghasilkan penghitung melalui penggunaan D flip-flop. Menekan tombol "naik" akan mendorong keadaan berikutnya ke keadaan sekarang, menghasilkan tampilan tujuh segmen dan bohlam LED.
entitas updown_counter adalah
Port (keadaan_sekarang: keluar STD_LOGIC_VECTOR (3 turun ke 0); status_sebelumnya: di STD_LOGIC_VECTOR (3 turun ke 0); keadaan_berikutnya: di STD_LOGIC_VECTOR (3 turun ke 0); clk: di STD_LOGIC; down_enable: di STD_LOGIC; up_enable: di STD_LOGIC); akhiri updown_counter; arsitektur Perilaku updown_counter adalah mulai flop: proses(next_state, clk, up_enable, down_enable, before_state) dimulai jika (rising_edge(clk)) lalu if (up_enable = '1' dan not(next_state="0000")) then present_state <= keadaan_berikutnya; elsif (down_enable = '1' dan not(previous_state= "1111")) lalu present_state <= status_sebelumnya; berakhir jika; berakhir jika; kegagalan proses akhir; akhir Perilaku;
Kami juga membutuhkan jam untuk setiap input yang akan dikunci (saat naik), jadi kami juga membuat pembagi jam yang menentukan seberapa cepat tombol dapat ditekan di antara setiap tingkat kecerahan. Pembagi jam ini memungkinkan kita untuk menampilkan tingkat yang tepat pada layar tujuh segmen dengan benar dan menghasilkan tingkat intensitas yang tepat untuk setiap tingkat.
entitas counter_clkDiv adalah
Port (clk: masuk std_logic; sclk: keluar std_logic); akhir counter_clkDiv; arsitektur my_clk_div dari counter_clkDiv adalah konstan max_count: integer:= (10000000); sinyal tmp_clk: std_logic:= '0'; mulai my_div: proses (clk, tmp_clk) variabel div_cnt: integer:= 0; mulai if (rising_edge(clk)) lalu if (div_cnt >= MAX_COUNT) maka tmp_clk <= bukan tmp_clk; div_cnt:= 0; lain div_cnt:= div_cnt + 1; berakhir jika; berakhir jika; sclk <= tmp_clk; akhiri proses my_div; akhiri my_clk_div;
Langkah 2: Buat Pembagi Jam LED
Untuk langkah ini kami membuat pembagi jam untuk bohlam LED untuk menentukan 16 tingkat intensitas yang berbeda. Dengan 0 hingga 15 menampilkan kecerahan maksimum, pembagi jam menambah setiap penekanan tombol dengan tingkat kecerahan yang kami tetapkan. Setiap peningkatan level berarti peningkatan jam untuk bohlam LED. Mengingat bahwa kecerahan tidak meningkat secara linier, kami memutar jam ke tingkat tertinggi yang bisa dicapai dan menurunkan jam kami sesuai dengan itu.
Catatan: kami menggunakan LED biru. Menggunakan warna yang berbeda (seperti merah) akan membutuhkan jam yang sedikit berbeda sama sekali; pengaturan kecerahan sedang untuk biru sudah bisa menjadi kecerahan maksimal untuk merah. Ini terjadi karena panjang gelombang cahaya yang berbeda akan membutuhkan jumlah energi yang berbeda, dengan warna yang lebih dingin seperti ungu dan biru membutuhkan lebih banyak energi, sedangkan warna yang lebih hangat seperti merah dan oranye membutuhkan lebih sedikit energi.
entitas led_clkDiv adalah Port (present_state: di STD_LOGIC_VECTOR (3 turun ke 0); clk: di STD_LOGIC; led_clk: keluar STD_LOGIC); akhir led_clkDiv; arsitektur Perilaku led_clkDiv adalah sinyal tmp_clk: std_logic:= '0'; variabel bersama max_count: integer;begin count_stuff: proses (present_state) begin case present_state adalah ketika "0000" => max_count:= 0; ketika "0001" => max_count:= 2; ketika "0010" => max_count:= 4; ketika "0011" => max_count:= 6; ketika "0100" => max_count:= 8; ketika "0101" => max_count:= 10; ketika "0110" => max_count:= 12; ketika "0111" => max_count:= 14; ketika "1000" => max_count:= 16; ketika "1001" => max_count:= 25; ketika "1010" => max_count:= 50; ketika "1011" => max_count:= 100; ketika "1100" => max_count:= 150; ketika "1101" => max_count:= 200; ketika "1110" => max_count:= 250; ketika "1111" => max_count:= 300; kasus akhir; akhiri proses count_stuff; my_div: proses (clk, tmp_clk, present_state) variabel div_cnt: integer:= 0; mulai if (rising_edge(clk)) lalu if (div_cnt >= max_count) maka tmp_clk <= bukan tmp_clk; div_cnt:= 0; lain div_cnt:= div_cnt + 1; berakhir jika; berakhir jika; led_clk <= tmp_clk; akhiri proses my_div; akhir Perilaku;
Langkah 3: Membuat Pengontrol LED
Sekarang kita telah sampai sejauh ini, saatnya untuk menggabungkan semua komponen yang telah kita buat sejauh ini ke dalam file LED Controller.
Untuk meringkas, komponen yang digunakan adalah sebagai berikut:
- Penghitung masukan (updown_counter)
- Pembagi jam (counter_clkDiv)
- Pembagi jam LED (led_clkDiv)
- Driver tampilan tujuh segmen (sseg_dec) (file terlampir)
Driver tampilan tujuh segmen sebenarnya tidak dibahas sebelumnya karena kami sebenarnya meminjam file VHDL dari Dr. Bryan Mealy karena kodenya yang panjang dan rumit. Apa yang pada dasarnya dilakukan adalah mengarahkan input tombol kami ke tampilan tujuh segmen pada papan Basys 3 sehingga kami tahu tingkat kecerahannya.
Ke depan, Kontroler LED menggunakan sandal jepit untuk menambah atau mengurangi hitungan yang mengontrol tampilan tujuh segmen dan tingkat kecerahan bohlam LED secara bersamaan.
penghitung entitas adalah Port (clk: di STD_LOGIC; up_enable: di STD_LOGIC; down_enable: di STD_LOGIC; SEGMENTS: keluar STD_LOGIC_VECTOR (7 turun ke 0); DISP_EN: keluar STD_LOGIC_VECTOR (3 turun ke 0); led_clk: keluar STD_LOGIC); penghitung akhir; arsitektur Perilaku counter adalah komponen updown_counter adalah Port (present_state: keluar STD_LOGIC_VECTOR (3 turun ke 0); sebelumnya_state: di STD_LOGIC_VECTOR (3 turun ke 0); next_state: di STD_LOGIC_VECTOR (3 turun ke 0); clk: di STD_LOGIC; down_enable: di STD_LOGIC; up_enable: di STD_LOGIC); komponen akhir updown_counter; komponen counter_clkDiv adalah Port (clk: in std_logic; sclk: out std_logic); komponen akhir counter_clkDiv; komponen sseg_dec adalah Port (ALU_VAL: di std_logic_vector(7 turun ke 0); TANDA: di std_logic; VALID: di std_logic; CLK: di std_logic; DISP_EN: keluar std_logic_vector(3 turun ke 0); SEGMEN: keluar std_logic_vector(7 downto 0)); komponen akhir sseg_dec; komponen led_clkDiv adalah Port (present_state: di STD_LOGIC_VECTOR (3 turun ke 0); clk: di STD_LOGIC; led_clk: keluar STD_LOGIC); komponen akhir led_clkDiv; sinyal present_state: STD_LOGIC_VECTOR (3 turun ke 0):= "0000"; sinyal next_state: STD_LOGIC_VECTOR (3 turun ke 0):= "0000"; sinyal status_sebelumnya: STD_LOGIC_VECTOR (3 turun ke 0):= "0000"; sinyal Alu_Val: STD_LOGIC_VECTOR (7 turun ke 0); sclk sinyal: STD_LOGIC; mulai Alu_Val(7 turun ke 4) <= "0000"; Alu_Val(3 turun ke 0) <= present_state; next_state(0) <= tidak(present_state(0)); next_state(1) <= present_state(0) xor present_state(1); next_state(2) <= (present_state(0) dan present_state(1)) xor present_state(2); next_state(3) <= (present_state(0) dan present_state(1) dan present_state(2)) xor present_state(3); keadaan_sebelumnya(0) <= tidak(keadaan_sekarang(0)); keadaan_sebelumnya(1) <= keadaan_keadaan(0) xnor keadaan_keadaan(1); keadaan_sebelumnya(2) <= (keadaan_sekarang(0) atau keadaan_keadaan(1)) xor keadaan_keadaan(2); status_sebelumnya(3) sclk, status_berikutnya => status_berikutnya, status_sebelumnya => status_sebelumnya, up_enable => up_enable, down_enable => down_enable, present_state => present_state); tampilan: peta port sseg_dec(ALU_VAL => Alu_Val, SIGN => '0', VALID => '1', CLK => clk, DISP_EN => DISP_EN, SEGMENTS => SEGMENTS); led_div: led_clkDiv port map(clk => clk, present_state => present_state, led_clk => led_clk); clk_div: counter_clkDiv peta port(clk => clk, sclk => sclk); akhir Perilaku;
Langkah 4: Menetapkan Batasan dan Perakitan
Kendala
Untuk mengatur dan memprogram papan Basys 3 dengan benar, pertama-tama kita harus mengatur file batasan kita yang dilampirkan pada langkah ini. Pengaturan berikut telah disesuaikan:
Tombol
- Mengubah T18 menjadi "up_enable" (meningkatkan kecerahan)
- Mengubah U17 menjadi "down_enable" (mengurangi kecerahan)
tampilan 7 segmen
- W7, W6, U8, V8, U5, V5, U7, V7 mewakili setiap segmen dari satu tampilan
- U2, U4, V4, W4 mewakili setiap anoda yang ditampilkan (hanya 2 yang aktif karena angka tertinggi kami adalah 15)
Header PMOD JC
JC7 adalah tempat kami menghubungkan salah satu kabel bohlam LED, dan kabel lainnya mengarah ke GROUND
Setelah mengatur ini semua, yang harus Anda lakukan adalah menghasilkan bitstream Anda (dengan perangkat lunak apa pun yang Anda gunakan yaitu Vivado), memprogram papan Anda, dan boom! Anda mendapatkan papan kerja.
Catatan: Pemetaan pin dapat ditemukan di Basys 3 Datasheet di sini.
perakitan
Langkah 5: Menggunakan Sakelar Dimmer Anda
Jika semuanya berjalan dengan baik, Anda harus memiliki sistem peredup yang berfungsi penuh. Singkatnya, menekan tombol atas akan meningkatkan kecerahan Anda (sampai 15), dan menekan tombol bawah akan mengurangi kecerahan Anda (sampai 0). Semoga semuanya berjalan dengan baik untuk penglihatan Anda yang sekarang santai!
Direkomendasikan:
Lightbox LED Dimmable: 11 Langkah
Lightbox LED Dimmable: Bangun lightbox LED 18W Anda untuk melawan blues musim dingin. Lightbox ini tersebar dan dapat diredupkan menggunakan PWM. Jika Anda memiliki pengatur waktu lampu, Anda dapat menggunakannya sebagai alternatif dari jam alarm
Jam Alarm Basys 3: 9 Langkah
Jam Alarm Basys 3: Proyek kami membuat jam alarm menggunakan papan FPGA Basys 3, Arduino, dan papan driver speaker. Pengguna dapat memasukkan waktu saat ini ke papan menggunakan 11 sakelar input pada Basys 3 dan mengunci nilainya menggunakan tombol tengah pada
Lampu Sorot LED Dimmable DIY: 5 Langkah (dengan Gambar)
Lampu Sorot LED Dimmable DIY: Lampu sorot terkadang cenderung berhenti bekerja seiring waktu meskipun saat ini menggunakan LED. Ini bisa disebabkan oleh banyak alasan seperti panas berlebih atau kesalahan pada driver LED atau kesalahan dalam proses pembuatan. Sebagian besar dari kita akhirnya membuang produk
Buat Pencahayaan Lokakarya LED Dimmable Anda Sendiri!: 11 Langkah (dengan Gambar)
Buat Pencahayaan Lokakarya LED Dimmable Anda Sendiri!: Dalam Instruksi ini, saya akan menunjukkan cara membuat pencahayaan LED Anda sendiri yang sangat efisien untuk bengkel Anda! Kami, Pembuat, Tidak pernah memiliki penerangan yang cukup di meja kerja kami, Jadi kami perlu membeli lampu. Tapi sebagai pembuat, Kami tidak membeli barang (Dan ditipu…)
Basys 3 Morse Decoder: 11 Langkah
Basys 3 Morse Decoder: Ini adalah proyek untuk kelas perguruan tinggi. Proyek ini ditulis dalam VHDL dalam sebuah program yang disebut Vivado. Tugas untuk membuat semua modul yang diperlukan untuk mengimplementasikan Decoder Morse menggunakan papan Basys 3. Papan tersebut digunakan untuk mengambil kode morse dari