Агуулгын хүснэгт:
Видео: 2 тоглогчийн өрсөлдөөнт VS цагийн тоглоом: 4 алхам
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:04
Танд хэрэгтэй болно:
1. Digilent Basys 3, FPGA Board (эсвэл бусад FPGA,)
2. Vivado эсвэл бусад VHDL -ийн орчин үеийн хувилбар
3. Дээр дурдсан програмыг ажиллуулах боломжтой компьютер.
Алхам 1: Тоглоом өөрөө
FSM модулиудтай хэрхэн харьцдаг.
Яаж тоглох вэ
Эхлэхийн тулд та дунд товчлуурыг дарах хэрэгтэй. Энэ нь хоёр тоглогчийн эрүүл мэндийг илэрхийлэх "99" гэсэн долоон сегментийн дэлгэц дээр гарч ирэх болно. Дараа нь LED нь баруунаас зүүн тийш дараалан асах болно. Энэ нь цахилгаан бар үүсгэдэг. Цахилгаан бар дүүрсэний дараа дахин тохируулна. Нэг тоглогчийн зорилго бол баар аль болох өндөр байх үед унтраалгаа эргүүлэх явдал юм. Илүү их LED асах тусам нэг тоглогч хоёр дахь тоглогчид илүү их хохирол учруулдаг. Нэг тоглогч түлхүүрээ эргүүлсний дараа гарсан хохирлыг хоёр тоглогчийн эрүүл мэндээс хасч тооцдог. Дараа нь хоёр тоглогчийн ээлж рүү шилждэг. Одоо харуулсан тоо нь тоглогчийн эрүүл мэндийг илэрхийлж, цахилгаан бар нь зүүнээс баруун тийш дүүрнэ. Хоёр дахь тоглогч нүүдэл хийсний дараа хохирлыг хасч, тоглогчийн ээлж рүү буцна. Энэ нь нэг тоглогч 0 эрүүл мэндэд хүрэх хүртэл давтана. Энэ үйл ажиллагааны видеог хавсаргав.
Алхам 2: FSM
Энэ тоглоом нь үндсэндээ нэг том хязгаарлагдмал төлөвт машин бөгөөд FSM -ийн төлөв байдалд үндэслэсэн нарийн төвөгтэй логик юм.
Төлөв 1: Цэс Эхний төлөв бол цэсийн дэлгэц бөгөөд энэ нь хамгийн энгийн төлөвүүдийн нэг юм. Энэ нь "PLAY" гэсэн үгийг харуулсан долоон сегментийн дэлгэц, тоглоомыг эхлүүлэх товчлуурыг агуулдаг. BTN товчлуур нь биднийг дараагийн төлөв рүү хөтөлдөг бөгөөд энэ нь тоглогчийн ээлж юм.
Төлөв 2: Тоглогчийн ээлж
Нэг тоглогчийн ээлж нь долоон сегментийн дэлгэц дээр хоёр дахь тоглогчийн эрүүл мэндийг харуулдаг дохиог идэвхжүүлдэг. Бидний үүсгэсэн өөр модулиас импортолсон ээлжийн бүртгэлийг идэвхжүүлэхийн тулд өөр нэг дохио асдаг (Pone.vhd). Энэхүү ээлжийн бүртгэл нь LED -ийн гэрлийг бусад тоглоомуудад нэмэгдэж буй цахилгаан хэмжигч шиг гэрэлтүүлж, асаах боломжтой LED -ийн дээд хэмжээнд хүрмэгц 0 болгож тохируулна. Энэ нь зээлсэн лабораторийн файлаас өөрчлөгдсөн barclock.vhd -ээс авсан цагийн өсөлтийн ирмэг дээр шинэчлэгддэг. Бид тоглогчийн нэг барыг баруун талаас эхэлж, зүүн тийш бөглөх ёстой байсан, учир нь нэг тоглогчийн унтраалга зүүн талд байдаг (хэрэглэгчийн зөн совингийн хувьд). Шилжүүлэгчийг эргүүлсний дараа муж тоглогчийн нэг хасалт руу шилжих бөгөөд LED -ийн идэвхжсэн хэмжээ нь дохио хэлбэрээр хадгалагдана.
3 -р төлөв: Тоглогч нэг хасалт LED идэвхжүүлсэн хэмжээ бүхий дохио нь хасагдах эрүүл мэндийн хэмжээг тодорхойлдог. Үүнийг өөр нэг ээлжийн бүртгэл (deductor1.vhd) хийснээр хийдэг бөгөөд ингэснээр LED -ийг нэмэгдүүлж, багасгадаг. Энэ нь бидний зээлж, өөрчилсөн цагны дивуль модулуудын нэгний ирмэг дээр буурч байна (downcounterclock.vhd). Нэг LED унтарсан даруйд хоёр тоглогчийн эрүүл мэндийн байдлаас нэг цэгийн эрүүл мэндийг хасч тооцдог. Хэрэв энэ процессын явцад тоглогчийн хоёр нь 0 эрүүл мэндэд хүрвэл бид зогсоод тэр даруй "Тоглоом дууссан" төлөв рүү орно. Үгүй бол LED вектор "0000000000000000" хүрэхэд бид хоёр тоглогчийн ээлж рүү шилждэг.
Төлөв 4: Хоёрдугаар тоглогчийн ээлж Хоёр дахь тоглогчийн ээлж нь нэг тоглогчийн ээлжтэй яг адилхан бөгөөд ээлжийн бүртгэл нь (Ptwo.bhd) зүүнээс баруун тийш шилжихээс бусад тохиолдолд самбарын баруун талд байна. Тоглогч 1 -ийн эрүүл мэндийн дэлгэцтэй байх дохио идэвхждэг. 2 -р шилжүүлэгч идэвхжсэний дараа энэ нь хоёр дахь тоглогчийн хасах ээлж рүү шилждэг.
5 -р шат: Хоёр тоглогчийн хасалт Хоёр дахь тоглогчийн ээлжтэй адил хоёр тоглогч хасах нь нэг тоглогч хасахтай адил үйлдэл хийдэг. Гол ялгаа нь LED -ийн унтраалтыг хянадаг ээлжийн бүртгэл эсрэг чиглэлд явагддаг бөгөөд энэ нь тоглогчийн хасалтыг зөв ажиллуулсны дараа хийхэд хялбар өөрчлөлт юм.
6 -р үе шат: Тоглоом дууслаа Хэрэв тоглогчдын аль нэг нь эрүүл мэндийн хувьд тэг түвшинд хүрвэл тоглоом энэ байдалд шилждэг. Сонирхолтой зүйл харагдахгүй байна. Хэрэв BTN нэгийг дарвал эрүүл мэнд 99 болж, төлөв цэс рүү буцаж очоод тоглоомыг үр дүнтэй эхлүүлнэ.
Алхам 3: Модулиуд
Тоглоомын хар хайрцаг диаграм
Цагийн зүү (Bryan Mealy -ийн clk_div.vhd модуль дээр үндэслэсэн):
Энэ бол хасагчийн цагийг зохицуулдаг цаг юм. Max_count нэртэй тогтмол нь barclock -ийн max_count тогтмолоос 3 дахин их юм. Энэ нь хасагчийг баарны хурдаас 3 дахин удаан болгох болно.
Barclock - (Bryan Mealy -ийн clk_div.vhd модуль дээр үндэслэсэн):
Энэхүү цаг нь тоглоомд хүндрэл учруулахын тулд бид маш хурдан нэмэгдүүлсэн цахилгаан тоолуурын цагийг зохицуулдаг. Энэ хугацааг өөрийн хүссэнээр тохируулж, тогтмол max_count -ийг илүү их болгох замаар хурдыг нэмэгдүүлэх, эсвэл max_count -ийг цөөн болгож багасгаж болно. Sseg_dec - (Бичсэн: Bryan Mealy): Энэ модуль нь 8 битийн тоог оролт болгон авдаг бөгөөд үүнийг тайлж, тоог аравтын бутархай эквивалент болгон хөрвүүлж, дараа нь долоон сегментийн дэлгэц дээр гаргадаг. Энэ файлыг ажиллуулахын тулд та өөрийн хязгаарлалтууд биднийхтэй тохирч байгаа эсэхийг шалгах хэрэгтэй.
Поне:
Энэ бол цахилгаан тоолуур нэмэгдэж байгаа мэт харагдуулахын тулд битүүдийг зүүн тийш шилжүүлэх ээлжийн бүртгэл юм. Бүх битүүд халуун байх үед бүх битүүд "0" болж дахин тохируулагдаж, мөчлөг дахин эхэлнэ.
Ptwo:
Энэ бол P1 модулийн эргүүлсэн хувилбар юм.
Дедуктор1:
Энэ бол ээлжийн бүртгэл ба хасагчийн хослол юм. Ээлжийн бүртгэл нь P1 -ийн ээлжийн бүртгэлийн эсрэг чиглэлд явдаг бөгөөд энэ нь хасалтыг харуулна. Энэ нь 2 -р тоглогчийн эрүүл мэндийн байдлаас цаг бүрийн мөчлөг тутамд 1 -ийг хасдаг тул эдгээр хоёр функцийг хослуулснаар эрүүл мэндийн баарны удирдлага буурах тусам өрсөлдөгчийнхөө эрүүл мэнд 1 -ээр буурч байх шиг байна.
Deductor2: Энэ бол Deductor1 модулийн эргүүлсэн хувилбар юм.
PlayDecoder (ekchen35649 -ээс зээлж, өөрчилсөн 133 зааварчилгаа): Үүнийг цэсийн төлөвт долоон сегментийн декодер дээр "PLAY" гэсэн үгийг харуулахад ашигладаг.
Алхам 4: Туршилт
Энэ тоглоомыг анх Кирбигийн мини тоглоомуудаас санаа авсан юм. Энэ бол Basys 3 самбарт эсвэл дурын FPGA дээр тоглох боломжтой хоёр тоглогчтой энгийн тоглоом юм.
Алхам 1: Шаардлагатай материал
Танд хэрэгтэй болно: Digilent Basys 3, FPGA Board (эсвэл бусад) Vivado -ийн харьцангуй шинэчлэгдсэн хувилбар эсвэл бусад vhdl орчин Дээр дурдсан програмыг ажиллуулж чаддаг компьютер
Алхам 2: Тоглоом өөрөө
Яаж тоглох вэ
Эхлэхийн тулд та дунд товчлуурыг дарах хэрэгтэй. Энэ нь хоёр тоглогчийн эрүүл мэндийг илэрхийлэх "99" гэсэн долоон сегментийн дэлгэц дээр гарч ирнэ. Дараа нь LED нь баруунаас зүүн тийш дараалан асах болно. Энэ нь цахилгаан бар үүсгэдэг. Цахилгаан бар дүүрсэний дараа дахин тохируулна. Нэг тоглогчийн зорилго бол баар аль болох өндөр байх үед унтраалгаа эргүүлэх явдал юм. Илүү их LED асах тусам нэг тоглогч хоёр дахь тоглогчид илүү их хохирол учруулдаг. Нэг тоглогч түлхүүрээ эргүүлсний дараа гарсан хохирлыг хоёр тоглогчийн эрүүл мэндээс хасч тооцдог. Дараа нь хоёр тоглогчийн ээлж рүү шилждэг. Одоо харуулсан тоо нь тоглогчийн эрүүл мэндийг илэрхийлж, цахилгаан бар нь зүүнээс баруун тийш дүүрнэ. Хоёр дахь тоглогч нүүдэл хийсний дараа хохирлыг хасч, тоглогчийн ээлж рүү буцна. Энэ нь нэг тоглогч 0 эрүүл мэндэд хүрэх хүртэл давтана. Энэ үйл ажиллагааны видеог хавсаргав.
Тоглоом тоглохын тулд үүнийг үндсэн самбар дээр ачаалж, дунд товчийг дарна уу. Шилжүүлэгчийг аль болох олон LED асаахыг хичээгээрэй, дараа нь самбар өрсөлдөгчийнхөө эрүүл мэндээс эдгээр оноог хасах хүртэл хүлээгээрэй. Дараа нь найздаа дамжуулаарай
Алхам 3: FSM
Энэ тоглоом нь үндсэндээ нэг том хязгаарлагдмал төлөвт машин бөгөөд FSM -ийн төлөв байдалд үндэслэсэн нарийн төвөгтэй логик юм.
(Улсын диаграм)
Төлөв 1: Цэс
Эхний төлөв бол цэсийн дэлгэц бөгөөд энэ нь хамгийн энгийн төлөвүүдийн нэг юм. Энэ нь "PLAY" гэсэн үгийг харуулсан долоон сегментийн дэлгэц, тоглоомыг эхлүүлэх товчлуурыг агуулдаг. BTN товчлуур нь биднийг дараагийн төлөв рүү хөтөлдөг бөгөөд энэ нь тоглогчийн ээлж юм.
Төлөв 2: Тоглогчийн ээлж
Нэг тоглогчийн ээлж нь долоон сегментийн дэлгэц дээр хоёр дахь тоглогчийн эрүүл мэндийг харуулдаг дохиог идэвхжүүлдэг. Бидний үүсгэсэн өөр модулиас импортолсон ээлжийн бүртгэлийг идэвхжүүлэхийн тулд өөр нэг дохио асдаг (Pone.vhd). Энэхүү ээлжийн бүртгэл нь LED -ийн гэрлийг бусад тоглоомуудад нэмэгдэж буй цахилгаан хэмжигч шиг гэрэлтүүлж, асаах боломжтой LED -ийн дээд хэмжээнд хүрмэгц 0 болгож тохируулна. Энэ нь зээлсэн лабораторийн файлаас өөрчлөгдсөн barclock.vhd -ээс авсан цагийн өсөлтийн ирмэг дээр шинэчлэгддэг. Бид тоглогчийн нэг барыг баруун талаас эхэлж, зүүн тийш бөглөх ёстой байсан, учир нь нэг тоглогчийн унтраалга зүүн талд байдаг (хэрэглэгчийн зөн совингийн хувьд). Шилжүүлэгчийг эргүүлсний дараа муж тоглогчийн нэг хасалт руу шилжих бөгөөд LED -ийн идэвхжсэн хэмжээ нь дохио хэлбэрээр хадгалагдана.
Улсын 3: Тоглогч нэг хасалт
LED идэвхжүүлсэн хэмжээ бүхий дохио нь хасагдах эрүүл мэндийн хэмжээг тодорхойлдог. Үүнийг өөр нэг ээлжийн бүртгэл (deductor1.vhd) хийснээр хийдэг бөгөөд ингэснээр LED -ийг нэмэгдүүлж, багасгадаг. Энэ нь бидний зээлж, өөрчилсөн цагны дивуль модулуудын нэгнийх нь ирмэг дээр буурч байна (downcounterclock.vhd). Нэг LED унтарсан даруйд хоёр тоглогчийн эрүүл мэндийн байдлаас нэг цэгийн эрүүл мэндийг хасч тооцдог. Хэрэв энэ процессын явцад тоглогчийн хоёр нь 0 эрүүл мэндэд хүрвэл бид зогсоод тэр даруй "Тоглоом дууссан" төлөв рүү орно. Үгүй бол LED вектор "0000000000000000" хүрэхэд бид хоёр тоглогчийн ээлж рүү шилждэг.
Төр 4: Хоёр дахь тоглогчийн ээлж
Хоёр дахь тоглогчийн ээлж нь нэг тоглогчийн ээлжтэй яг адил бөгөөд ээлжийн бүртгэл (Ptwo.bhd) зүүнээс баруун тийш шилжихээс бусад тохиолдолд самбарын баруун талд байна. Тоглогч 1 -ийн эрүүл мэндийн дэлгэцтэй байх дохио идэвхждэг. 2 -р шилжүүлэгч идэвхжсэний дараа энэ нь хоёр дахь тоглогчийн хасах эргэлт рүү шилждэг.
5 -р үе шат: Хоёр дахь тоглогчийг хасах
Хоёр дахь тоглогчийн ээлж шиг хоёр тоглогч хасах нь нэг тоглогч хасахтай адил үйлдэл хийдэг. Гол ялгаа нь LED -ийн унтраалтыг хянадаг ээлжийн бүртгэл эсрэг чиглэлд явагддаг бөгөөд энэ нь тоглогчийн хасалтыг зөв ажиллуулсны дараа хийхэд хялбар өөрчлөлт юм.
6 -р үе шат: Тоглоом дууслаа Хэрэв тоглогчдын аль нэг нь эрүүл мэндийн хувьд тэг түвшинд хүрвэл тоглоом энэ байдалд шилждэг. Сонирхолтой зүйл харагдахгүй байна. Хэрэв BTN нэгийг дарвал эрүүл мэнд 99 болж, төлөв цэс рүү буцаж очоод тоглоомыг үр дүнтэй эхлүүлнэ.
Хар хайрцаг
Алхам 4: Модулиуд
Цагийн зүүний цаг (Брайан Мэйлийн clk_div.vhd модуль дээр үндэслэсэн):
Энэ бол хасагчийн цагийг зохицуулдаг цаг юм. Max_count нэртэй тогтмол нь barclock -ийн max_count тогтмолоос 3 дахин их юм. Энэ нь хасагчийг баарны хурдаас 3 дахин удаан болгох болно.
Barclock - (Bryan Mealy -ийн clk_div.vhd модуль дээр үндэслэсэн): Энэ цаг нь тоглоомд хүндрэл учруулахын тулд бид маш хурдан нэмэгдүүлсэн цахилгаан тоолуурын цагийг зохицуулдаг. Энэ хугацааг өөрийн хүссэнээр тохируулж, тогтмол max_count -ийг илүү их болгох замаар хурдыг нэмэгдүүлэх, эсвэл max_count -ийг цөөн болгож багасгаж болно. Sseg_dec - (Бичсэн: Bryan Mealy): Энэ модуль нь 8 битийн тоог оролт болгон авдаг бөгөөд үүнийг тайлж, тоог аравтын бутархай эквивалент болгон хөрвүүлж, дараа нь долоон сегментийн дэлгэц дээр гаргадаг. Энэ файлыг ажиллуулахын тулд та өөрийн хязгаарлалтууд биднийхтэй тохирч байгаа эсэхийг шалгах хэрэгтэй.
Pone: Энэ бол цахилгаан тоолуур нэмэгдэж байгаа мэт харагдуулахын тулд битүүдийг зүүн тийш шилжүүлэх нэг халуун битийг нэмдэг ээлжийн бүртгэл юм. Бүх битүүд халуун байх үед бүх битүүд "0" болж дахин тохируулагдаж, мөчлөг дахин эхэлнэ.
Ptwo: Энэ бол P1 модулийн эргүүлсэн хувилбар юм.
Дедуктор1: Энэ бол ээлжийн бүртгэл ба хасагчийн хослол юм. Ээлжийн бүртгэл нь P1 -ийн ээлжийн бүртгэлийн эсрэг чиглэлд явдаг бөгөөд энэ нь хасалтыг харуулна. Энэ нь 2 -р тоглогчийн эрүүл мэндийн байдлаас цаг бүрийн мөчлөг тутамд 1 -ийг хасдаг тул эдгээр хоёр функцийг хослуулснаар эрүүл мэндийн баарны удирдлага буурах тусам өрсөлдөгчийнхөө эрүүл мэнд 1 -ээр буурч байх шиг байна.
Deductor2: Энэ бол Deductor1 модулийн эргүүлсэн хувилбар юм.
PlayDecoder (ekchen35649 -ээс зээлсэн бөгөөд бага зэрэг өөрчилсөн түүний 133 зааварчилгаа):
Үүнийг цэсийн төлөвт долоон сегментийн декодер дээр "PLAY" гэсэн үгийг харуулахад ашигладаг.
Хийх зүйл: зураг, видео
Зөвлөмж болгож буй:
Энэхүү өндөр хүчдэлийн клик-тоглоом тоглоом: 11 алхам (зурагтай)
Энэхүү өндөр хүчдэлийн клик-тоглоом тоглоомын чулуу: 70-аад оны үед ахлах сургуулиудад түгээмэл хэрэглэгддэг чимэг Click-Clack тоглоомын хоёр цахилгаан статик хувилбарыг энд оруулав. Хувилбар 1.0 бол хэт төсвийн загвар юм. Эд анги (цахилгаан хангамжийг оруулаагүй) бараг юу ч биш юм. Илүү үнэтэй, илүү үнэтэй зүйлийн тайлбар
Бодит цагийн цагийн модулийг (DS3231) хэрхэн ашиглах вэ: 5 алхам
Бодит цагийн цагны модулийг (DS3231) хэрхэн ашиглах вэ: DS3231 бол өртөг багатай, туйлын нарийвчлалтай I2C бодит цаг (RTC) бөгөөд температурыг нөхсөн болор осциллятор (TCXO), болортой. Төхөөрөмж нь батерейны оролттой бөгөөд үндсэн хүчдэлийн үед цагийг зөв хэмждэг
Өрсөлдөөнт дуугаралтын систем: 5 алхам
Өрсөлдөөнт дуугаралтын систем: Энэхүү төсөлд зориулагдсан өрсөлдөх чадвартай дуут дохионы систем нь Бүс нутгийн болон үндэсний шинжлэх ухааны цомын тэмцээнд ашигладаг дуут дохионы системтэй адил ажилладаг. Энэхүү төсөл нь ахлах сургуулийнхаа шинжлэх ухааны аяганы багтай хамтран ажилласнаас үүдэлтэй юм
Aruduino LED тоглоом Хоёр тоглогчийн тоглоомыг хурдан дарах: 8 алхам
Aruduino LED Тоглоом Хоёр тоглогчийн тоглоомыг хурдан дарахад: Энэхүү төслийг @HassonAlkeim -аас санаа авсан болно. Хэрэв та гүнзгий харахыг хүсвэл энд дарж үзэх боломжтой линк байна https://www.instructables.com/id/Arduino-Two-Player-Fast-Button-Clicking-Game/. Энэ тоглоом бол Alkeim -ийн сайжруулсан хувилбар юм. Энэ бол
8x16 LED матриц понг тоглоом (Тоглогчийн хувилбар бүрт 2 сэлүүр): 3 алхам
8x16 LED матриц понг тоглоом (Тоглогчийн хувилбар бүрт 2 сэлүүр): 8х8 хэмжээтэй LED матриц ашиглан Arduino дээр хэрэгжүүлсэн сонгодог понг тоглоомын олон хувилбараас санаа авсан. Энэхүү зааварчилгааны хүрээнд би тоглогч бүрт довтлогч, хаалгач гэсэн хоёр сэлүүртэй дуртай Понг хувилбарыг хэрхэн бүтээхийг танд үзүүлэх болно