Мазмұны:
- 1 -қадам: енгізу есептегішін жасаңыз
- 2 -қадам: жарықдиодты сағат бөлгішті жасаңыз
- 3 -қадам: жарықдиодты контроллерді құру
- 4 -қадам: шектеулер мен жинақтарды орнату
- 5 -қадам: Диммер қосқышын пайдалану
Бейне: Basys 3 тақтасын қолданатын күңгірт жарық диоды: 5 қадам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:24
Бұл нұсқаулықта біз сыртқы жарықдиодты күңгірттеу жүйесін құрамыз және басқарамыз. Қол жетімді түймелердің көмегімен пайдаланушы жарықдиодты шамды кез келген жарықтылыққа қарай өшіре алады. Жүйеде 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 -ге дейін). Сіздің босаңсыған көру қабілетіңіз үшін бәрі жақсы болады деп сенемін!
Ұсынылған:
Рождестволық жарық диодты жарық диоды: 3 қадам
Рождестволық жарық диодты жарық диоды: Мен Рождество мерекелеріне арналған Arduino -ның қызықты және мерекелік жобасын жасағым келді, сондықтан мен өз қолыммен жарық диодты шамдарды жасауды шештім. Бұл жоба дәнекерлеу машинасын қажет етеді, сондықтан оны есте сақтаңыз
ESP32-CAM тақтасын қолданатын уақыт аралығы камерасы: 6 қадам
ESP32-CAM тақтасын қолдана отырып, уақытты үнемдейтін камера: Бұл жоба алдыңғы цифрлық фотокамера жобасына негізделеді және біз ESP32-CAM тақтасының көмегімен уақытты жылдам камераны жасаймыз. Барлық суреттер microSD картасына кезекпен сақталады және суретті түсіргеннен кейін тақта ұйқыға кетеді, оны сақтау үшін
555 таймері мен потенциометрін қолданатын пульсирующий жарық диоды: 4 қадам
555 таймері мен потенциометрін қолданатын пульсирующий светодиод: Сәлеметсіз бе! Бұл нұсқаулықта біз потенциометрді, 555 таймерді және басқа да схеманың негізгі компоненттерін қолдана отырып реттелетін уақытша циклде жұмыс істейтін жарық диодты диммер схемасын қалай құруды көрсетеміз. Біз бұл жобаның идеясын алғаш рет таптық
Жарық диоды бар қарапайым жарық сенсоры (аналогты): 3 қадам
Жарық диоды бар қарапайым жарық сенсоры (аналогы): Сәлеметсіз бе, мен сізге жарық диодты жарықдиодты қалай жасау керектігін көрсетемін. Мен үшін бұл схема пайдасыз, өйткені сіз онымен көп нәрсе жасай алмайсыз, бірақ менің ойымша
ESP32 бар PWM - ESP 32 -де PWM бар күңгірт жарық диодты Arduino IDE көмегімен: 6 қадам
ESP32 бар PWM | ESP 32 -де PWM бар жарық диодты жарықтандыру Arduino IDE көмегімен: Бұл нұсқаулықта біз Arduino IDE көмегімен ESP32 көмегімен PWM сигналдарын қалай жасау керектігін көреміз. PWM негізінен кез келген MCU -дан аналогтық шығыс алу үшін қолданылады және бұл аналогтық шығыс 0В -тан 3,3В -қа дейінгі (esp32 жағдайында) & бастап