Мазмұны:

Basys 3 тақтасын қолданатын күңгірт жарық диоды: 5 қадам
Basys 3 тақтасын қолданатын күңгірт жарық диоды: 5 қадам

Бейне: Basys 3 тақтасын қолданатын күңгірт жарық диоды: 5 қадам

Бейне: Basys 3 тақтасын қолданатын күңгірт жарық диоды: 5 қадам
Бейне: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Қараша
Anonim
Basys 3 тақтасын қолданатын светодиодты шам
Basys 3 тақтасын қолданатын светодиодты шам

Бұл нұсқаулықта біз сыртқы жарықдиодты күңгірттеу жүйесін құрамыз және басқарамыз. Қол жетімді түймелердің көмегімен пайдаланушы жарықдиодты шамды кез келген жарықтылыққа қарай өшіре алады. Жүйеде Basys 3 тақтасы қолданылады және ол резистор мен жарықдиодты шамы бар нан тақтасына қосылған. Белгіленген «жоғары» түймесін басу жарықтығын арттырады, ал «төмен» түймесін басу жарықтығын нөлге дейін төмендетеді. Бұл пайдаланушыны күн сәулесіндегі жарық шамдарымен соқыр болудан сақтап қана қоймайды, сонымен қатар энергияны үнемдейді!

1 -қадам: енгізу есептегішін жасаңыз

Бұл қадам үшін екі қосқыштың көмегімен жарықтылық деңгейін анықтайтын компонентті жасаймыз: біреуі ұлғайту үшін, екіншісі азайту үшін. VHDL көмегімен біз флип-флоптарды қолдану арқылы есептегішті шығардық. «Жоғары» батырмасын басу келесі күйді қазіргі күйге шығарады, жеті сегментті дисплей мен жарықдиодты шамды шығарады.

updown_counter нысан болып табылады

Порт (қазіргі күйі: STD_LOGIC_VECTOR (3 төмен 0); алдыңғы_стат: STD_LOGIC_VECTOR (3 төмен 0); келесі_стат: STD_LOGIC_VECTOR (3 төмен 0); clk: STD_LOGIC; төмендету: STD_LOGIC; жоғары_де updown_counter аяқтау; архитектура updown_counter -тің мінез -құлқы басталады flop: процесс (next_state, clk, up_enable, down_enable, previous_state) егер (көтерілу_шеті (clk)) басталса, онда (up_enable = '1' және емес (next_state = «0000»)) содан кейін present_state <= next_state; elsif (down_enable = '1' және емес (previous_state = «1111»)) содан кейін present_state <= алдыңғы_стат; егер аяқталса; егер аяқталса; процестің аяқталуы; мінез -құлықты тоқтату;

Бізге әр кірісті бекіту үшін сағат қажет (ол көтерілгенде), сондықтан біз әр жарықтық деңгейі арасында батырмаларды басу жылдамдығын анықтайтын сағат бөлгіш құрдық. Бұл сағат бөлгіш бізге жеті сегментті дисплейде дұрыс деңгейді дұрыс көрсетуге және әр деңгей үшін қажетті қарқындылық деңгейін шығаруға мүмкіндік береді.

counter_clkDiv нысаны болып табылады

Порт (clk: std_logic; sclk: out std_logic); counter_clkDiv соңы; counter_clkDiv -дің my_clk_div архитектурасы тұрақты max_count: integer: = (10000000); сигнал tmp_clk: std_logic: = '0'; my_div: process (clk, tmp_clk) айнымалысы div_cnt: integer: = 0; if if (көтерілу_шеті (clk)) содан кейін, егер (div_cnt> = MAX_COUNT), онда tmp_clk <= tmp_clk емес; div_cnt: = 0; басқа div_cnt: = div_cnt + 1; егер аяқталса; егер аяқталса; sclk <= tmp_clk; my_div процесін аяқтау; my_clk_div аяқтаңыз;

2 -қадам: жарықдиодты сағат бөлгішті жасаңыз

Бұл қадам үшін біз 16 түрлі қарқындылық деңгейін анықтау үшін жарықдиодты шамға арналған сағат бөлгіш құрамыз. 0 -ден 15 -ке дейін максималды жарықтықты көрсете отырып, сағат бөлгіш әр түймені жарықтылық деңгейіне орнатқанға көбейтеді. Әрбір жоғарылаған деңгей жарықдиодты шам үшін сағаттың ұлғаюын білдіреді. Жарықтық сызықты түрде өспейтінін есте сақтай отырып, біз сағатты мүмкіндігінше жоғары айналдырдық және сағаттарымызды сәйкесінше төмендеттік.

Ескерту: біз көк жарықдиодты қолданамыз. Басқа түсті (қызыл сияқты) пайдалану үшін сәл өзгеше сағаттар қажет болады; көк үшін орташа жарықтық параметрі қызыл үшін максималды жарықтық болуы мүмкін. Бұл әр түрлі толқын ұзындығы үшін әр түрлі энергияны қажет ететіндіктен болады, ал суық түстер күлгін және көк сияқты көп энергияны қажет етеді, ал қызыл және қызғылт сары сияқты жылы түстер аз энергияны қажет етеді.

led_clkDiv нысаны - бұл Port (қазіргі_стат: STD_LOGIC_VECTOR ішінде (3 төменге 0); clk: STD_LOGIC; led_clk: STD_LOGIC сыртында); led_clkDiv соңы; сәулет led_clkDiv мінез -құлқы - сигнал tmp_clk: std_logic: = '0'; ортақ айнымалы max_count: integer; begin count_stuff: process (present_state) start case case_state «0000» => max_count: = 0; қашан «0001» => max_count: = 2; қашан «0010» => max_count: = 4; қашан «0011» => max_count: = 6; қашан «0100» => max_count: = 8; қашан «0101» => max_count: = 10; қашан «0110» => max_count: = 12; қашан «0111» => max_count: = 14; қашан «1000» => max_count: = 16; қашан «1001» => max_count: = 25; қашан «1010» => max_count: = 50; қашан «1011» => max_count: = 100; қашан «1100» => max_count: = 150; қашан «1101» => max_count: = 200; қашан «1110» => max_count: = 250; қашан «1111» => max_count: = 300; соңғы жағдай; процесті аяқтау_өнімдер; my_div: процесс (clk, tmp_clk, present_state) айнымалы div_cnt: integer: = 0; бастаңыз if (көтерілу_шеті (clk)) содан кейін, егер (div_cnt> = max_count) онда tmp_clk <= tmp_clk емес; div_cnt: = 0; басқа div_cnt: = div_cnt + 1; егер аяқталса; егер аяқталса; led_clk <= tmp_clk; my_div процесін аяқтау; мінез -құлықты тоқтату;

3 -қадам: жарықдиодты контроллерді құру

Енді біз осы уақытқа дейін жеттік, ақыр соңында біз жасаған барлық компоненттерді LED контроллері файлына біріктірудің уақыты келді.

Қысқаша айтқанда, келесі компоненттер қолданылады:

  • Кіріс есептегіші (updown_counter)
  • Сағат бөлгіш (counter_clkDiv)
  • Жарықдиодты сағат бөлгіш (led_clkDiv)
  • Жеті сегментті дисплей драйвері (sseg_dec) (тіркелген файл)

Жеті сегментті дисплей драйвері бұрын талқыланбаған, себебі біз VHDL файлын доктор Брайан Милидің ұзақ және күрделі кодына байланысты алғанбыз. Негізінде, бұл біздің жарықтандырудың қандай деңгейін білу үшін Basys 3 тақтасындағы жеті сегментті дисплейге біздің түймені енгізуге мүмкіндік береді.

Жарық диодты басқару құралы жеті сегментті дисплейді де, жарықдиодты шамның жарықтық деңгейін де басқаратын санауды көбейту немесе азайту үшін флип -флоптарды қолданады.

нысанның есептегіші - порт (clk: STD_LOGIC -те; up_enable: STD_LOGIC -те; down_enable: STD_LOGIC -те; SEGMENTS: STD_LOGIC_VECTOR (7 төмен 0 -ге); DISP_EN: STD_LOGIC_VECTOR (3 төмен 0); led_LOG: STD_LOGIC: STD_LOGIC) соңғы есептегіш; архитектура Есептегіштің мінез -құлқы компонент болып табылады updown_counter - порт (қазіргі_стат: STD_LOGIC_VECTOR (3 төменге 0); алдыңғы_стат: STD_LOGIC_VECTOR (3 төмен 0); келесі_стат: STD_LOGIC_VECTOR (3 төмен 0); clk: STD_LOGIC ішінде: STD_LOGIC up_enable: STD_LOGIC ішінде); соңғы компонент updown_counter; counter_clkDiv компоненті - бұл порт (clk: in std_logic; sclk: out std_logic); counter_clkDiv соңғы компоненті; sseg_dec компоненті - бұл порт (ALU_VAL: std_logic_vector (7 төменге 0); SIGN: std_logic; VALID: std_logic; CLK: std_logic; DISP_EN: out std_logic_vector (3 төмен 0); SEGMENTS: out std_logic); sseg_dec соңғы компоненті; led_clkDiv компоненті - бұл порт (қазіргі күйі: STD_LOGIC_VECTOR ішінде (3 төмен 0); clk: STD_LOGIC; led_clk: STD_LOGIC сыртында); led_clkDiv соңғы компоненті; present_state сигналы: STD_LOGIC_VECTOR (3 төменге 0): = «0000»; next_state сигналы: STD_LOGIC_VECTOR (3 төменге 0): = «0000»; previous_state сигналы: STD_LOGIC_VECTOR (3 төменге 0): = «0000»; Alu_Val сигналы: STD_LOGIC_VECTOR (7 төмен 0); сигнал склк: STD_LOGIC; бастау Alu_Val (7 төмен 4) <= «0000»; Alu_Val (3 төмен 0) <= қазіргі_стат; next_state (0) <= жоқ (қазіргі_стад (0)); next_state (1) <= present_state (0) x немесе present_state (1); next_state (2) <= (present_state (0) және 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); previous_state (0) <= жоқ (present_state (0)); previous_state (1) <= present_state (0) xnor present_state (1); previous_state (2) <= (present_state (0) не present_state (1)) xor 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); көрсету: sseg_dec порт картасы (ALU_VAL => Alu_Val, SIGN => '0', VALID => '1', CLK => clk, DISP_EN => DISP_EN, SEGMENTS => SEGMENTS); led_div: led_clkDiv порт картасы (clk => clk, present_state => present_state, led_clk => led_clk); clk_div: counter_clkDiv порт картасы (clk => clk, sclk => sclk); мінез -құлықты тоқтату;

