Mündəricat:

AVR Assembler Dərsliyi 11: 5 Addımlar
AVR Assembler Dərsliyi 11: 5 Addımlar

Video: AVR Assembler Dərsliyi 11: 5 Addımlar

Video: AVR Assembler Dərsliyi 11: 5 Addımlar
Video: LDmicro 1: Введение (программирование релейной логики ПЛК микроконтроллера с помощью LDmicro) 2024, Iyul
Anonim
AVR Assembler Dərsliyi 11
AVR Assembler Dərsliyi 11
AVR Assembler Dərsliyi 11
AVR Assembler Dərsliyi 11
AVR Assembler Dərsliyi 11
AVR Assembler Dərsliyi 11

Tutorial 11 -ə xoş gəldiniz!

Bu qısa dərsdə, nəhayət, son layihəmizin birinci hissəsini hazırlayacağıq.

Etməli olduğunuz ilk şey, bu təlimatın son mərhələsinə keçmək və videoya baxmaqdır. Sonra bura qayıt. [bunu edərkən ara verərək….] Tamam. İndi davam edin.

Əgər hələ təxmin etməmisinizsə, biz Craps oyunu qururuq! Əlbətdə ki, bir bok oyunu qurduğum üçün əlbəttə ki, etməlisən. Ümid edirəm ki, bu sözsüz gedir. İstənilən halda seqmentləşdirilmiş displeyləri idarə etmək və bir -biri ilə ünsiyyət qurmaq üçün mikrokontrolörlərdən istifadə etmək faydalıdır - əsasən burada etdiyimiz budur. İstədiyiniz halda onlardan istifadə etmək üçün kod yaza bilərsiniz. Hələlik onları bok oynamaq üçün kodlaşdıracağam, baxmayaraq ki, daha sonra bölünmüş ekranları başqa bir şey etmək üçün yenidən təyin etmək qərarına gələ bilərəm.

Bunu tikməyimin səbəbi, nəhayət evimin zirzəmisindəki "insan mağaramda" tam ölçülü Vegas craps masası istəyə biləcəyimi düşünürəm. Ancaq dostlarımdan heç kimin bahis və rulonlarla necə məşğul olacağı, hesab açacağı və ya ödəməyinin ən kiçik fikri yoxdur. Mənə elə gəlirdi ki, bizim üçün bütün satıcı işlərini masanın üstünə aparsanız yaxşı olar! Masaya bahis qoyduğumuzda, fişlərimizin nə qədər yerləşdirildiyini göstərən meydanın yanındakı kiçik bir düyməni də basa bilərik, sonra mikrokontrolör zar yuvarlandıqdan sonra həmin kvadratın ödənişini hesablaya və göstərə bilər. Bu tərəfi necə təşkil edəcəyimi hələ də tam əmin deyiləm. Düşündüyüm bir fikir, hər bir şəxsdən bütün bahislərini növbə ilə qoymaları istənəcək ki, nəzarətçi növbəti oyunçunu qeyd etməzdən əvvəl hər bir şəxsin pulunun harada olduğunu qeyd etsin və s. Yuvarlandıqdan sonra, kompüter hər meydandakı ödənişləri göstərə bilər və hər bir oyunçu üçün işləyən "ümumi pulu" saxlaya bilər.

Bu dərslikdəki örtük şəkillərindən biri üçün bu yay Vegasdakı poker masasında 5 as çəkən bir şəklimdən istifadə etməli oldum. Heheh. Məni əyləndir.

AVR montajçı dərslərimin tam kolleksiyasına bir link:

Addım 1: Craps

Cırtdanlar!
Cırtdanlar!
Cırtdanlar!
Cırtdanlar!
Cırtdanlar!
Cırtdanlar!

Bu təlimatda yalnız son Craps oyununun ən sadə hissəsini quracağıq. Buna "Pass Line" deyilir və buna bahis edə bilərsiniz. Bu addıma əlavə etdiyim qısa 2 dəqiqəlik təlimat videosunu izləyərək oyunun "keçid xətti" hissəsi haqqında bilmək lazım olan hər şeyi öyrənə bilərsiniz.

Mövcud 4 rəqəmli ekranınız Oyunçunun Pulunu izlədiyi kimi Satıcının Pulunu da izləyəcək başqa bir 4 rəqəmli ekran quracağıq. Satıcı 20 dollardan başlayacaq və oyunçu 20 dollardan başlayacaq (oyunda mümkün olan ümumi pul 9999 dollardır-4 rəqəmli displeylərimizin maksimumu, ancaq oyunun bu ilk hissəsi üçün bizə yalnız 20 dollar lazım olacaq. həddindən artıq yorucu və layiqli bir müddətdə qazanmaq və ya itirmək çətin olardı). Oyunçu dilerin bütün pulunu götürərsə, oyunçu qazanır. Oyunçu bütün pulunu itirərsə, satıcı qazanır.

Pul qazanmaq və ya itirmək necə? Yaxşı, Craps oynayan, küçədə "zar atan" insanları görən və ya Vegasdakı kazinoya qarşı oynadığını görənlər artıq biləcəklər. Qalanlarınız üçün sizə bu gün kodlaşdıracağımız oyunun "keçid xətti" hissəsinin qısa təsvirini verim.

Craps, səlib yürüşləri dövrünə aid yüz illərdir oynanılır. İkinci Dünya Müharibəsi səngərində qoşunlar tərəfindən oynandı, küçələrdə oynandı, kazinolarda və qumar salonlarında oynandı. Yalnız keçid xətti ilə başladı və bütün digər şeylər daha sonra ona əlavə edildi. Eyni irəliləyişi izləyəcəyik.

Keçid xəttinin işləmə qaydası budur. Bir bahis qoyursunuz və sonra zərləri yuvarlayırsınız. İlk rulona "çıxan rulon" deyilir. Çıxış rulonunda 2 (ilan gözü), 3 (ace deuce) və ya 12 (qutu avtomobili) alsanız, bahisinizi itirirsiniz və buna "bok" deyirlər. Bir 7 (təbii) və ya 11 (bir yo, ya da yo-leven) yuvarlasanız, qazanırsınız. Başqa bir rəqəm yuvarlasanız, bu nömrə "nöqtəniz" olur. Bir "nöqtə" qurulduqdan sonra, 7 -ni yuvarlamadan əvvəl yenidən nöqtəyə vurmaq məqsədi ilə zarları yuvarlamağa davam edirsiniz. 7 -ni yuvarlamadan əvvəl nöqtənizi alırsanız, hətta pul qazanırsınız. Beləliklə, bir dollar bahisi satıcıdan bir dollar qazanır. Xalınız yuvarlanmadan bir 7 alsanız, buna "yeddi çıx" deyilir və satıcıya bahisinizi itirirsiniz.

Bundan sonra yenidən başlayacaqsınız. Keçid xəttinə bahis qoyun və zərləri yuvarlayın, 7 və ya 11 qalibiyyət, 2, 3 və ya 12 məğlubiyyət.

Daha çox bahis növü var, "keçmə", "bahis keç", "bahis keçmə", "gəl bahis", "bahis gəlmə", "sahə", "buynuz", " çətin yollar "və s. Ətraflı məlumatı burada tapa bilərsiniz:

en.wikipedia.org/wiki/Craps

Yuxarıda dediyim kimi, hələlik yalnız uşaqların bir -birlərinin nahar pulu üçün divara zər atdıqları günlərdə əldə etdikləri yalnız oyunun keçid xəttini kodlayacağıq və buna görə başlayacağımız yer budur.

Bununla birlikdə, bir şeyi kodlaşdırmağa başlamazdan əvvəl, satıcıdan nağd pul ekranı qurmağa icazə verin. Bunun üçün Sparkfun və ya başqa bir yerdən əldə edə biləcəyiniz daha böyük 4 rəqəmli ekranlardan birini istifadə etmək istəyirəm. Bundan sonra bu dərsliklərdəki materialları sadalamayacağam. Əgər həqiqətən hər şeyi mənimlə birlikdə qurmusunuzsa, materialları haradan əldə edəcəyinizi və nə olduğunu artıq bilirsiniz. Bunları sadalamaq və ya nə qədər başa gəlmək mənim üçün mənasızdır.

Beləliklə, bu ekranı idarə etmək üçün prototip lövhələrimizdən birini, böyük 4 rəqəmli displeyi, başqa bir ATmega328p-i tutub zar rulonunda və oyunçu ekranında olduğu kimi qurmağa icazə verək. Digərləri kimi güc, proqramlaşdırma və TWI əlaqələri üçün başlıqlar əlavə edəcəyik.

Addım 2: Satıcının Pul Nümayişi

Satıcının Pul Nümayişi
Satıcının Pul Nümayişi
Satıcının Pul Nümayişi
Satıcının Pul Nümayişi
Satıcının Pul Nümayişi
Satıcının Pul Nümayişi

Satıcının ekranını, son təlimatda oyunçunun 4 rəqəmli ekranı ilə eyni şəkildə qururuq. Yalnız fərqlər daha böyük olması və daha az sancaqlar olmasıdır, buna görə onu düzəldəcəyik və fərqli şəkildə bağlayacağıq.

Bu ekranın naqillərinin şəklini əlavə etdim. Görə bilərsiniz ki, daha böyükdür və playercash ekranımızdan daha az sancağa malikdir. Şəkil, ekranı aldığım sparkfun səhifəsindəndir və hər bir rəqəm üçün hansı pinlərin güc olduğunu və hər bir seqmenti bir rəqəmlə idarə edən pinləri göstərir.

Həmişə olduğu kimi, ekranı prototipləşdirmə çörək taxtanıza bağlamalısınız və hər bir seqmentin necə bağlandığını başa düşdüyünüzdən əmin olmalısınız. Sonra çörək lövhənizdə bir AVR mikrokontrolörünün pinlərinə bağlamalı və bu təlimatda bütün kodlarımız işləyənə qədər oradan işə salmalısınız. Nəhayət, sonunda, xarici lövhəni qurmalı və lehimləməlisiniz. Sonra son məhsulu sınadığınız zaman hər hansı bir problemin koddan deyil, lehimləmə və kəsmə işinizdən qaynaqlandığını biləcəksiniz. Ayrıca, dülgərlikdən "iki dəfə ölçün və bir dəfə kəsin" və ya elektron lövhələr düzəldərkən yaxşı bilinən aksiyomu da unutmayın: "iki dəfə kəsin, bir dəfə lehimləyin." Şəkildən də gördüyünüz kimi, nəhayət dağıldım və bu cür işlər üçün mükəmməl Dremel əlavəsini aldım. "Diamond Point Set". 5 dollara başa gəldi, amma bu, kəsmə işimi üst üstə dəfələrlə başa vurmaqla gələn Qəzəb İdarəetmə Terapiyasının dəyərindən çox azdır.

Bu ekran üçün 330 ohm rezistorlardan istifadə edirəm. COM pinləri rezistordan GND -ə keçir və güc göstərmək istədiyiniz hissəyə keçir. COM pinləri üçün PB3 və PB0, PB1, PB2, PB3, PB4, PD5, PD6 və PD7 seqmentləri üçün PC3 vasitəsilə PC0 istifadə edəcəyəm.

Düzgün olma şansınızı artırmağın açarı budur:

  1. dövrəni xəritəyə salın
  2. dövrə kəsin
  3. naqillərinizi yoxlayın
  4. rezistorları, qapaqları və kristal osilatoru bağlayın
  5. əlaqələri və naqilləri yenidən yoxlayın
  6. xarici telləri bağlayın
  7. mikrokontrolörü qoşun
  8. naqilləri yenidən yoxlayın
  9. 4 rəqəmli ekranı əlavə edin
  10. çörək taxtasından bir cüt tel ilə hər rəqəmi yoxlayın
  11. bir kənara qoyun və kodu yazın, ehtimal ki, sonradan hər şeyi düzəltməli olduğunuzu və kəsilməli olan bir əlaqəni gizlətmədiyinizi ümid edərək.

Kabel işimlə bağlı bir sıra şəkillər göstərmişəm. Zəhmət olmasa anlayın ki, istədiyiniz şəkildə telinizi çəkə bilərsiniz. Çox güman ki, məndən daha yaxşı bir xəritə tapa bilərsiniz və istifadə etməlisiniz. Bu dərsliklərdə heç bir şey düzgün çıxış limanlarına malik olduqları müddətcə komponentlərinizin necə bağlanacağından asılı deyil. Hansı mənə xatırladır. Diqqət yetirin ki, indi iki başlıq SDA -ya, ikisi SCL -ə gedir? Niyə bunu etdiyimizi düşünürsünüz?

Dərsliyin sonunda əlavə edilmiş koddan görə biləcəyiniz kimi, kodu sonuncu təlimatın oyunçu ekranından satıcı ekranı üçün yeni bir fayla kəsib yapışdırdım. Sonra "seqmentlər" axtarma cədvəlini yeni pin xəritəsinə uyğun olaraq dəyişdirdim və qeyd etdim ki, bu ekran üçün "com" sancaqları yerə qoyulur və seqment pinləri digər ekranda olduğu kimi 5V -dir.. Yeni naqilləri əks etdirmək üçün limanların başlanğıcını da dəyişdirdim, pul silindrinin ünvanını 0b1000000 olaraq dəyişdirdim ki, zar silindiri onunla danışa bilsin, "dövrü" alt proqramını dəyişdirdim PC0 vasitəsilə PC3 "com" pinləri müəyyən bir seqmenti gücləndirmək istədikdə və yeni naqillərin əksinə olan rəqəmlərə sahib olduğu üçün görünən "rəqəmi" dəyişdirdim (olduğu kimi buraxıb 1234 -ü göstərməyə çalışsaydınız) Bunun əvəzinə 4321 olaraq göstərilirdi).

İşdə yeni qeyd xəritəsi:

(PD7, PD6, PD5, PB4, PB3, PB2, PB1, PB0) = (ondalık nöqtəsi, c, g, b, f, a, e, d)

harada 1 ON, 0 OFF.

İndi ekranı əvvəlcə ekranın başlanğıc dəyərini müxtəlif nömrələrə qoyaraq sınayın ki, açıldıqda onları göstərsin. Bu, hər şeyin düzgün işlədiyini söyləyəcək.

Sonra diceroller kodunu kölə üçün yeni ünvanı istifadə edəcək şəkildə dəyişdirin, onları bir -birinə bağlayın və işə salın. Zər rulonlarının indi yeni ekranda görünməsi istisna olmaqla, son dərsdə etdiyimiz kimi davranmalıdır.

Əla! İndi həm oyunçu ekranı, həm də satıcı ekranı ilə əlaqə qurması üçün yeni zar roller kodunu yazmağa hazırıq.

Addım 3: Proqramın konturu

Proqram Xülasəsi
Proqram Xülasəsi
Proqram Xülasəsi
Proqram Xülasəsi
Proqram Xülasəsi
Proqram Xülasəsi

Kodun oyunumuz üçün necə işləyəcəyi, zər silindrini usta olaraq saxlayacağımız və diler ekranını əlavə bir qul olaraq əlavə edəcəyimizdir. Zar silindiri oyunu idarə edəcək və nəticədə ortaya çıxan dəyişiklikləri satıcıya göndərəcək və oyunçu hər rulondan sonra göstərəcək. Hələlik, hər dəfə 10 dollar olan keçid xətti bahisinə sahib olacağıq, buna görə oyunçunun bahisini dəyişdirməsi ilə çox çətinləşməyimiz lazım deyil. Daha sonra, mexaniklər işlədikdən sonra, bahis və ödəmələri idarə edəcək əlavə bir usta olacaq başqa bir nəzarətçi əlavə edəcəyik və zar silindrimiz usta olaraq qalacaq, ancaq zərləri yuvarlamaq üçün istifadə olunur. Bu, birdən çox ustanız və qulunuz olduqda TWI arbitrajına, toqquşmalara və serial ünsiyyətinin digər vacib aspektlərinə daxil olmağımıza imkan verəcəkdir. Başqa rulon növlərinə bahis etməyimizə imkan verən alt düymələri olan bir sıra tək 7 rəqəmli ekranlar da əlavə edəcəyik, ancaq gələcək dərslərdə gələcək. Hələlik, yalnız zər rolunu usta və iki displeyi kölə kimi görmək istəyirik. Düyməni basdığımız zaman, kod təbii bir ödəniş etməyinizə, pul qazanmağınızdan və ya bir qalibiyyətə və ya yeddiyə qədər bir "nöqtə" rulon seriyasına köçürülməyinizə qərar verəcək.

Əvvəlcə qulluq qaydalarını yazaq. Bunlar sadədir ki, edəcəkləri yeganə şey, ünvanları üçün SDA xəttini izləməkdir, çağırıldıqları təqdirdə göstərmək və göstərmək üçün yeni nömrəni oxuyacaqlar. Bu qədər! Usta onların yekunlarını izləyəcək və onları yeniləməzdən əvvəl bütün ödəniş hesablamalarını aparacaqları üçün usta ilə danışmaq belə lazım deyil. Gələcək dərslərdə ustaya məktub yazan qullarımız olacaq (məsələn, bahis məbləği üçün düymələri olan tək 7 rəqəmli ekrana sahib olduğumuzda, hər ekranda nə qədər bahis oynandığını ustaya bildirməli olacaqlar. onlara bir ünvanla müraciət edin + "master qəbuledici rejimində" master ilə zəng oxuyun), ancaq vaxtında buna çatacağıq.

Hələlik hər şey zar rul düyməsinə basmaqla, sonra bir hesablama və ya başqa bir düyməyə basmaqla və nəhayət yeni cəmləri ilə ekranların hər birinə bir mesajla təhrik olunur. Hər ödəmədən sonra, oyunçunun qazandığını və ya uduzduğunu, başqa sözlə desək, diler nağdının yuvarlandıqdan sonra sıfıra çevriləcəyini və ya yuvarlandıqdan sonra oyunçu nağdının sıfıra çevriləcəyini (nə satıcı, nə də oyunçu) müəyyən etmək üçün bir sınaq olacaq. Mənfi ola bilər, çünki yalnız 10 dollar bahis etməyə icazə veriləcək və ya 10 dollardan azdırsa nə qalıbsa).

Yəni iş belə gedəcək. Gəlin kodlaşdırmağa başlayaq.

Addım 4: Master Rabitə Kodu

Master Rabitə Kodu
Master Rabitə Kodu

İndi zar silindrinin ünsiyyət qaydasını yaza bilərik. Həm də son dəfə yazdığımızla demək olar ki, eynidir, yalnız bir deyil, iki fərqli qulla ünsiyyət quracağıq. Qeyd edək ki, qulların hər biri üçün fərqli bir ünvan istifadə edirik. Kodu özünüz dəyişdirməlisiniz və sonra hər bir ünvanla sınamalı və hər bir ayrı ekran istisna olmaqla, son dərs kimi işlədiyinə əmin olmalısınız.

Ekranın düzgün işləməsi və naqillərin yoxlanılması üçün istifadə oluna bilməsi üçün rulonun nəticəsini göstərən hər bir komponent üçün kodu əlavə edəcəyəm.

Oyunu kodlaşdırmaq, montaj dili əmrləri və ya AVR mikrokontrolör komponentləri baxımından yeni bir şey təqdim etmir və buna görə də bu xətti keçmək lazım olduğunu hiss etmirəm. Yəqin ki, yeni bir şey təqdim edərkən hər bir sətirdən keçərək yuxuya getməyəcəyiniz halda sizi əsəbiləşdirəcəyik. Digər tərəfdən yeni bir şey yoxdursa bunu etməyəcəyəm. Bu gün belədir. Beləliklə, düşünürəm ki, indiyə qədər kodla oynamağa, kodu oxumağa, kodu təhlil etməyə, kodu başa düşməyə, kodu tənqid etməyə, kodu lağa qoymağa və kodu yazan oğlana gülməyə hazırsınız. Buna görə də irəli getməyinizə icazə verəcəyəm. Yazdıqlarımı inkişaf etdirə biləcəyiniz və ya heç olmasa sadələşdirə biləcəyiniz bir çox yer tapa biləcəyiniz demək olar ki, müəyyəndir.

Həmişə olduğu kimi, bir şeyi sınadığım bir video ilə birlikdə bir sonrakı addımda iki ekran və diceroller üçün kodun son versiyasını əlavə etdim.

Addım 5: Son Kod və Video

Videonu və 3 proqramı əlavə etdim. Proqramın üstündəki mərc və başlanğıc satıcı və oyunçu pulunu.equ ifadələri ilə düzəldə biləcəyinizi görəcəksiniz.

Növbəti dərsdə, oyunu daha həyəcanlı edəcək fərqli şeylərə bahis etmək bacarığını əlavə edəcəyik. Müasir Craps -ın maraqlı tərəfi odur ki, bahis etməyinizin və bahislərinizi maksimum dərəcədə artırmağın müxtəlif yolları var. Əslində, Craps Casinoda ən yüksək bahis oyunudur! … Oynamağı bilirsinizsə. Digər tərəfdən, necə oynayacağınızı bilmirsinizsə, ən aşağı əmsallı oyunlardan birinə çevrilir.

Pulumuza bahis qoyacağımız daha çox şey olduğunda, oyundakı ümumi pul miqdarını artıracağam.

Əyləncəli olmalıyam!

Gələn dəfə görüşənədək!

Tövsiyə: