Mundarija:
Video: AVR Assembler qo'llanmasi 11: 5 qadam
2025 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2025-01-13 06:58
11 -darsga xush kelibsiz!
Ushbu qisqa qo'llanmada biz nihoyat yakuniy loyihamizning birinchi qismini qurmoqchimiz.
Siz qilishingiz kerak bo'lgan birinchi narsa - bu darslikning oxirgi bosqichiga o'tish va videoni ko'rish. Keyin bu erga qaytib keling. [buni qilayotganingizda pauza qiling.] Yaxshi. Endi davom eting.
Agar siz hali taxmin qilmagan bo'lsangiz, biz Craps o'yinini qurmoqdamiz! Albatta, men "craps" o'yini qurayotganim, albatta, kerak emas degani emas. Umid qilamanki, bu so'zsiz bo'ladi. Qanday bo'lmasin, mikrokontrolderlardan segmentli displeylarni va boshqalarni boshqarish va bir -biri bilan muloqot qilish foydalidir - asosan biz bu erda qilyapmiz. Siz xohlagan tarzda ulardan foydalanish uchun kod yozishingiz mumkin. Hozircha men ularni bema'nilik o'ynashlari uchun kodlamoqchiman, lekin keyinroq segmentli displeylarni boshqa maqsadga yo'naltirishga qaror qilishim mumkin.
Men buni qurayotganimning sababi shundaki, men oxir -oqibat uyimning podvalidagi "odam g'orida" to'liq o'lchamdagi Vegas stolini xohlayman deb o'ylayman. Biroq, mening do'stlarimdan hech biri qanday qilib pul tikish va to'plash bilan shug'ullanish, gol urish yoki to'lash haqida hech qanday tasavvurga ega emas. Shunday qilib, menimcha, dilerlik ishlarini stolga qo'yish yaxshi bo'lardi! Biz stolda pul tikganimizda, biz chiplar joylashtirilgan maydonni ko'rsatadigan kvadrat yonidagi kichik tugmachani ham bosishimiz mumkin, keyin mikrokontroller zarlar siljiganidan keyin bu maydon uchun to'lovni hisoblab chiqishi mumkin. Bu tomonni qanday tashkil qilishim hali aniq emas. O'ylaymanki, har bir odam o'z navbatida hamma pul tikishlarini so'raydi, shunda nazoratchi keyingi o'yinchini yozishdan oldin har bir kishining pullari qaerda ekanligini yozib oladi. O'yindan so'ng, kompyuter har bir maydonda to'lovlarni ko'rsatishi va har bir o'yinchi uchun "jami naqd pul" ni ushlab turishi mumkin.
Bu darslikning muqovali rasmlaridan biri uchun men yozda Vegasdagi poker stolida 5 ta eys tortayotgan rasmimni ishlatishim kerak edi. Heheh. Meni xursand qiling.
Bu erda AVR assambleyasi bo'yicha darsliklarimning to'liq to'plamiga havola:
1 -qadam: ahmoqlar
Ushbu qo'llanmada biz faqat Craps o'yinining eng oddiy qismini quramiz. Bu "O'tish chizig'i" deb nomlanadi va siz unga pul tikishingiz mumkin. O'yinning "o'tish chizig'i" qismi haqida bilishingiz kerak bo'lgan hamma narsani men bu bosqichga biriktirilgan 2 daqiqali ko'rsatma videoni tomosha qilib bilib olishingiz mumkin.
Biz yana 4 xonali displey quramiz, u dilerning pul mablag'larini kuzatib boradi, xuddi shu tarzda, bizning 4-raqamli displeyimiz O'yinchining pul mablag'larini hisobga oladi. Diler 20 dollardan boshlanadi va o'yinchi 20 dollardan boshlanadi (o'yindagi mumkin bo'lgan umumiy pul-9999 dollar-4 raqamli displeyimizning maksimal qiymati, lekin o'yinning birinchi qismi uchun bizga atigi 20 dollar kerak bo'ladi. juda zerikarli bo'lardi va munosib vaqt ichida g'alaba qozonish yoki yutqazish qiyin bo'lardi). Agar o'yinchi dilerning barcha pullarini olsa, o'yinchi g'alaba qozonadi. Agar o'yinchi butun pulini yo'qotsa, diler g'alaba qozonadi.
Qanday qilib pul yutasiz yoki yo'qotasiz? Xo'sh, siz Craps o'ynagan, ko'chada odamlarning "zar otayotganini" ko'rgan yoki Vegasdagi kazinoga qarshi o'ynaganini allaqachon bilasiz. Qolganlar uchun, men sizga bugun kodlashimiz kerak bo'lgan o'yinning "o'tish chizig'i" qismining qisqacha tavsifini beray.
Craps salib yurishlari davridan boshlab yuzlab yillar davomida o'ynab kelingan. Ikkinchi Jahon Urushida xandaqlarda qo'shinlar o'ynagan, ko'chalarda, kazino va qimor zallarida o'ynagan. Bu faqat o'tish chizig'idan boshlandi va boshqa barcha narsalar keyinchalik unga qo'shildi. Biz ham xuddi shu harakatni kuzatib boramiz.
O'tish chizig'i qanday ishlaydi. Siz pul tikasiz va keyin zarlarni to'playsiz. Birinchi rolik "chiqish roli" deb nomlanadi. Agar siz chiqadigan rolikda 2 (ilon ko'zlari), 3 (ace deuce) yoki 12 (quti mashinalari) olsangiz, siz pul tikishingizni yo'qotasiz va u "axlat" deb ataladi. Agar siz 7 (tabiiy) yoki 11 (yo yoki yo-leven) to'plasangiz, g'alaba qozonasiz. Agar siz boshqa raqamni siljitsangiz, bu raqam sizning "nuqtangiz" bo'ladi. "Nuqta" o'rnatilgandan so'ng, siz zarni siljitishda davom etasiz, bundan oldin 7 -ni siljitishdan oldin yana nuqtaga urasiz. Shunday qilib, dollar tikish sizga sotuvchidan bir dollar yutadi. Agar siz ochkodan oldin 7 olsangiz, bu "yetti chiqib ketish" deb nomlanadi va siz dilerga garovingizni yo'qotasiz.
Shundan so'ng siz yana boshlaysiz. O'tish chizig'iga pul tikib, zarni aylantiring, 7 yoki 11 g'alaba, 2, 3 yoki 12 mag'lubiyat.
Yana ko'p turdagi garovlar bor, "o'tkazib yubormang", "koeffitsientni o'tkazib yubormang", "koeffitsiyentni o'tkazib yubormang", "garovga keling", "kelmang", "maydon", "shox", "garovlar". qiyin yo'llar "va boshqalar va hokazo. Siz tafsilotlarni bu erda topishingiz mumkin:
uz.wikipedia.org/wiki/Craps
Yuqorida aytganimdek, hozircha, biz faqat o'yinning o'tish chizig'ini kodlayapmiz, bir kunning o'zida bolalar bir -birining tushlik pullari uchun devorga zar tashlaganlarida, bu erda biz boshlaymiz..
Biroq, biz narsalarni kodlashni boshlashdan oldin, dilerlik pul displeyini yaratishga ruxsat beramiz. Buning uchun siz Sparkfun yoki boshqa joydan olishingiz mumkin bo'lgan 4 ta katta raqamli displeylardan birini ishlatmoqchiman. Bundan buyon men bu darsliklar bo'yicha materiallarni sanab o'tmayman. Agar siz haqiqatan ham hamma narsani men bilan birga qurgan bo'lsangiz, unda siz materiallarni qaerdan olish kerakligini va nima ekanligini bilasiz. Ularni ro'yxatga olish yoki ular qancha turadi, men uchun ma'nosiz.
Shunday qilib, biz prototiplash taxtalarimizdan birini, 4 xonali katta displeyni, boshqa ATmega328p-ni boshqarish uchun olamiz, va biz uni ilgaklar zarrasi va pleyer displeyidagi kabi quramiz. Shuningdek, biz boshqalar kabi quvvat, dasturlash va TWI aloqasi uchun sarlavhalarni biriktiramiz.
2 -qadam: dilerning pul mablag'larini ko'rsatish
Biz dilerlik displeyini xuddi o'yinchining 4-raqamli displeyi bilan oxirgi darslikda qilganimizdek quramiz. Faqatgina farq shundaki, u kattaroq va pimlari kamroq, shuning uchun biz uni boshqacha tartibga solamiz va kabel o'tkazamiz.
Men ushbu displeyning simlari tasvirini biriktirdim. Siz ko'rishingiz mumkinki, u bizning displeyga qaraganda kattaroq va pimlari kamroq. Rasm sparkfun sahifasidan olingan, u erda men displeyga ega bo'ldim va u har bir raqam uchun qaysi pinlar kuchga ega ekanligini va qaysi pinlar har bir segmentni raqamli boshqarishini ko'rsatadi.
Odatdagidek, siz ekranni prototiplash paneliga ulashdan boshlashingiz va uning qanday ulanganligini tushunganingizga ishonch hosil qilish uchun har bir segmentni sinab ko'rishingiz kerak. Keyin siz uni taxtangizdagi AVR mikrokontrolerining pimlariga ulashingiz va bu qo'llanmada bizning barcha kodlarimiz ishlamaguncha, u erdan ishga tushirishingiz kerak. Nihoyat, oxirida siz tashqi taxtani qurishingiz va uni lehimlashingiz kerak. Oxirgi mahsulotni sinovdan o'tkazganingizda, har qanday muammo sizning kodingizni emas, balki lehim va kesish ishingizdan kelib chiqishini bilib olasiz. Bundan tashqari, duradgorlikdan ma'lum bo'lgan "ikki marta o'lchab, bir marta kesish" yoki elektron platalar yasashda: "ikki marta kesish, bir marta lehimlash" aksiomasini unutmang. Rasmda ko'rib turganingizdek, men nihoyat buzilib, bunday ish uchun mukammal Dremel qo'shimchasini sotib oldim. "Olmos nuqta to'plami". Bu 5 dollar turadi, lekin bu mening kesish ishimni ketma -ket ko'p marta bajarishimga olib keladigan G'azabni boshqarish terapiyasidan ancha past.
Men bu displey uchun 330 ohmli rezistorlardan foydalanaman. COM pinlari rezistor orqali GND ga o'tadi va quvvat siz ko'rsatmoqchi bo'lgan segmentga o'tadi. Men PC0 orqali PC3 orqali COM pinlari uchun va PB0, PB1, PB2, PB3, PB4, PD5, PD6 va PD7 segmentlari uchun foydalanmoqchiman.
Mana buni to'g'ri bajarish imkoniyatini oshirishning kaliti:
- sxemani xaritaga joylashtiring
- sxemani kesib tashlang
- simlaringizni tekshiring
- rezistorlarni, qopqoqlarni va kristalli osilatorni ulang
- ulanish va simlarni qayta tekshiring
- tashqi simlarni ulang
- mikrokontrollerni ulang
- simni yana tekshiring
- 4 xonali displeyni ulang
- har bir raqamni taxtadan bir juft sim bilan tekshiring
- uni bir chetga surib, kodni yozing, ehtimol, keyinroq biror narsani o'zgartirish kerak bo'ladi va siz aloqani uzib qo'ymasligingizga umid qilasiz.
Men simli ishimning bir qator rasmlarini ko'rsatdim. Iltimos, bilingki, siz xohlagan usulda simingizni ulashingiz mumkin. Ehtimol, siz mendan yaxshiroq xaritani topa olasiz va siz undan foydalanishingiz kerak. Ushbu qo'llanmalarda hech narsa sizning chiqish komponentlari to'g'ri ulangan bo'lsa, sizning komponentlaringiz qanday ulanganiga bog'liq emas. Bu menga eslatadi. E'tibor bering, hozirda ikkita sarlavha SDAga va ikkitasi SCLga ketadi? Nima uchun biz buni qildik deb o'ylaysiz?
Qo'llanma oxirida biriktirilgan koddan ko'rinib turibdiki, men oxirgi o'quvchining o'yinchi displeyidan dilerlar ko'rsatadigan yangi faylga kodni kesib qo'ydim. Keyin men o'tdim va "segmentlar" qidiruv jadvalini yangi pin xaritasiga mos ravishda o'zgartirdim, chunki bu displeyda "com" pinlari erga ulangan va segment pinlari boshqa displeydagidek emas, balki 5V.. Men yangi simlarni aks ettirish uchun portlarning boshlanishini o'zgartirdim, dilerlik displeyining manzilini 0b1000000 ga o'zgartirdim, shunda zarlar roli u bilan gaplashishi mumkin edi, men "tsikl" pastki dasturini o'chirib qo'ydim. PC0 orqali PC3 "com" pinlari ma'lum bir segmentni quvvatlantirmoqchi bo'lganida, men ko'rsatadigan "raqamni" o'zgartirdim, chunki raqamlar teskari tartibda joylashtirilgan (agar siz uni xuddi shunday qoldirib, 1234 raqamini ko'rsatishga harakat qilsangiz) o'rniga 4321 sifatida ko'rsatiladi).
Bu erda yangi ro'yxatga olish xaritasi:
(PD7, PD6, PD5, PB4, PB3, PB2, PB1, PB0) = (kasr nuqtasi, c, g, b, f, a, e, d)
bu erda 1 yoqilgan va 0 o'chirilgan.
Endi displeyni sinovdan o'tkazing, u displeyning boshlang'ich qiymatini turli raqamlarga o'rnating, shunda u yoqilganda ularni ko'rsatadi. Bu sizga hamma narsa to'g'ri ishlayotganligini ko'rsatadi.
Keyin diceroller kodini qulning yangi manzilidan foydalanadigan qilib o'zgartiring, ularni bir -biriga bog'lab qo'ying va ishga tushiring. Bu xuddi oxirgi darslikda qilganimizdek harakat qilishi kerak, bundan tashqari, zarlar endi yangi displeyda ko'rinadi.
Ajoyib! Endi biz yangi zar kodini yozishga tayyormiz, shunda u o'yinchi displeyi va dilerlik displeyi bilan aloqa qiladi.
3 -qadam: Dastur tavsifi
Kod bizning o'yinimiz uchun qanday ishlaydi, biz zar rolini usta sifatida saqlaymiz va dilerlik displeyini qo'shimcha qul sifatida qo'shamiz. Zar rolini o'yinni boshqaradi va natijada pulni dilerga jo'natadi va har bir o'yindan keyin o'yinchi ko'rsatiladi. Hozircha biz har safar 10 dollarlik o'tish chizig'iga ega bo'lamiz, shuning uchun o'yinchi o'z garovini o'zgartirganda hali murakkablashib ketishimiz shart emas. Keyinchalik, bizda mexanika ishlagandan so'ng, biz boshqa nazoratchini qo'shamiz, u qo'shimcha usta bo'ladi, u pul tikish va to'lovlarni boshqaradi va bizning zar roligimiz usta bo'lib qoladi, lekin faqat zarlarni siljitish uchun ishlatiladi. Bu sizga TWI arbitrajiga, to'qnashuvlarga va ketma -ket muloqotning boshqa muhim jihatlariga kirishga imkon beradi, agar sizda bir nechta xo'jayin va qul bo'lsa. Biz, shuningdek, boshqa turdagi rulonlarga pul tikish imkonini beradigan tugmachalari bo'lgan 7 xonali bir nechta displeylarni qo'shamiz, ammo bularning barchasi keyingi darslarda bo'ladi. Hozircha, biz faqat zar rolini usta, ikkita displeyni qul sifatida ko'rishni xohlaymiz. Qachonki biz tugmani bosgan bo'lsak, kod g'alaba qozonish yoki ettitagacha "tabiiy" to'lash, pulni yig'ish yoki "nuqta" turkumiga o'tkazish to'g'risida qaror qabul qiladi.
Keling, avval qullik tartiblarini yozaylik. Bu oddiy, chunki ularning manzili uchun SDA chizig'ini kuzatish kifoya, agar ular chaqirilsa, uni ko'rsatish va ko'rsatish uchun yangi raqamni o'qiydilar. Bu hammasi! Ularga xo'jayin bilan gaplashishning hojati yo'q, chunki xo'jayin ularning yig'indisini kuzatib boradi va ularni yangilashdan oldin barcha to'lovlarni hisoblab chiqadi. Kelgusi darslarda bizda xo'jayinga yozadigan qullar bo'ladi (masalan, pul tikish uchun tugmachalari bo'lgan 7 xonali bitta displey bo'lsa, ular har bir displeyga qancha pul tikilganini xo'jayinga aytib berishlari kerak). ularga manzil bilan murojaat qiling + "master qabul qilish rejimida" master bilan qo'ng'iroqni o'qing), lekin biz o'z vaqtida bunga erishamiz.
Hozircha hamma narsa "zar zarrachalari" tugmachasi, so'ngra hisoblash yoki boshqa tugmalar bosilishi va har bir displeyga yangi yig'indisi bilan xabar yuborilishi bilan boshlanadi. Har bir to'lovdan keyin o'yinchi yutgan yoki yutqazganini aniqlash uchun test o'tkaziladi, boshqacha aytganda, dilerlik pullari rulondan keyin nolga aylanadi yoki o'yindan keyin o'yinchi pullari nolga aylanadi (diler ham, o'yinchi ham) salbiy bo'lishi mumkin, chunki ularga faqat $ 10 tikishga ruxsat beriladi yoki qolgani 10 dollardan kam bo'lsa).
Shunday qilib, bu qanday ishlaydi. Keling, kodlashni olaylik.
4 -qadam: Asosiy aloqa kodi
Endi biz zar rolini aloqa tartibini yozishimiz mumkin. Bu, biz oxirgi marta yozganimiz bilan deyarli bir xil, faqat bitta emas, ikki xil qul bilan muloqot qilamiz. E'tibor bering, har bir qul uchun biz boshqa manzilni ishlatamiz. Siz kodni o'zingiz o'zgartirishingiz kerak, keyin uni har bir manzil bilan sinab ko'rishingiz va har bir alohida displeydan tashqari oxirgi darslik kabi ishlashiga ishonch hosil qilishingiz kerak.
Men har bir komponent uchun kodni biriktiraman, u shunchaki rulon natijasini ko'rsatadi, shunda uni displeylar to'g'ri ishlashi va simlarni tekshirish uchun ishlatish mumkin.
O'yinni kodlash, yig'ish tili buyruqlari yoki AVR mikrokontroller komponentlari haqida hech qanday yangilik keltirmaydi, shuning uchun men uni ketma-ket o'tishim kerak deb o'ylamayman. Siz, ehtimol, payqadingizki, biz yangi narsalarni kiritganimizda, men har bir satrni batafsil bayon qilib, sizni xafa qilmasak, sizni xafa qilyapman. Boshqa tomondan, agar men hech narsa kiritmagan bo'lsam, buni qilmayman. Bugun ham shunday. Menimcha, siz hozircha kod bilan o'ynashga, kodni o'qishga, kodni tahlil qilishga, kodni tushunishga, kodni tanqid qilishga, kodni masxara qilishga va kod yozgan yigitga kulishga tayyormiz. Shunday qilib, men sizga bu ishni davom ettirishingizga ruxsat beraman. Siz yozganlarimni yaxshilashingiz yoki hech bo'lmaganda soddalashtiradigan ko'p joylarni topishingiz deyarli aniq.
Men, odatdagidek, keyingi bosqichda ikkita displey va dieroller uchun kodning oxirgi versiyasini va bu narsani sinab ko'rgan videomni qo'shdim.
5 -qadam: Yakuniy kod va video
Men video va 3 ta dasturni biriktirdim. Siz dasturning yuqori qismidagi garov va boshlang'ich diler va o'yinchi naqd pulini.equ bayonnomalari bilan tuzatishingiz mumkinligini sezasiz.
Keyingi darslikda biz o'yinni yanada qiziqarli qiladigan har xil narsalarga pul tikish qobiliyatini qo'shamiz. Zamonaviy Crapsning qiziq tomoni shundaki, sizda pul tikishning turli xil usullari mavjud va o'z imkoniyatlaringizni maksimal darajada oshirishga harakat qilasiz. Aslida, Craps - bu kazinodagi eng yuqori koeffitsientli o'yin! … Agar siz uni qanday o'ynashni bilsangiz. Boshqa tomondan, agar siz qanday o'ynashni bilmasangiz, u eng past bahsli o'yinlardan biriga aylanadi.
Agar bizda pul tikish uchun ko'proq narsalar bo'lsa, men o'yindagi umumiy pul miqdorini ko'paytiraman.
Men qiziqarli bo'lishim kerak!
Keyingi safar ko'rishguncha!