4 -қадам: шектеулер мен жинақтарды орнату

Шектеулер

Basys 3 тақтасын дұрыс орнату және бағдарламалау үшін алдымен осы қадамға бекітілген шектеулер файлын орнатуымыз керек. Келесі параметрлер реттелді:

Түймелер

  • T18 «up_enable» күйіне өзгертілді (жарықтығын арттыру)
  • U17 «төмен_сендіруге» өзгертілді (жарықтығын төмендету)

7 сегментті дисплей

  • W7, W6, U8, V8, U5, V5, U7, V7 бір дисплейдің әр сегментін білдіреді
  • U2, U4, V4, W4 көрсетілген әрбір анодты білдіреді (тек 2 белсенді, себебі біздің ең үлкен сан 15)

PMOD Header JC

JC7 - біз жарықдиодты шамның сымдарының бірін қосамыз, ал екінші сым GROUND -ға апарады

Мұның бәрін орнатқаннан кейін, сіз ағынды жасауыңыз керек (кез келген бағдарламалық жасақтамамен, мысалы, Vivado), тақтаны бағдарламалау және бум! Сізде жұмыс тақтасы бар.

Ескертпе: түйреуішті салыстыруды Basys 3 деректер кестесінен табуға болады.

Ассамблея

5 -қадам: Диммер қосқышын пайдалану

Егер бәрі ойдағыдай болса, сізде толық жұмыс істейтін диммер жүйесі болуы керек. Қорытындылай келе, жоғарғы түймені басу сіздің жарықтығыңызды арттырады (15 -ке дейін), ал төмен түймесін басу сіздің жарықтығыңызды төмендетеді (0 -ге дейін). Сіздің босаңсыған көру қабілетіңіз үшін бәрі жақсы болады деп сенемін!

Ұсынылған: