Sisukord:

AVR Assembleri õpetus 11: 5 sammu
AVR Assembleri õpetus 11: 5 sammu

Video: AVR Assembleri õpetus 11: 5 sammu

Video: AVR Assembleri õpetus 11: 5 sammu
Video: Программирование AVR на языке Ассемблер, часть 5 1"Бегущие огни" 2024, November
Anonim
AVR Assembleri õpetus 11
AVR Assembleri õpetus 11
AVR Assembleri õpetus 11
AVR Assembleri õpetus 11
AVR Assembleri õpetus 11
AVR Assembleri õpetus 11

Tere tulemast juhendisse 11!

Selles lühikeses õpetuses ehitame lõpuks oma lõpliku projekti esimese osa.

Esimene asi, mida peaksite tegema, on minna selle õpetuse viimasele sammule ja vaadata videot. Siis tule siia tagasi. [peatudes, kui sa seda teed …] Olgu. Nüüd jätkake.

Kui te pole veel arvanud, ehitame Craps mängu! Muidugi, see, et ma ehitan crapsimängu, ei tähenda kindlasti, et peate. Loodan, et see on ütlematagi selge. Kasulik on igal juhul kasutada mikrokontrollereid segmenteeritud kuvarite jms juhtimiseks ja üksteisega suhtlemiseks - seda me siin peamiselt teemegi. Võite kasutada koodi, et neid igal juhul kasutada. Praegu kavatsen neid kodeerida, et mängida craps'i, ehkki võin hiljem otsustada segmenteeritud kuvarite uueks otstarbeks midagi muud teha.

Põhjus, miks ma seda ehitan, on see, et ma mõtlen, et ma võiksin lõpuks soovida täissuuruses Vegas Craps lauda oma "mehe koopasse" oma maja keldrisse. Kuid ühelgi mu sõbral pole vähimatki ettekujutust, kuidas craps -panuseid ja -rulle käsitleda, skoorida või välja maksta. Nii ma arvasin, et oleks lahe, kui laud teeks meie eest kõik edasimüüja tööd! Kui paneme lauale panuse, võime ruudu kõrval vajutada ka väikest nuppu, et meie žetoonid näitaksid, kui palju sinna on paigutatud, siis saab mikrokontroller arvutada selle ruudu väljamakse pärast täringuviskamist ja seda kuvada. Ma ei ole siiski päris kindel, kuidas ma seda aspekti korraldan. Üks mõte oli mul see, et igal inimesel palutakse teha kõik oma panused kordamööda, et kontroller salvestaks enne järgmise mängija salvestamist, kus iga inimese raha on ja nii edasi. Seejärel saab arvuti pärast rullimist näidata väljakuid igal väljakul ja võib hoida ka jooksvat "kogu sularaha" iga mängija kohta.

Selle õpetuse ühe kaanepildi jaoks pidin lihtsalt kasutama pilti, kuidas tõmbasin sel suvel Vegases pokkerilauas 5 ässa. Heheh. Hellita mind.

Siin on link minu AVR-i komplekteerija õpetuste kogu kogumikule:

Samm: Craps

Craps!
Craps!
Craps!
Craps!
Craps!
Craps!

Selles õpetuses ehitame ainult Crapi lõpliku mängu lihtsaima osa. Seda nimetatakse "The Pass Line" ja saate sellele panustada. Mängu "pass line" osa kohta saate teada kõike, mida peate teadma, vaadates lühikest 2-minutilist õppevideot, mille olen sellele sammule lisanud.

Ehitame veel neljakohalise ekraani, mis jälgib edasimüüja sularaha samamoodi nagu meie praegune neljakohaline ekraan jälgib mängija sularaha. Edasimüüja alustab 20 dollariga ja mängija 20 dollariga (kogu võimalik raha mängus on 9999 dollarit-maksimaalne meie 4-kohaline kuvamine, kuid selle esimese mängu jaoks vajame ainult 20 dollarit või muidu oleks äärmuslikult tüütu ja korraliku ajaga raske võita või kaotada). Kui mängija võtab kogu diileri raha, võidab mängija. Kui mängija kaotab kogu oma raha, võidab diiler.

Kuidas raha võita või kaotada? Need, kes olete mänginud Crapsit, näinud inimesi tänaval täringuid tulistamas või näinud seda Vegases kasiino vastu mängimas, teavad juba. Ülejäänud jaoks lubage mul anda teile lühike kirjeldus mängu "pass line" osast, mida me täna kodeerime.

Crapsit on mängitud sadu aastaid, mis pärinevad ristisõdade ajast. Seda mängisid väed II maailmasõja kaevikutes, seda mängiti tänavatel, seda mängiti kasiinodes ja hasartmängusaalides. See algas lihtsalt söödujoonega ja kõik muud asjad lisati sellele hiljem. Me jälgime sama arengut.

Pääsuliini tööviis on selline. Teed panuse ja siis viskad täringut. Esimest rulli nimetatakse "come-out rolliks". Kui saate 2 (madu silmad), 3 (äss deuce) või 12 (kastiautod) väljatulekuveerul, kaotate oma panuse ja seda nimetatakse "crapsiks". Kui viskad 7 (loomulik) või 11 (yo või yo-leven), võidad. Kui veeretate mõnda muud numbrit, muutub see number teie "punktiks". Kui "punkt" on paika pandud, jätkate täringute viskamist eesmärgiga tabada punkti uuesti enne 7. veeretamist. Kui saate punkti enne seitsme viskamist, võidate isegi raha. Seega võidab dollaripanus teile edasimüüjalt dollari. Kui saate enne punkti viskamist 7, nimetatakse seda "seitsmeks" ja kaotate panuse edasimüüjale.

Pärast seda alustate uuesti. Panustage söödujoonele ja visake täring, 7 või 11 võitu, 2, 3 või 12 kaotust.

Ennustusi on palju rohkem, "ei möödu", "läbida koefitsiendid", "ei möödu koefitsiente", "tule panustama", "ära tule panustama", "väli", "sarv", " rasked viisid "jne jne jne Üksikasju leiate siit:

en.wikipedia.org/wiki/Craps

Nagu ma juba eespool ütlesin, kodeerime praegu ainult mängu passiosa, mis oli neil päevil, mil lapsed viskasid üksteise lõunaraha eest täringuid vastu seina ja seega alustame sellest.

Enne kraami kodeerimise alustamist loome siiski edasimüüja sularahaekraani. Selleks tahan kasutada ühte suuremat 4-kohalist ekraani, mille saate Sparkfunist või mujalt. Nüüdsest ei hakka ma nende õpetuste materjale loetlema. Kui olete tegelikult kogu aeg koos minuga ehitanud, siis teate juba, kust materjale hankida ja mis need on. Mul on mõttetu neid loetleda või kui palju need maksavad.

Nii et haarame ühe meie prototüüpimisplaatide, suure neljakohalise ekraani, teise ATmega328p, et seda kuvarit juhtida, ja ehitada see nii, nagu tegime täringurulliga, ja mängijakuva varem. Samuti lisame päised toite, programmeerimise ja TWI -side jaoks nagu teisedki.

2. samm: edasimüüja sularaha kuvamine

Müüja sularaha kuva
Müüja sularaha kuva
Müüja sularaha kuva
Müüja sularaha kuva
Müüja sularaha kuva
Müüja sularaha kuva

Konstrueerime edasimüüja ekraani samamoodi nagu tegime mängija 4-kohalisel ekraanil eelmises õpetuses. Ainus erinevus on see, et see on suurem ja sellel on vähem tihvte, nii et me korraldame selle ja ühendame selle teisiti.

Lisasin pildi selle ekraani juhtmestikust. Näete, et see on suurem ja sellel on vähem nööpnõelu kui meie mängukassa ekraanil. Pilt on pärit sparkfuni lehelt, kus ma sain ekraani, ja see näitab, millised tihvtid on iga numbri jaoks võimsad ja millised tihvtid juhivad iga numbri segmenti.

Nagu tavaliselt, peaksite alustama ekraani ühendamisest oma prototüüpimise leivalauaga ja katsetama iga segmenti, et olla kindel, et saate aru, kuidas see on ühendatud. Seejärel ühendage see oma leivaplaadil oleva AVR -i mikrokontrolleri kontaktidega ja käivitage see sealt, kuni kogu meie kood selles õpetuses töötab. Lõpuks peaksite lõpus ehitama välise plaadi ja jootma selle peale. Lõpptoote testimisel teate, et kõik probleemid tulenevad teie jootmis- ja lõikamistööst, mitte koodist. Samuti ärge unustage puusepatöödest tuntud aksioomi "mõõtke kaks korda ja lõigake üks kord" või trükkplaatide valmistamise puhul: "lõigake kaks korda, jootke üks kord". Nagu pildilt näha, läksin lõpuks katki ja ostsin sellise töö jaoks ideaalse Dremeli kinnituse. "Teemantpunkti komplekt". See maksis 5 taala, kuid see on palju väiksem kui viha juhtimise teraapia hind, mis kaasneb minu lõikamistööde liiga paljude kordade järjest eemaldamisega.

Selle ekraani jaoks kasutan 330 oomi takistit. COM -tihvtid lähevad läbi takisti GND -le ja toide läheb mis tahes segmendile, mida soovite kuvada. Ma kasutan PC0 kaudu PC3 COM -nööpnõelte jaoks ja PB0, PB1, PB2, PB3, PB4, PD5, PD6 ja PD7 segmentide jaoks.

Siin on võti, et maksimeerida oma võimalused õigeks saada:

  1. skeemi kaardistada
  2. katkesta vooluring
  3. kontrollige oma juhtmestikku
  4. kinnitage takistid, korgid ja kristallostsillaator
  5. kontrollige ühendusi ja juhtmeid uuesti
  6. ühendage välisjuhtmed
  7. kinnitage mikrokontroller
  8. kontrollige juhtmestikku uuesti
  9. 4-kohaline ekraan
  10. kontrollige iga numbrit leivaplaadilt juhtmetega
  11. pange see kõrvale ja kirjutage kood, teades, et tõenäoliselt peate hiljem asju muutma ja lootes, et te pole katkestanud ühendust katnud.

Olen näidanud oma pildistamistööde pildiseeriaid. Võtke teadmiseks, et saate vabalt juhtmevett ühendada mis tahes viisil, mis teile meeldib. On väga tõenäoline, et leiate parema kaardi kui mina ja peaksite seda kasutama. Ükski nendest õpetustest ei sõltu sellest, kuidas teie komponendid on ühendatud, kui neil on õiged väljundpordid. Mis tuletab mulle meelde. Pange tähele, et nüüd on kaks päist SDA -le ja kaks SCL -ile? Miks sa arvad, et me seda tegime?

Nüüd, nagu näete õpetuse lõpus olevast lisatud koodist, lõikasin ja kleepisin koodi viimase õpetuse mängijakuvalt lihtsalt uueks failiks edasimüüja kuva jaoks. Seejärel läksin läbi ja muutsin segmentide otsingu tabelit uuele tihvtikaardile vastavaks, märkides, et selle ekraani jaoks on "com" tihvtid maandatud ja segmendi tihvtid on 5 V, mitte vastupidi, nagu teise ekraani puhul. Muutsin ka portide lähtestamist, et kajastada uut juhtmestikku, muutsin edasimüüja kassa kuva aadressiks 0b1000000, et täringurull saaks temaga rääkida, muutsin alamprogrammi "tsükkel" nii, et see lülitab välja PC0 kaudu PC3 "com" nööpnõelad, kui see soovib teatud segmenti toita ja ma muutsin kuvatavat "numbrit", kuna uuel juhtmestikul on numbrid vastupidises järjekorras (kui jätsite selle nii, nagu see oli ja proovisite seda kuvada 1234 oleks selle asemel näidanud numbrit 4321).

Siin on uus registrikaart:

(PD7, PD6, PD5, PB4, PB3, PB2, PB1, PB0) = (koma, c, g, b, f, a, e, d)

kus 1 on sees ja 0 on väljas.

Nüüd kontrollige ekraani, seadistades esmalt kuvari lähtestatud väärtuseks erinevad numbrid, nii et kui see sisse lülitatakse, kuvatakse need. See ütleb teile, kas kõik töötab õigesti.

Seejärel muutke dicerolleri koodi nii, et see kasutaks orja uut aadressi, ühendage need kokku ja käivitage see. See peaks toimima täpselt nii, nagu tegime eelmises õpetuses, välja arvatud see, et täringurullid kuvatakse nüüd uuel ekraanil.

Suurepärane! Nüüd oleme valmis kirjutama uue täringurulli koodi nii, et see suhtleks nii mängija kuvari kui ka edasimüüja kuvariga.

3. samm: programmi ülevaade

Programmi ülevaade
Programmi ülevaade
Programmi ülevaade
Programmi ülevaade
Programmi ülevaade
Programmi ülevaade

Kood hakkab meie mängu jaoks töötama nii, et hoiame täringurulli peremehena ja lisame edasimüüja kuva täiendava orjana. Täringurull juhib mängu ja saadab sellest tulenevad muudatused sularahas diilerile ning mängija kuvab pärast iga viset. Praegu on meil passipanus iga kord 10 dollarit, nii et me ei pea veel liiga keeruliseks muutuma, kui mängija panust muudab. Hiljem, kui mehaanika töötab, lisame veel ühe kontrolleri, kes on täiendav kapten, kes kontrollib kihlvedusid ja väljamakseid ning meie täringurull jääb kapteniks, kuid seda kasutatakse ainult täringute veeretamiseks. See võimaldab meil siseneda TWI vahekohtumenetlusse, kokkupõrgetesse ja muudesse jadaühenduse olulistesse aspektidesse, kui teil on mitu isandat ja orja. Lisame ka hulga üksikuid 7-kohalisi kuvarid, mille all on nupud, mis võimaldavad meil panustada muud tüüpi rullidele, kuid kõik see tuleb tulevastes õpetustes. Praegu tahame lihtsalt täringurulli peremeheks ja kahte näidikut orjadeks. Kui me nuppu vajutame, otsustab kood, kas maksta välja loomulik, võtta raha crapsilt või hargneda "punkti" rullide seeriasse kuni võidu või seitsmevõiduni.

Kirjutame kõigepealt orja rutiinid. Need on lihtsad selle poolest, et kõik, mida nad teevad, on vaadata oma aadressi SDA real, kui neile helistatakse, loevad nad uue numbri selle kuvamiseks ja kuvamiseks. See on kõik! Nad ei pea isegi kapteniga tagasi rääkima, kuna kapten jälgib nende kogusummasid ja teeb kõik väljamakse arvutused enne nende värskendamist. Tulevastes õpetustes kirjutame orjad kaptenile tagasi (näiteks kui meil on ühekordne 7-kohaline ekraan, millel on kihlvedude summa jaoks vajutusnupud, peavad nad kaptenile ütlema, kui palju panustatakse igale ekraanile ja nii pöörduge nende poole aadressiga + lugege kõne kapteniga "põhivastuvõtja režiimis"), kuid jõuame selleni õigel ajal.

Praegu käivitab kõik täringuviske nupu vajutamine, millele järgneb arvutamine või nupuvajutused ja lõpuks teade igale ekraanile koos nende uute kogusummadega. Pärast iga väljamakse tegemist tehakse test, et teha kindlaks, kas mängija on võitnud või kaotanud, teisisõnu, kas diileri sularaha muutub pärast rullimist nulliks või kui mängija sularaha muutub pärast nulli (ei diiler ega mängija) võib minna negatiivseks, kuna neil on lubatud panustada ainult 10 dollarit või muud, mis jääb alles, kui see on alla 10 dollari).

Nii et see hakkab toimima. Hakkame kodeerima.

4. samm: põhikommunikatsioonikood

Suhtluskoodeks
Suhtluskoodeks

Nüüd saame kirjutada täringurulli suhtlusrutiini. See on ka peaaegu identne sellega, mille me eelmisel korral kirjutasime, välja arvatud see, et suhtleme kahe erineva orjaga, mitte ainult ühega. Pange tähele, et iga orja jaoks kasutame erinevat aadressi. Peaksite koodi ise muutma ja seejärel lihtsalt katsetama seda iga aadressiga ning veenduma, et see töötab nagu eelmine õpetus, välja arvatud iga eraldi kuva puhul.

Lisan iga komponendi koodi, mis kuvab lihtsalt rulli tulemuse, et seda saaks kasutada kuvarite nõuetekohaseks toimimiseks ja juhtmestiku kontrollimiseks.

Mängu kodeerimine ei too koostamiskeele käskude või AVR-i mikrokontrollerikomponentide osas midagi uut ja seega ei tunne ma, et peaksin seda rida-realt läbima. Olete ilmselt märganud, et kui me midagi uut tutvustame, käin iga rida üksikasjalikult läbi, kuni teid ärevust tekitab, kui mitte magama panema. Teisest küljest ei tee ma seda, kui midagi uut ei tutvustata. See on tänapäeval nii. Nii et ma arvan, et olete praeguseks valmis koodiga mängima, koodi läbi lugema, koodi analüüsima, koodist aru saama, koodi kritiseerima, koodi üle pilkama ja koodi kirjutanud tüübi üle naerma. Nii et ma lasen sul edasi minna ja seda teha. On peaaegu kindel, et leiate palju kohti, mida saate minu kirjutatut parandada või vähemalt lihtsustada.

Olen nagu tavaliselt lisanud kahe kuvari ja dicerolleri koodi lõpliku versiooni järgmises etapis koos videoga, kus ma asja katsetan.

Samm: lõplik kood ja video

Lisasin video ja kolm programmi. Märkate, et saate panuse ja alustava diileri ning mängija sularaha parandada programmi ülaosas.equ avaldustega.

Järgmises õpetuses lisame võimaluse panustada erinevatele asjadele, mis muudavad mängu põnevamaks. Kaasaegsete Crapside juures on huvitav see, et teil on palju erinevaid panustamisviise ja proovige oma koefitsiente maksimeerida. Tegelikult on Craps kasiino kõrgeima koefitsiendiga mäng! … KUI teate, kuidas seda mängida. Teisest küljest, kui te ei tea, kuidas mängida, saab sellest üks madalaima koefitsiendiga mänge.

Kui meil on rohkem asju, millele oma raha panustada, suurendan ma mängu rahasummat.

Ma peaksin lõbus olema!

Näeme järgmine kord!

Soovitan: