Агуулгын хүснэгт:
- Алхам 1: Оролтын тоолуур үүсгэх
- Алхам 2: LED цаг хуваагч үүсгэх
- Алхам 3: LED хянагч үүсгэх
- Алхам 4: Хязгаарлалт ба чуулганыг бий болгох
- Алхам 5: Диммер унтраалгыг ашиглах
Видео: Basys ашиглан бүдэг LED 3 самбар: 5 алхам
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:02
Энэхүү гарын авлагад бид гадны LED гэрлийг багасгах системийг барьж, хянах гэж байна. Боломжтой товчлууруудын тусламжтайгаар хэрэглэгч LED чийдэнг хүссэн гэрэлтэй болгоно. Систем нь Basys 3 хавтанг ашигладаг бөгөөд энэ нь резистор болон LED чийдэн агуулсан талхны самбартай холбогддог. Зориулалтын "дээш" товчлуурыг дарахад гэрэл гэгээ нэмэгдэх бөгөөд "доош" товчлуур дээр дарахад гэрэл нь тэг хүртэл буурах болно. Энэ нь хэрэглэгчийг нарны гэрлийн чийдэнгээс сохорохоос сэргийлж зогсохгүй энерги хэмнэдэг!
Алхам 1: Оролтын тоолуур үүсгэх
Энэ алхамын хувьд бид гэрэлтүүлгийн түвшинг тодорхойлдог бүрэлдэхүүн хэсгийг бий болгодог (нэг цагаар), хоёр шилжүүлэгчийг ашиглана: нэгийг нь нэмэгдүүлэх, нөгөөийг нь бууруулах. VHDL-ийг ашигласнаар бид D flip-flop ашиглан тоолуур үйлдвэрлэжээ. "Дээш" товчлуурыг дарахад дараагийн төлөв нь одоогийн төлөв рүү шилжиж, долоон сегментийн дэлгэц болон LED чийдэнг гаргана.
аж ахуйн нэгжийн 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) if if (Yükselen_edge (clk)) хэрэв дараа нь (up_enable = '1' биш харин (next_state = "0000")) дараа нь present_state <= next_state; elsif (down_enable = '1' болохоос биш (Өмнөх_стат = "1111")) дараа нь одоогийн_шат <= өмнөх_үй; хэрэв дуусгавар бол; хэрэв дуусгавар бол; үйл явц дуусах; зан үйлийн төгсгөл;
Бидэнд оролт бүрийг түгжих (дээшлэх үед) цаг хэрэгтэй тул гэрэлтүүлгийн түвшин бүрийн хооронд товчлууруудыг хэр хурдан дарж болохыг тодорхойлдог цаг хуваагчийг бүтээсэн. Энэхүү цагийн хуваарь нь долоон сегментийн дэлгэц дээр зөв түвшинг зөв харуулах, түвшин бүрийн хувьд зөв түвшний эрч хүчийг гаргах боломжийг бидэнд олгодог.
аж ахуйн нэгж counter_clkDiv нь
Порт (clk: in 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; эхлэх (эхлэх_хүрээ (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: LED цаг хуваагч үүсгэх
Энэ алхамыг хийхийн тулд бид LED чийдэнгийн цагны хуваагуурыг бий болгож, 16 өөр түвшний эрчимийг тодорхойлдог. 0 -ээс 15 хүртэл хамгийн их тод байдлыг харуулдаг тул цаг хуваагч нь товчлуур тус бүрийг бидний гэрэлтүүлгийн түвшинд тохируулсан хэмжээгээр нэмэгдүүлдэг. Өсөн нэмэгдэж буй түвшин бүр нь LED чийдэнгийн цагийг нэмэгдүүлдэг гэсэн үг юм. Гэрэл нь шугаман байдлаар өсдөггүй гэдгийг санаж, бид цагийг хамгийн дээд хэмжээнд нь эргүүлж, үүний дагуу цагийг багасгасан.
Анхаарна уу: бид цэнхэр өнгийн LED ашиглаж байна. Өөр өнгө (улаан гэх мэт) ашиглахад арай өөр цаг шаардлагатай болно; Цэнхэр өнгөний дунд зэргийн тод байдлын тохиргоо нь улаан өнгөний хамгийн их тод байдал байж магадгүй юм. Гэрлийн долгионы урт нь өөр өөр энерги шаарддаг тул хүйтэн өнгө нь нил ягаан, хөх илүү их энерги шаарддаг бол улаан, улбар шар гэх мэт дулаан өнгө нь бага энерги шаарддагтай холбоотой юм.
аж ахуйн нэгж led_clkDiv бол Порт (одоогийн байдал: 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 present_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; эхлэх (эхлэх_хүрээ (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 хянагч үүсгэх
Одоо бид үүнийг хийж чадсан тул эцэст нь бидний үүсгэсэн бүх бүрэлдэхүүн хэсгүүдийг LED Controller файлд нэгтгэх цаг болжээ.
Дүгнэж хэлэхэд дараахь бүрэлдэхүүн хэсгүүдийг ашигласан болно.
- Оролтын тоолуур (updown_counter)
- Цаг хуваагч (counter_clkDiv)
- LED цаг хуваагч (led_clkDiv)
- Долоон сегментийн дэлгэцийн драйвер (sseg_dec) (хавсаргасан файл)
Долоон сегментийн дэлгэцийн драйверын талаар өмнө нь яригдаагүй байсан, учир нь бид VHDL файлыг доктор Брайан Малигаас урт, нарийн төвөгтэй кодын улмаас зээлсэн. Үндсэндээ бидний хийдэг товчлуурын оролтыг Basys 3 самбар дээрх долоон сегментийн дэлгэц рүү чиглүүлж, гэрэлтүүлгийн түвшинг мэдэх боломжтой болно.
Урагшлахад LED хянагч нь долоон сегментийн дэлгэц болон LED чийдэнгийн гэрэлтүүлгийн түвшинг нэгэн зэрэг хянадаг тоог багасгах эсвэл багасгахын тулд товшуур ашигладаг.
аж ахуйн нэгжийн тоолуур нь Port (clk: STD_LOGIC; up_enable: STD_LOGIC; in_enable: in STD_LOGIC; SEGMENTS: out STD_LOGIC_VECTOR (7 downto 0); DISP_EN: out STD_LOGIC_VECTOR (3 downto 0); led_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: std_logic_vector (3 доошоо 0); SEGMENTS: гадагш 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"; өмнөх дохио дохио Alu_Val: STD_LOGIC_VECTOR (7 доош 0 хүртэл); дохио sclk: STD_LOGIC; эхлэх Alu_Val (7 -оос 4 хүртэл) <= "0000"; Alu_Val (3 -аас 0 хүртэл) <= одоогийн байдал; next_state (0) <= үгүй (present_state (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); previous_state (0) <= үгүй (present_state (0)); өмнөх_үй (1) <= өнөөгийн байдал (0) xnor өнөөгийн байдал (1); өмнөх_шат (2) <= (өнөөгийн_стат (0) эсвэл одоогийн_стат (1)) эсвэл одоогийн_шат (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 -г "down_enable" болгож өөрчилсөн (тод байдлыг багасгах)
7 сегментийн дэлгэц
- W7, W6, U8, V8, U5, V5, U7, V7 нь нэг дэлгэцийн сегмент бүрийг илэрхийлдэг
- U2, U4, V4, W4 нь харуулсан анод бүрийг илэрхийлдэг (бидний хамгийн их тоо 15 байдаг тул 2 нь л идэвхтэй байдаг)
PMOD толгой JC
JC7 бол бид LED чийдэнгийн нэг утсыг холбож, нөгөө утас нь GROUND руу ордог
Үүнийг бүгдийг тохируулсны дараа хийх ёстой зүйл бол bitstream (Vivado -ийг ашиглаж байгаа ямар ч програм хангамжаар) үүсгэх, самбараа програмчлах, тэсрэлт хийх явдал юм! Та өөртөө ажлын самбар авсан.
Тэмдэглэл: Зүү зураглалыг Basys 3 мэдээллийн хуудаснаас эндээс олж болно.
Чуулган
Алхам 5: Диммер унтраалгыг ашиглах
Хэрэв бүх зүйл сайн байвал та бүрэн ажиллагаатай dimmer системтэй байх ёстой. Дүгнэж хэлэхэд дээд товчлуурыг дарах нь таны гэрлийг нэмэгдүүлэх болно (15 хүртэл), доош товчлуурыг дарахад таны гэрэл багасах болно (0 хүртэл). Таны одоо тайвширсан хараа бүх зүйл сайхан болно гэж найдаж байна!
Зөвлөмж болгож буй:
Uno ашиглан ESP8266 WeMos D1 R1 Wifi процессор ашиглан ESP32-камер ашиглан зураг авах, илгээх: 7 алхам
ESP8266 WeMos D1 R1 Wifi процессор ашиглан Uno ашиглан ESP32-Cam ашиглан зураг авах, илгээх: Uno ашиглан ESP8266 WeMos D1 R1 WiFI процессор ашиглан ESP32-Cam (OV2640) ашиглан зураг авч имэйлд илгээж, Google Драйвт хадгалаад илгээнэ үү. Twilio ашиглан Whatsapp. Шаардлага: Uno -той ESP8266 WeMos D1 R1 WiFI процессор (https: // protosupplies
LED бүдэг гэрэлтэй хайрцаг: 11 алхам
LED бүдэг гэрэлтэй хайрцаг: Өвлийн блюзтэй тэмцэхийн тулд 18W LED гэрлийн хайрцгаа бүтээгээрэй. Энэхүү гэрлийн хайрцаг нь PWM ашиглан сарнисан, бүдгэрдэг. Хэрэв танд дэнлүүний цаг хэмжигч байгаа бол та сэрүүлэгтэй цагийг өөр хувилбар болгон ашиглаж болно
HT12D HT12E ашиглан RF 433MHZ радио хяналт - HT12E & HT12D ашиглан 433mhz ашиглан Rf алсын удирдлага хийх: 5 алхам
HT12D HT12E ашиглан RF 433MHZ радио хяналт | HT12E & HT12D -ийг 433mhz ашиглан Rf алсын удирдлага хийх: Энэхүү зааварчилгаанд би HT12E кодчилол бүхий 433mhz дамжуулагч хүлээн авах модулийг ашиглан RADIO алсын удирдлага хийхийг танд үзүүлэх болно. HT12D декодер IC. Энэхүү зааварчилгаанд та өгөгдлийг маш хямд найрлагатай ашиглан илгээх, хүлээн авах боломжтой болно: HT
2.4Ghz NRF24L01 модулийг ашиглан Arduino ашиглан утасгүй алсын удирдлага - Nrf24l01 4 суваг / Quadcopter -ийн 6 суваг дамжуулагч хүлээн авагч - Rc нисдэг тэрэг - Arduino ашиглан Rc онгоц: 5 алхам (зурагтай)
2.4Ghz NRF24L01 модулийг ашиглан Arduino ашиглан утасгүй удирдлага | Nrf24l01 4 суваг / Quadcopter -ийн 6 суваг дамжуулагч хүлээн авагч | Rc нисдэг тэрэг | Arduino ашиглан Rc онгоц: Rc машин ажиллуулах | Квадрокоптер | Дрон | RC онгоц | RC завь, бидэнд үргэлж хүлээн авагч, дамжуулагч хэрэгтэй байдаг, RC QUADCOPTER -ийн хувьд бидэнд 6 суваг дамжуулагч, хүлээн авагч хэрэгтэй гэж бодъё, энэ төрлийн TX ба RX нь хэтэрхий үнэтэй тул бид үүнийг өөрөө хийх болно
Blynk програм ашиглан USB ашиглан ухаалаг гар утсыг ашиглан Arduino -г удирдах: 7 алхам (зурагтай)
Blynk програм ашиглан USB ашиглан ухаалаг гар утсыг ашиглан Arduino -ийг удирдах Arduino эсвэл c-ээ алсаас удирдах хамгийн энгийн шийдэл