![Dimysable LED Basys 3 taxtasi yordamida: 5 qadam Dimysable LED Basys 3 taxtasi yordamida: 5 qadam](https://i.howwhatproduce.com/images/011/image-31384-j.webp)
Mundarija:
2025 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2025-01-23 15:14
![Basys 3 taxtasi yordamida dimlangan LED Basys 3 taxtasi yordamida dimlangan LED](https://i.howwhatproduce.com/images/011/image-31384-1-j.webp)
Ushbu qo'llanmada biz tashqi LEDni o'chirish tizimini quramiz va boshqaramiz. Mavjud tugmalar yordamida foydalanuvchi LED lampochkasini xohlagan yorqinlikka tushirishi mumkin. Tizimda Basys 3 taxtasi ishlatiladi va u rezistor va LED lampochkasi bo'lgan non paneliga ulangan. Belgilangan "yuqoriga" tugmachasini bosish yorqinlikni oshiradi va "pastga" tugmasini bosish yorqinlikni nolgacha kamaytiradi. Bu nafaqat foydalanuvchini quyosh nurli lampalar bilan ko'r bo'lishining oldini oladi, balki energiyani ham tejaydi!
1 -qadam: Kirish hisoblagichini yarating
Ushbu qadam uchun biz ikkita kalit yordamida yorqinlik darajasini aniqlaydigan komponentni (soat orqali) yaratamiz: birini oshirish va kamaytirish uchun. VHDL-dan foydalanib, biz D flip-flop yordamida hisoblagichni ishlab chiqardik. "Yuqoriga" tugmachasini bosish keyingi holatni hozirgi holatga o'tkazadi, etti segmentli displey va LED lampochkasini chiqaradi.
varaqni updown_counter
Port (hozirgi holat: STD_LOGIC_VECTOR (3 pastga 0); oldingi_ holat: STD_LOGIC_VECTOR da (3 pastga 0); keyingi_shtat: STD_LOGIC_VECTOR da (3 pastga 0 ga); clk: STD_LOGICda; pastga_enable: STD_LOGIC da; updown_counter -ni tugatish; Arxitektura updown_counter -ning xulq -atvori boshlanadi: jarayon (next_state, clk, up_enable, down_enable, previous_state) if if (ko'tarilish_kiri (clk)) keyin agar (up_enable = '1' emas, balki (next_state = "0000")) keyin present_state <= next_state; elsif (down_enable = '1' va emas (avvalgi_shtat = "1111")) keyin present_state <= oldingi_ holat; tugatish, agar; tugatish, agar; jarayonning tugashi; xulq -atvorni tugatish;
Bizga har bir kirishni ushlab turish uchun soat kerak (u ko'tarilganda), shuning uchun biz har bir yorqinlik darajasi o'rtasida tugmachalarni qanchalik tez bosilishini aniqlaydigan soat ajratgichni yaratdik. Bu soatni ajratuvchi bizga yetti segmentli displeyda to'g'ri darajani to'g'ri ko'rsatish va har bir daraja uchun to'g'ri intensivlik darajasini ishlab chiqarish imkonini beradi.
counter_clkDiv obyekti
Port (clk: std_logic; sclk: out std_logic); counter_clkDiv tugatish; counter_clkDiv ning my_clk_div arxitekturasi doimiy max_count: integer: = (10000000); signal tmp_clk: std_logic: = '0'; my_div: process (clk, tmp_clk) o'zgarmaydigan div_cnt: integer: = 0; boshlang if (ko'tarilish_ qirrasi (clk)) keyin, agar (div_cnt> = MAX_COUNT), keyin tmp_clk <= tmp_clk emas; div_cnt: = 0; boshqa div_cnt: = div_cnt + 1; tugatish, agar; tugatish, agar; sclk <= tmp_clk; my_div jarayonini tugatish; my_clk_div tugatish;
2 -qadam: LED soat taqsimlagichini yarating
Ushbu qadam uchun biz 16 xil intensivlik darajasini aniqlash uchun LED lampochkasi uchun soat ajratgichini yaratamiz. 0 dan 15 gacha maksimal yorqinlikni ko'rsatadigan bo'lsak, soat taqsimlagichi har bir tugmani bosish vaqtini biz yorqinlik darajasiga ko'taradi. Har bir o'sish darajasi LED lampochkasi uchun soatning ko'payishini anglatardi. Yorqinlik chiziqli ravishda oshmasligini eslab, biz soatni maksimal darajaga ko'tardik va shunga mos ravishda soatimizni kamaytirdik.
Eslatma: biz ko'k LEDni ishlatamiz. Boshqa rangni (qizil kabi) ishlatish uchun biroz boshqacha soatlar kerak bo'ladi; ko'k uchun o'rtacha yorqinlik sozlamasi qizil uchun maksimal yorqinlik bo'lishi mumkin. Buning sababi shundaki, har xil to'lqin uzunlikdagi yorug'lik har xil miqdordagi energiyani talab qiladi, binafsha va ko'k kabi sovuq ranglar ko'proq energiya talab qiladi, qizil va to'q sariq kabi issiq ranglar esa kam energiya talab qiladi.
led_clkDiv - bu Port (hozirgi holat: STD_LOGIC_VECTOR da (3 dan 0 gacha); clk: STD_LOGIC da; led_clk: STD_LOGICdan tashqarida); led_clkDiv tugatish; led_clkDiv xatti -harakati signal tmp_clk: std_logic: = '0'; umumiy o'zgaruvchi max_count: integer; begin count_stuff: process (present_state) start case case_state "0000" => max_count: = 0; qachon "0001" => max_count: = 2; qachon "0010" => max_count: = 4; qachon "0011" => max_count: = 6; qachon "0100" => max_count: = 8; qachon "0101" => max_count: = 10; qachon "0110" => max_count: = 12; qachon "0111" => max_count: = 14; qachon "1000" => max_count: = 16; qachon "1001" => max_count: = 25; qachon "1010" => max_count: = 50; qachon "1011" => max_count: = 100; qachon "1100" => max_count: = 150; qachon "1101" => max_count: = 200; qachon "1110" => max_count: = 250; qachon "1111" => max_count: = 300; oxirgi holat; jarayonlar sonini tugatish; my_div: jarayon (clk, tmp_clk, present_state) o'zgaruvchisi div_cnt: integer: = 0; boshlang if (ko'tarilish_kiri (clk)) keyin agar (div_cnt> = max_count) keyin tmp_clk <= tmp_clk emas; div_cnt: = 0; boshqa div_cnt: = div_cnt + 1; tugatish, agar; tugatish, agar; led_clk <= tmp_clk; my_div jarayonini tugatish; xulq -atvorni tugatish;
3 -qadam: LED boshqaruvini yaratish
Endi biz hozirgacha shu yo'lni bosib o'tdik, oxirigacha biz yaratgan barcha komponentlarni LED Controller fayliga birlashtirish vaqti keldi.
Xulosa qilib aytganda, quyidagi komponentlar ishlatiladi:
- Kirish hisoblagichi (updown_counter)
- Soat ajratuvchi (counter_clkDiv)
- LED soat taqsimlagichi (led_clkDiv)
- Etti segmentli displey drayveri (sseg_dec) (biriktirilgan fayl)
Etti segmentli displey drayveri aslida ilgari muhokama qilinmagan, chunki biz VHDL faylini doktor Bryan Mealydan uzoq va murakkab kod tufayli olganmiz. Asosan, biz tugmalarni kiritishini Basys 3 doskasidagi etti segmentli displeyga o'tkazamiz, shunda biz yorqinlik darajasini bilamiz.
Oldinga siljish paytida, LED tekshirgichi bir vaqtning o'zida etti segmentli displeyni ham, LED lampochkaning yorqinligini ham boshqaradigan sonlarni ko'paytirish yoki kamaytirish uchun flip floplardan foydalanadi.
shaxs hisoblagichi Port (clk: STD_LOGIC; up_enable: STD_LOGIC da; down_enable: in STD_LOGIC; SEGMENTS: out STD_LOGIC_VECTOR (7 ga 0 ga); DISP_EN: STD_LOGIC_VECTOR (3 pastga 0); led_LOG: tashqariga STD_LOGIC; oxirgi taymer; arxitektura hisoblagichning xulq -atvori komponent hisoblanadi updown_counter - Port (hozirgi holat: STD_LOGIC_VECTOR (3 pastga 0); oldingi_ holat: STD_LOGIC_VECTOR da (3 pastga 0); keyingi_ holat: STD_LOGIC_VECTOR da (3 pastga 0); clk: STD_LOGICda; STD_LOGIC da up_enable: STD_LOGIC da); oxirgi komponenti updown_counter; counter_clkDiv komponenti Port (clk: std_logic; sclk: out std_logic); counter_clkDiv komponentining oxiri; sseg_dec komponenti Port (ALU_VAL: std_logic_vector da (7 pastga 0); SIGN: std_logic da; VALID: std_logic da; CLK: std_logic da; DISP_EN: std_logic_vector (3 pastga 0); SEGMENTS: tashqariga std_logic); oxirgi komponent sseg_dec; led_clkDiv komponenti bu Port (hozirgi holat: STD_LOGIC_VECTOR da (3 dan 0 gacha); clk: STD_LOGIC da; led_clk: STD_LOGIC tashqarisida); tugatish komponenti led_clkDiv; signal present_state: STD_LOGIC_VECTOR (3 pastga 0 ga): = "0000"; signal next_state: STD_LOGIC_VECTOR (3 pastga 0 ga): = "0000"; signal oldingi_stat: STD_LOGIC_VECTOR (3 pastga 0 ga): = "0000"; signal Alu_Val: STD_LOGIC_VECTOR (7 dan 0 gacha); signal sklk: STD_LOGIC; boshlash Alu_Val (7 dan 4 gacha) <= "0000"; Alu_Val (3 pastdan 0gacha) <= hozirgi holat; next_state (0) <= emas (hozirgi_shtat (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) and present_state (1) and present_state (2)) xor present_state (3); oldingi_shtat (0) <= emas (hozirgi_shtat (0)); oldingi_shtat (1) <= hozirgi_shtat (0) xnor hozirgi_shtat (1); oldingi_shtat (2) <= (hozirgi_shtat (0) na hozirgi_shtat (1)) yoki xozirgi holat (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); ko'rsatish: sseg_dec port xaritasi (ALU_VAL => Alu_Val, SIGN => '0', VALID => '1', CLK => clk, DISP_EN => DISP_EN, SEGMENTS => SEGMENTS); led_div: led_clkDiv port xaritasi (clk => clk, present_state => present_state, led_clk => led_clk); clk_div: counter_clkDiv port xaritasi (clk => clk, sclk => sclk); xulq -atvorni tugatish;
4 -qadam: Cheklovlar va yig'ilishlarni o'rnatish
Cheklovlar
Basys 3 taxtasini to'g'ri sozlash va dasturlash uchun biz avval ushbu bosqichga biriktirilgan cheklovlar faylini sozlashimiz kerak. Quyidagi sozlamalar to'g'rilandi:
Tugmalar
- T18 "up_enable" ga o'zgartirildi (yorqinlikni oshirish)
- U17: "pastga tushirish" ga o'zgartirildi (yorqinlikni pasaytiring)
7 segmentli displey
- W7, W6, U8, V8, U5, V5, U7, V7 bitta displeyning har bir segmentini ifodalaydi.
- U2, U4, V4, W4 ko'rsatilgan har bir anodni ifodalaydi (faqat 2 ta faol, chunki bizning eng yuqori raqamimiz 15)
PMOD sarlavhasi QK
JC7 - bu erda biz LED lampochkaning simlaridan birini ulaymiz, boshqa sim esa GROUNDga olib keladi
Bularning barchasini o'rnatganingizdan so'ng, siz o'zingizning oqim oqimini (Vivado -dan foydalanadigan har qanday dasturiy ta'minot bilan) yaratish, taxtangizni dasturlash va bumni yaratishingiz kerak! Siz o'zingizga ishchi taxtani oldingiz.
Eslatma: PIN -kod xaritasini Basys 3 ma'lumotlar jadvalida topishingiz mumkin.
O'rnatish
5 -qadam: Dimmer kalitidan foydalanish
Agar hamma narsa yaxshi bo'lsa, sizda to'liq ishlaydigan dimmer tizimi bo'lishi kerak. Xulosa qilib aytadigan bo'lsak, yuqori tugmani bosish sizning yorqinligingizni oshiradi (15gacha), pastga tugmasini bosish sizning yorqinligingizni pasaytiradi (oxirigacha 0gacha). Umid qilamanki, hozir bo'shashgan ko'rish uchun hammasi yaxshi bo'ladi!
Tavsiya:
Raspberry Pi yordamida uyni avtomatlashtirish o'rni taxtasi: 7 qadam
![Raspberry Pi yordamida uyni avtomatlashtirish o'rni taxtasi: 7 qadam Raspberry Pi yordamida uyni avtomatlashtirish o'rni taxtasi: 7 qadam](https://i.howwhatproduce.com/images/004/image-10514-j.webp)
Raspberry Pi yordamida uy avtomatizatsiyasi: O'rnatilgan taxtadan foydalanadigan ko'pchilik odamlar qulaylikni xohlashadi, lekin maqbul narxlarda. Biz har kuni kechqurun quyosh botganda va ertasi kuni ertalab uylarni yoritib, chiroqlarni qayta o'chirishga yoki konditsionerni/ventilyatorni/isitgichni yoqish/o'chirishga dangasa bo'lamiz
PIR, 3D bosilgan qovoq va Troll Arduino -ga mos keladigan ovozli pranker/amaliy hazillar taxtasi yordamida Halloween qo'rqitish mashinasi: 5 qadam
![PIR, 3D bosilgan qovoq va Troll Arduino -ga mos keladigan ovozli pranker/amaliy hazillar taxtasi yordamida Halloween qo'rqitish mashinasi: 5 qadam PIR, 3D bosilgan qovoq va Troll Arduino -ga mos keladigan ovozli pranker/amaliy hazillar taxtasi yordamida Halloween qo'rqitish mashinasi: 5 qadam](https://i.howwhatproduce.com/images/005/image-13611-j.webp)
PIR, 3D bosilgan qovoq va Troll Arduino -ga mos keladigan ovozli pranker/amaliy hazil taxtasi yordamida Halloween qo'rqitish mashinasi: EngineeringShock Electronics kompaniyasi Patrik Tomas Mitchell tomonidan yaratilgan va yaqinda Kickstarter -da to'liq moliyalashtirilgan Troll taxtasi. Men bir necha hafta oldin o'z mukofotimni oldim va ba'zi misollarni yozishga va Arduino kutubxonasini qurishga yordam berdim
MXY taxtasi - kam byudjetli XY Plotter chizilgan robot taxtasi: 8 qadam (rasmlar bilan)
![MXY taxtasi - kam byudjetli XY Plotter chizilgan robot taxtasi: 8 qadam (rasmlar bilan) MXY taxtasi - kam byudjetli XY Plotter chizilgan robot taxtasi: 8 qadam (rasmlar bilan)](https://i.howwhatproduce.com/images/007/image-19275-j.webp)
MXY taxtasi - kam byudjetli XY Plotter chizish robotlari taxtasi: Mening maqsadim mXY taxtasini XY plotter chizish mashinasining byudjetini past qilish uchun loyihalash edi. Shunday qilib, men ushbu loyihani amalga oshirmoqchi bo'lganlar uchun osonlashtiradigan taxta yaratdim. Oldingi loyihada, 2 dona Nema17 pog'onali dvigatel ishlatilganda, bu taxta
VHDL va Basys3 taxtasi yordamida asosiy sekundomer: 9 qadam
![VHDL va Basys3 taxtasi yordamida asosiy sekundomer: 9 qadam VHDL va Basys3 taxtasi yordamida asosiy sekundomer: 9 qadam](https://i.howwhatproduce.com/images/005/image-13382-17-j.webp)
VHDL va Basys3 taxtasidan foydalanadigan asosiy sekundomer: Asosiy VHDL va Basys 3 taxtasi yordamida sekundomerni yaratish bo'yicha ko'rsatmaga xush kelibsiz. Siz bilan loyihamizni bo'lishishdan xursandmiz! Bu 2016 yilning kuzida, Cal Poly, SLOda o'tkaziladigan CPE 133 (Raqamli dizayn) kursining yakuniy loyihasi edi. Biz qurayotgan loyiha
P10 LED displeyli DMD yordamida ballar taxtasi loyihasi: 6 qadam (rasmlar bilan)
![P10 LED displeyli DMD yordamida ballar taxtasi loyihasi: 6 qadam (rasmlar bilan) P10 LED displeyli DMD yordamida ballar taxtasi loyihasi: 6 qadam (rasmlar bilan)](https://i.howwhatproduce.com/images/001/image-1392-81-j.webp)
P10 LED displeyli DMD yordamida ballar taxtasi loyihasi: Ko'pincha biz futbol stadionida uchrashamiz; ko'rsatkich paneli sifatida xizmat qiladigan ulkan LED taxtasi bor. Boshqa sport maydonlarida ham, biz ko'pincha LED displeyining skorbordini bilamiz. Mumkin bo'lmasa -da, bizni hali ham ushlab turadigan soha bor