Агуулгын хүснэгт:

AVR Assembler заавар 11: 5 алхам
AVR Assembler заавар 11: 5 алхам

Видео: AVR Assembler заавар 11: 5 алхам

Видео: AVR Assembler заавар 11: 5 алхам
Видео: LDmicro 2: Создание лестничной схемы (программирование лестничной логики ПЛК микроконтроллера с помощью LDmicro) 2024, Долдугаар сарын
Anonim
AVR Assembler заавар 11
AVR Assembler заавар 11
AVR Assembler заавар 11
AVR Assembler заавар 11
AVR Assembler заавар 11
AVR Assembler заавар 11

11 -р хичээлд тавтай морилно уу!

Энэхүү богино гарын авлагад бид эцсийн төслийнхээ эхний хэсгийг бүтээх гэж байна.

Таны хийх ёстой хамгийн эхний зүйл бол энэ хичээлийн хамгийн сүүлийн алхам руу очиж видеог үзэх явдал юм. Дараа нь энд буцаж ирээрэй. [та үүнийг хийж байх зуур түр зогсоо….] За. Одоо үргэлжлүүлээрэй.

Хэрэв та таамаглаж амжаагүй байгаа бол бид Craps тоглоом барьж байна! Мэдээжийн хэрэг, би craps тоглоом барьж байгаа нь мэдээж хэрэг та үүнийг хийх ёстой гэсэн үг биш юм. Үүнийг хэлэхгүй өнгөрнө гэж найдаж байна. Ямар ч тохиолдолд сегментчилсэн дэлгэц гэх мэтийг хянахын тулд микроконтроллер ашиглах нь ашигтай бөгөөд хоорондоо харилцах нь голчлон бидний энд хийж байгаа зүйл юм. Та хүссэн үедээ ашиглахын тулд код бичиж болно. Одоогийн байдлаар би тэднийг craps тоглох гэж кодлох гэж байгаа боловч дараа нь сегментчилсэн дэлгэцийг өөр зүйл хийхээр дахин шийдэж магадгүй юм.

Би үүнийг барьж байгаа шалтгаан нь би эцэст нь байшингийнхаа подвал дахь "хүний агуйд" Вегас шиг том хэмжээтэй ширээг хүсэж магадгүй гэж бодож байгаа юм. Гэсэн хэдий ч, миний найзуудын хэн нь ч яаж бооцоо тавих, бооцоо тавих, оноо авах, эсвэл төлөх талаар өчүүхэн ч санаа бодолтой байдаггүй. Ширээний дилерийн бүх ажлыг бидний төлөө хийх нь сайхан байх болно гэж би бодсон! Ширээн дээр бооцоо тавихад бид чипс нь хэр их байгааг харуулсан талбайн хажууд байгаа товчлуурыг дарж болно, дараа нь микроконтроллер шоо өнхрүүлсний дараа тэр талбайн төлбөрийг тооцоолж, харуулах боломжтой болно. Би энэ талыг хэрхэн зохион байгуулахаа сайн мэдэхгүй байна. Надад нэг бодол төрсөн: хүн бүр бүх бооцоогоо ээлжлэн тавихыг хүсэх бөгөөд ингэснээр хянагч дараагийн тоглогчийг бичихээс өмнө хүн бүрийн мөнгө хаана байгааг бүртгэх болно. Дараа нь өнхрүүлсний дараа компьютер талбар бүрийн төлбөрийг харуулахаас гадна тоглогч бүрийн "нийт бэлэн мөнгийг" хадгалах боломжтой болно.

Энэхүү гарын авлагын хавтасны зургуудын нэг болохын тулд би энэ зун Вегас дахь покер ширээн дээр 5 акс татаж байсан зургаа ашиглах ёстой байсан. Хэхэ. Намайг баярлуул.

Энд миний AVR ассемблер хичээлүүдийн бүрэн цуглуулгын линк байна:

Алхам 1: Муухай

Хог!
Хог!
Хог!
Хог!
Хог!
Хог!

Энэхүү гарын авлагад бид зөвхөн Craps тоглоомын хамгийн энгийн хэсгийг бүтээх болно. Үүнийг "Pass Line" гэж нэрлэдэг бөгөөд та үүн дээр бооцоо тавих боломжтой. Та энэ алхамд хавсаргасан 2 минутын богино зааварчилгааны видеог үзээд тоглоомын "дамжуулах шугам" хэсгийн талаар хэрэгтэй бүх зүйлийг мэдэж авах боломжтой.

Бид одоогийн 4 оронтой дэлгэц нь Тоглогчийн Бэлэн мөнгийг бүртгэдэг шиг Дилерийн Бэлэн мөнгөний бүртгэлийг хөтлөх өөр 4 оронтой дэлгэц бүтээх болно. Дилер нь $ 20-оос эхлэх бөгөөд тоглогч $ 20-оос эхлэх болно (тоглоомын нийт боломжит мөнгө 9999 доллар-манай 4 оронтой дэлгэцийн дээд хэмжээ, гэхдээ энэ тоглоомын эхний хэсэгт бидэнд ердөө 20 доллар хэрэгтэй болно. маш их ядаргаатай байх бөгөөд зохих хугацаанд ялах эсвэл алдах нь хэцүү байх болно). Хэрэв тоглогч дилерийн бүх мөнгийг авбал тоглогч хожно. Хэрэв тоглогч бүх мөнгөө алдвал дилер хожно.

Та хэрхэн мөнгө хожиж эсвэл алдах вэ? За, Craps тоглосон, гудамжинд "шоо буудаж байгаа" хүмүүсийг харсан, эсвэл Вегас дахь казиногийн эсрэг тоглож байхыг харсан хүмүүс аль хэдийн мэдэх болно. Үлдсэн хүмүүсийн хувьд өнөөдөр бидний кодлох тоглоомын "дамжуулах шугам" хэсгийн товч тайлбарыг хүргэе.

Крапс нь загалмайтны аян дайны үеэс эхлэлтэй хэдэн зуун жилийн турш тоглогдож ирсэн. Үүнийг Дэлхийн 2 -р дайны шуудуунд цэргүүд тоглож, гудамжинд, казино, мөрийтэй тоглоомын танхимд тоглодог байв. Энэ нь зөвхөн дамжуулах шугамаас эхэлсэн бөгөөд бусад бүх зүйлийг дараа нь нэмж оруулсан болно. Үүнтэй ижил явцыг бид дагах болно.

Дамжуулах шугамын ажиллах арга нь ийм байна. Та бооцоо тавьж, дараа нь шоо эргэлдүүлнэ. Эхний өнхрүүлгийг "гарч ирэх өнхрөх" гэж нэрлэдэг. Хэрэв та 2 (могойн нүд), 3 (ace deuce) эсвэл 12 (хайрцагтай машин) гарч ирвэл та бооцоогоо алдах бөгөөд үүнийг "craps" гэж нэрлэдэг. Хэрэв та 7 (натурал) эсвэл 11 (ё ё ё левен) өнхрүүлбэл ялна. Хэрэв та өөр дугаар өнхрүүлбэл энэ дугаар таны "цэг" болно. "Цэг" байгуулагдсаны дараа та өнхрөхөөсөө өмнө шоо дахин өнхрүүлэхийн тулд 7 -ийг өнхрүүлэхээс өмнө дахин цохих болно. Тиймээс долларын бооцоо нь дилерээс нэг доллар хождог. Хэрэв та оноо авахаасаа өмнө 7 авсан бол үүнийг "долоон гаралт" гэж нэрлэдэг бөгөөд та дилерт бооцоогоо алдана.

Үүний дараа та дахин эхэлнэ. Дамжуулалтын шугам дээр бооцоо тавьж, шоо өнхрүүлээрэй, 7 эсвэл 11 ялалт, 2, 3, 12 ялагдал.

Өөр олон төрлийн бооцоо байдаг, "битгий дамжуул", "коэффициент дамжуул", "магадлал бүү алдаарай", "бооцоо тавь", "битгий бооцоо тавь", "талбай", "эвэр", " хатуу арга зам "гэх мэт гэх мэт дэлгэрэнгүй мэдээллийг эндээс авах боломжтой.

en.wikipedia.org/wiki/Craps

Дээр дурдсанчлан, одоогоор бид тоглоомын дамжуулалтын хэсгийг л хүүхдүүд кодлох болно, тэр үед хүүхдүүд бие биенийхээ өдрийн хоолны мөнгийг хананд шоо шидэж байхад л эндээс эхэлнэ..

Гэсэн хэдий ч, бид зүйлийг кодчилж эхлэхээсээ өмнө дилерийн бэлэн мөнгөний дэлгэцийг бүтээцгээе. Үүний тулд би Sparkfun эсвэл өөр газраас авах боломжтой 4 оронтой том дэлгэцийн аль нэгийг ашиглахыг хүсч байна. Одооноос эхлэн би эдгээр хичээлийн материалыг жагсаахгүй. Хэрэв та үнэхээр бүх зүйлийг надтай хамт барьж байсан бол материалыг хаанаас авах, юу болохыг нь та аль хэдийн мэддэг болсон. Тэдгээрийг жагсаах эсвэл хэдэн төгрөгийн үнэтэй байх нь миний хувьд утгагүй юм.

Прототип хийх нэг самбар, 4 оронтой том дэлгэц, өөр ATmega328p-ийг аваад дэлгэцийг хянаж, шоо роллер, тоглуулагчийн дэлгэцтэй хийсэн шиг хийцгээе. Бид мөн бусадтай адил хүч, програмчлал, TWI холболтын толгойг хавсаргах болно.

Алхам 2: Дилерийн бэлэн мөнгөний дэлгэц

Дилерийн мөнгөний дэлгэц
Дилерийн мөнгөний дэлгэц
Дилерийн мөнгөний дэлгэц
Дилерийн мөнгөний дэлгэц
Дилерийн мөнгөний дэлгэц
Дилерийн мөнгөний дэлгэц

Бид сүүлийн хичээл дээр тоглогчийн 4 оронтой дэлгэцтэй хийсэн дилерийн дэлгэцийг бүтээдэг. Цорын ганц ялгаа нь илүү том, цөөн тооны голтой тул бид үүнийг өөр өөр байдлаар холбож, утсаар холбож өгөх болно.

Би энэ дэлгэцийн утаснуудын зургийг хавсаргав. Энэ нь манай playercash дэлгэцээс том бөгөөд цөөн тооны голтой болохыг та харж байна. Энэ зураг нь миний дэлгэцийг авсан sparkfun хуудаснаас авсан бөгөөд энэ нь цифр тус бүрт ямар зүү байгаа, сегмент бүрийг цифрээр хянадаг болохыг харуулж байна.

Ердийнх шиг, та дэлгэцийн загварыг талхны самбар дээр залгаад сегмент бүрийг шалгаж, үүнийг хэрхэн утастай холбосон болохыг мэдэх хэрэгтэй. Дараа нь та үүнийг талхны самбар дээрх AVR микроконтроллерийн зүү дээр холбож, энэ зааварт бидний бүх код ажиллах хүртэл тэндээс ажиллуулах хэрэгтэй. Эцэст нь хэлэхэд та гадна талын самбарыг барьж, гагнах хэрэгтэй. Дараа нь та эцсийн бүтээгдэхүүнийг туршиж үзэхэд ямар ч асуудал код биш харин гагнуур, хайчлах ажилаас үүдэлтэй болохыг олж мэдэх болно. Түүнчлэн, мужааны сайн мэддэг аксиомыг "хоёр удаа хэмжиж, нэг удаа огтол" эсвэл хэлхээний самбар хийх тохиолдолд "хоёр удаа хайчилж, нэг удаа гагнах" -ыг бүү мартаарай. Зураг дээр харж байгаа шиг би эцэст нь эвдэрч, ийм төрлийн ажилд зориулагдсан төгс Dremel хавсралтыг худалдаж авлаа. "Алмазан цэгийн багц". Энэ нь 5 долларын үнэтэй байсан боловч энэ нь миний хайчлах ажлыг дараалан олон удаа даван туулж байгаа уур хилэнгийн эмчилгээний зардлаас хамаагүй бага юм.

Би энэ дэлгэцийн хувьд 330 ом эсэргүүцэл ашигладаг. COM тээглүүр нь резистороор дамжин GND руу дамждаг бөгөөд хүчийг аль сегмент дээр харуулахыг хүсдэг. Би PC0 -ээс PC3 -ийг COM зүү, PB0, PB1, PB2, PB3, PB4, PD5, PD6, PD7 сегментүүдэд ашиглах гэж байна.

Үүнийг зөв хийх боломжийг нэмэгдүүлэх түлхүүр энд байна.

  1. хэлхээний зураглалыг гарга
  2. хэлхээг таслах
  3. утсаа шалгаарай
  4. резистор, таг, болор осцилляторыг хавсаргана
  5. холболт, утсыг дахин шалгана уу
  6. гадаад утсыг холбоно уу
  7. микроконтроллерийг холбоно уу
  8. утсыг дахин шалгана уу
  9. 4 оронтой дэлгэцийг хавсаргана уу
  10. талбараас авсан хос утсаар цифр бүрийг шалгана уу
  11. Үүнийг хойш тавиад кодыг бичээрэй, магадгүй та дараа нь ямар нэгэн зүйлийг өөрчлөх хэрэгтэй болно гэдгийг мэдэж байгаа бөгөөд таслах шаардлагатай холболтыг нуугаагүй гэж найдаж байна.

Би утастай холбоотой ажлынхаа зургийг цувралаар үзүүлэв. Та өөрийн хүссэн утсаар утсаар ярих эрх чөлөөтэй гэдгийг ойлгоорой. Та надаас илүү сайн газрын зураг олох магадлал өндөр байгаа бөгөөд үүнийг ашиглах хэрэгтэй. Эдгээр гарын авлагад юу ч байхгүй, хэрэв тэдгээр нь зөв гаралтын порттой бол таны бүрэлдэхүүн хэсгүүдийг хэрхэн холбохоос хамаарахгүй. Энэ нь надад сануулж байна. Одоо SDA руу хоёр толгой, SCL рүү явж байгаа хоёр толгой байгааг анзаарч байна уу? Бид яагаад үүнийг хийсэн гэж та бодож байна вэ?

Хичээлийн төгсгөлд хавсаргасан кодыг харснаар би сүүлийн хичээлийн тоглуулагчийн дэлгэцээс дилерийн дэлгэцийн шинэ файл руу кодыг буулгаж буулгалаа. Дараа нь би "сегментүүд" хайлтын хүснэгтийг шинэ зүү газрын зурагтай нийцүүлэн өөрчилсөн бөгөөд энэ дэлгэцийн хувьд "com" тээглүүрийг газардуулж, сегментийн тээглүүр нь бусад дэлгэцийнх шиг биш харин 5V байна.. Би мөн шинэ утсыг тусгахын тулд портуудын эхлэлийг өөрчилсөн, дилерийн дэлгэцийн хаягийг 0b1000000 болгож өөрчилсөн бөгөөд ингэснээр шоо роллер түүнтэй ярилцах боломжтой болж, "мөчлөгийн" дэд програмыг өөрчилсөн бөгөөд ингэснээр унтраах болно. PC0 -ээс PC3 "com" хүртэл тодорхой сегментийг тэжээхийг хүсч байгаа бөгөөд би шинэ утас нь эсрэг талын тоонуудтай болсон тул гарч ирэх "цифрийг" өөрчилсөн (хэрэв та үүнийг байгаагаар нь үлдээгээд 1234 -ийг харуулахыг оролдсон бол) Үүний оронд 4321 гэж харуулах байсан).

Энд шинэ бүртгэлийн газрын зураг байна:

(PD7, PD6, PD5, PB4, PB3, PB2, PB1, PB0) = (аравтын бутархай, c, g, b, f, a, e, d)

Энд 1 нь асаалттай, 0 нь унтраалттай байна.

Эхлээд дэлгэцийн анхны утгыг янз бүрийн тоонд тохируулж дэлгэцийг туршиж үзээрэй. Энэ нь бүх зүйл зөв ажиллаж байгаа эсэхийг танд хэлэх болно.

Дараа нь diceroller кодыг боолын шинэ хаягийг ашиглахаар өөрчилж, хооронд нь холбоод ажиллуулна уу. Энэ нь шоо өнхрөх нь одоо шинэ дэлгэц дээр гарч ирэхээс бусад тохиолдолд бидний сүүлийн хичээл дээр хийсэн шиг ажиллах ёстой.

Агуу их! Одоо бид шоо өнхрөх шинэ кодыг бичихэд бэлэн байгаа бөгөөд энэ нь тоглуулагчийн дэлгэц болон дилерийн дэлгэцтэй харилцах болно.

Алхам 3: Хөтөлбөрийн тойм

Хөтөлбөрийн тойм
Хөтөлбөрийн тойм
Хөтөлбөрийн тойм
Хөтөлбөрийн тойм
Хөтөлбөрийн тойм
Хөтөлбөрийн тойм

Код нь бидний тоглоомын хувьд хэрхэн ажиллах вэ гэвэл бид шоо роллерийг мастер болгож, дилерийн дэлгэцийг нэмэлт боол болгоно. Шоо өнхрөх нь тоглоомыг хянадаг бөгөөд үүний үр дүнд гарсан өөрчлөлтийг дилер рүү илгээж, өнхрөх бүрийн дараа тоглогчийг харуулна. Одоогийн байдлаар бид дамжуулах шугамын бооцоо 10 доллар байх болно, тиймээс тоглогч бооцоогоо өөрчилснөөр хэтэрхий төвөгтэй болох шаардлагагүй болно. Хожим нь бид механикчдыг ажиллуулсны дараа бооцоо, төлбөрийг хянах нэмэлт мастер болох өөр нэг хянагч нэмж оруулах болно. Энэ нь танд олон эзэн, боол байгаа тохиолдолд TWI арбитр, мөргөлдөөн болон цуваа харилцааны бусад чухал асуудлуудад хандах боломжийг бидэнд олгоно. Түүнчлэн бид доор нь товчлуур бүхий 7 оронтой олон тооны дэлгэцийг нэмж оруулах бөгөөд энэ нь бусад төрлийн өнхрүүлэгт бооцоо тавих боломжийг олгоно. Одоогийн байдлаар бид шоо өнхрүүлгийг мастер, хоёр дэлгэцийг боол болгохыг хүсч байна. Бид товчлуурыг дарахад код нь байгалийн мөнгө төлөх үү, эсвэл мөнгө авах уу, эсвэл "цэг" цуврал цувралд шилжүүлэх эсвэл ялалт эсвэл долоон тоглолт хийх эсэхийг шийдэх болно.

Эхлээд боолын дэглэмийг бичье. Эдгээр нь энгийн бөгөөд тэдний хийх ёстой зүйл бол хаягийнхаа SDA шугамыг харах явдал юм, хэрэв тэд дуудсан бол шинэ дугаарыг уншиж, харуулах болно. Энэ бүгд! Мастер нь тэдний нийлбэр дүнг хянаж, шинэчлэхээсээ өмнө төлбөрийн бүх тооцоог хийх тул тэд мастертай эргэж ярих шаардлагагүй болно. Ирээдүйн хичээлд бид боолуудаа мастер руу буцааж бичих болно (жишээлбэл, бооцооны дүнг дарах товчлуур бүхий 7 оронтой ганц дэлгэцтэй бол тэд дэлгэц бүрт хичнээн их бооцоо тавьж байгааг мастерт хэлэх ёстой болно. тэдэнд хаягаар хандаарай + "мастер хүлээн авагчийн горимд" дуудлага унших)) гэхдээ бид үүнийг цаг тухайд нь авах болно.

Одоогийн байдлаар бүх зүйлийг шоо өнхрүүлэх товчлуур, дараа нь тооцоолол эсвэл цаашдын товчлуур дарж, эцэст нь дэлгэц бүрт шинэ дүнг харуулсан мессежээр өдөөж байна. Төлбөр бүрийн дараа тоглогч хожсон эсвэл хожигдсон эсэхийг шалгах тест байх болно, өөрөөр хэлбэл дилерийн бэлэн мөнгө гүйлгээ хийсний дараа тэг болох уу, эсвэл тоглогчийн бэлэн мөнгө гүйлгээ хийсний дараа тэг болох уу (дилер эсвэл тоглогч аль нь ч биш) сөрөг байж болно, учир нь тэд зөвхөн $ 10 бооцоо тавих боломжтой болно.

Тиймээс ийм байдлаар ажиллах болно. Кодчилолоо авцгаая.

Алхам 4: Харилцааны код

Харилцааны мастер код
Харилцааны мастер код

Одоо бид шоо булны харилцааны горимыг бичиж болно. Энэ нь бидний хамгийн сүүлд бичсэнтэй бараг адилхан бөгөөд зөвхөн нэг биш хоёр өөр боолтой харилцах болно. Боол бүрийн хувьд бид өөр хаяг ашигладаг болохыг анхаарна уу. Та кодыг өөрөө өөрчилж, дараа нь хаяг бүрээр нь туршиж үзээд тусдаа дэлгэц тус бүрээс бусад сүүлийн заавар шиг ажиллаж байгаа эсэхийг шалгаарай.

Би бүрэлдэхүүн хэсгүүдийн кодыг хавсаргах бөгөөд энэ нь өнхрүүлгийн үр дүнг харуулдаг бөгөөд ингэснээр дэлгэцийг зөв ажиллуулах, утсыг шалгахад ашиглаж болно.

Тоглоомыг кодлох нь угсрах хэлний командыг эсвэл AVR микроконтроллерийн бүрэлдэхүүн хэсгүүдийн хувьд шинэ зүйл авчирдаггүй тул би үүнийг дараалан дамжуулах шаардлагагүй юм шиг байна. Бид шинэ зүйлийг танилцуулахдаа би мөр бүрийг нарийвчлан, унтуулаагүй тохиолдолд таны уурыг хүргэж байгааг анзаарсан байх. Нөгөө талаар, хэрэв шинээр танилцуулсан зүйл байхгүй бол би үүнийг хийхгүй. Өнөөдөр ийм л байна. Тиймээс, та одоохондоо кодоор тоглох, кодыг унших, кодыг шинжлэх, кодоо ойлгох, шүүмжлэх, кодыг дооглох, код бичсэн залуу руу инээхэд бэлэн болсон гэж бодож байна. Тиймээс би чамайг үргэлжлүүлж, үүнийг хийхийг зөвшөөрөх болно. Та миний бичсэн зүйлийг сайжруулах эсвэл наад зах нь хялбаршуулах олон газрыг олох болно гэдэг нь бараг тодорхой юм.

Би ердийн байдлаар хоёр дэлгэц, дицероллерын кодын эцсийн хувилбарыг дараагийн алхам дээр миний энэ зүйлийг туршиж буй видеог хавсаргасан болно.

Алхам 5: Эцсийн код ба видео

Би видео болон 3 програмыг хавсаргав. Хөтөлбөрийн дээд хэсэгт байгаа бооцоо, дилер болон тоглогчийн бэлэн мөнгийг.equ тайлангаар засах боломжтойг та анзаарах болно.

Дараагийн хичээлд бид тоглоомыг илүү сонирхолтой болгох өөр өөр зүйл дээр бооцоо тавих чадварыг нэмж оруулах болно. Орчин үеийн Craps -ийн сонирхолтой зүйл бол танд бооцоо тавих, магадлалаа нэмэгдүүлэхийн тулд олон янзын арга байдаг. Үнэндээ Craps бол Казиногийн хамгийн өндөр магадлалтай тоглоом юм! … Хэрэв та үүнийг хэрхэн тоглохоо мэддэг бол. Нөгөө талаар, хэрэв та яаж тоглохоо мэдэхгүй байгаа бол энэ нь хамгийн бага магадлалтай тоглоомуудын нэг болно.

Бидэнд мөнгөө бооцоо тавих илүү олон зүйл бий болсны дараа би тоглолтын нийт мөнгөний хэмжээг нэмэгдүүлэх болно.

Би хөгжилтэй байх ёстой!

Дараа уулзая!

Зөвлөмж болгож буй: