Kazalo:

AVR Assembler Tutorial 11: 5 Koraki
AVR Assembler Tutorial 11: 5 Koraki

Video: AVR Assembler Tutorial 11: 5 Koraki

Video: AVR Assembler Tutorial 11: 5 Koraki
Video: AVR Ассемблер. Урок 11. LCD. AVR Assembler. Lesson 11. LCD. 2024, Julij
Anonim
Vadnica za sestavljalec AVR 11
Vadnica za sestavljalec AVR 11
Vadnica za sestavljalec AVR 11
Vadnica za sestavljalec AVR 11
Vadnica za sestavljalec AVR 11
Vadnica za sestavljalec AVR 11

Dobrodošli v vadnici 11!

V tej kratki vadnici bomo končno zgradili prvi del našega zadnjega projekta.

Najprej morate iti na zadnji korak te vadnice in si ogledati video. Potem se vrni sem. [ustavite, medtem ko to počnete …] V redu. Zdaj pa nadaljuj.

Če še niste uganili, ustvarjamo igro Craps! Seveda samo zato, ker ustvarjam igro craps, zagotovo ne pomeni, da morate. Upam, da je to samoumevno. V vsakem primeru je koristno uporabljati mikrokrmilnike za krmiljenje segmentiranih zaslonov itd. Ter medsebojno komunikacijo - to je predvsem tisto, kar počnemo tukaj. Kodo lahko napišete, če jo želite uporabiti. Zaenkrat jih bom kodiral, da bodo igrali craps, čeprav se lahko pozneje odločim, da bom segmentirane zaslone ponovno namenil za kaj drugega.

Razlog za to, da to gradim, je, ker razmišljam, da bi si sčasoma morda želel miza za vegas v polni velikosti v moji "moški jami" v kleti moje hiše. Vendar pa nobeden od mojih prijateljev nima niti najmanjše predstave o tem, kako obravnavati, ocenjevati ali izplačevati sranje. Zato sem mislil, da bi bilo super, če bi miza za nas delala vse trgovce! Ko stavimo na mizo, lahko pritisnemo tudi majhen gumb poleg kvadrata, na katerem so naši žetoni in pokaže, koliko je tam postavljenega, potem lahko mikrokrmilnik izračuna izplačilo za ta kvadrat po bacanju kock in ga prikaže. Še vedno nisem povsem prepričan, kako bom organiziral ta vidik. Zdelo se mi je, da bodo od vsake osebe zahtevali, da po vrsti postavi vse svoje stave, tako da bo kontrolor pred snemanjem naslednjega igralca zapisal, kje je denar vsake osebe itd. Nato lahko računalnik po izidu prikaže izplačila na vsakem kvadratu in lahko obdrži tekoči "skupni denar" za vsakega igralca.

Za eno od naslovnih slik te vadnice sem moral uporabiti sliko, kako to poletje potegnem 5 asov za poker mizo v Vegasu. Heheh. Privošči mi.

Tukaj je povezava do celotne zbirke mojih vadnic za zbiranje AVR:

1. korak: Sranje

Sranje!
Sranje!
Sranje!
Sranje!
Sranje!
Sranje!

V tej vadnici bomo izdelali le najpreprostejši del zadnje igre Craps. To se imenuje "The Pass Line" in na to lahko stavite. Vse, kar morate vedeti o delu igre "pass line", se lahko naučite tako, da si ogledate kratek 2-minutni video z navodili, ki sem ga priložil temu koraku.

Zgradili bomo še en 4-mestni zaslon, ki bo spremljal denar trgovca na enak način, kot naš trenutni 4-mestni zaslon spremlja denar igralca. Prodajalec bo začel z 20 USD, igralec pa z 20 USD (skupni možni denar v igri je 9999 USD-največ naših 4-mestnih prikazov, vendar bomo za ta prvi del igre potrebovali le 20 USD ali drugače v skrajnem primeru bi bilo dolgočasno in bi jih bilo težko zmagati ali izgubiti v primernem času). Če igralec vzame ves denar trgovca, zmaga. Če igralec izgubi ves denar, zmaga trgovec.

Kako zmagate ali izgubite denar? No, tisti, ki ste igrali Craps, videli ljudi, ki so na ulici "streljali na kocke", ali videli, da igra proti igralnici v Vegasu, bodo že vedeli. Za ostale vas naj na kratko opišem del igre "pass line", ki ga bomo kodirali danes.

Craps se igra že več sto let, vse od časov križarskih vojn. Igrali so ga vojaki v jarkih druge svetovne vojne, igrali so ga na ulicah, igrali so ga v igralnicah in igralnicah. Začelo se je samo s prehodno črto, kasneje pa so bile dodane vse ostale stvari. Temu napredku bomo sledili.

Prehodna linija deluje tako. Stavite in nato postavite kocko. Prvi zvitek se imenuje "out-out roll". Če na izidu dobite 2 (kačje oči), 3 (ace deuce) ali 12 (boks avtomobili), izgubite stavo in to se imenuje "craps". Če zvrnete 7 (naravno) ali 11 (yo yo ali yo-leven), zmagate. Če zvrnete katero koli drugo številko, potem ta številka postane vaša "točka". Ko je "točka" vzpostavljena, nadaljujete z metanjem kock z namenom, da znova udarite točko, preden zvrnete 7. Če dobite točko, preden zvrnete 7, dobite celo denar. Tako stava v dolarju od prodajalca osvoji dolar. Če prejmete 7 pred uvrstitvijo vaše točke, se to imenuje "sedem ven" in izgubite stavo pri prodajalcu.

Po tem začnete znova. Stavite na linijo prehoda in vrzite kocke, 7 ali 11 zmag, 2, 3 ali 12 izgub.

Obstaja veliko več vrst stav, "ne podaj", "odstopi kvote", "ne podaj kvot", "pridi stavi", "ne priloži stave", "polje", "hupa", " težki načini "itd itd itd. Podrobnosti najdete tukaj:

en.wikipedia.org/wiki/Craps

Kot sem že rekel, bomo za zdaj kodirali le del igre, ki je bil vse, kar so imeli v tistem času, ko so otroci metali kocke ob steno za denar za kosilo in tako bomo začeli..

Preden pa začnemo s kodiranjem, naredimo prodajalčev gotovinski zaslon. Za to želim uporabiti enega od večjih 4-mestnih zaslonov, ki ga lahko dobite pri Sparkfun ali drugje. Od zdaj naprej ne bom našteval gradiva o teh vadnicah. Če ste pravzaprav vse skupaj gradili skupaj z mano, potem že veste, kje dobiti materiale in kaj so. Nesmiselno je, da jih naštejem ali koliko stanejo.

Torej, vzemimo eno od naših prototipnih plošč, velik 4-mestni zaslon, drugo ATmega328p za nadzor tega zaslona in ga zgradimo, kot smo to storili z valjčkom za kocke, in zaslonom predvajalnika. Tako kot drugi bomo priložili tudi glave za napajanje, programiranje in komunikacije TWI.

2. korak: Prikazovalnik gotovine pri prodajalcu

Zaslon gotovine trgovca
Zaslon gotovine trgovca
Zaslon gotovine trgovca
Zaslon gotovine trgovca
Zaslon gotovine trgovca
Zaslon gotovine trgovca

Zaslon prodajalca sestavimo na enak način kot predvajalnikov 4-mestni zaslon v zadnji vadnici. Edina razlika je v tem, da je večji in ima manj zatičev, zato ga bomo uredili in ožičili drugače.

Priložil sem sliko ožičenja tega zaslona. Vidite lahko, da je večji in ima manj zatičev kot zaslon igralne igralnice. Slika je s strani sparkfun, kjer sem dobil zaslon in prikazuje, kateri zatiči so napajalni za vsako številko in kateri zatiči nadzorujejo vsak segment v števki.

Kot ponavadi morate začeti tako, da priključite zaslon na svojo prototipno ploščo in preizkusite vsak segment, da se prepričate, da razumete, kako je povezan. Nato ga priključite na zatiče mikrokrmilnika AVR na vaši plošči in ga zaženite, dokler v tej vadnici ne deluje vsa naša koda. Na koncu morate zgraditi zunanjo ploščo in jo spajkati. Ko boste preizkusili končni izdelek, boste vedeli, da težave nastanejo pri spajkanju in rezanju, ne pa v kodi. Prav tako ne pozabite na dobro znani aksiom iz tesarstva "dvakrat izmeri in enkrat reži" ali v primeru izdelave tiskanih vezij: "dvakrat reži, enkrat spajkaj". Kot lahko vidite na sliki, sem se končno pokvaril in kupil popoln nastavek Dremel za tovrstno delo. "Komplet diamantnih točk". Stalo je 5 dolarjev, vendar je to veliko manj kot stroški terapije za jezo, ki prihaja do tega, da sem prevečkrat zaporedoma pospešila svoje rezalno delo.

Za ta zaslon uporabljam upore 330 ohmov. Zatiči COM gredo skozi upor do GND in moč gre na kateri koli segment, ki ga želite prikazati. Za zatiče COM bom uporabil PC0 do PC3, za segmente pa PB0, PB1, PB2, PB3, PB4, PD5, PD6 in PD7.

Tu je ključ za povečanje vaših možnosti, da to storite pravilno:

  1. preslikajte vezje
  2. prekinite vezje
  3. preverite ožičenje
  4. pritrdite upore, pokrove in kristalni oscilator
  5. ponovno preverite povezave in ožičenje
  6. pritrdite zunanje žice
  7. pritrdite mikrokrmilnik
  8. ponovno preverite ožičenje
  9. priključite 4-mestni zaslon
  10. vsako številko preverite s parom žic z mize
  11. odložite ga in napišite kodo, saj veste, da boste verjetno morali stvari kasneje popraviti in v upanju, da niste prikrili povezave, ki jo je treba prekiniti.

Pokazal sem vrsto slik mojega ožičenja. Zavedajte se, da lahko svoje pošljete po želji. Zelo verjetno boste našli boljši zemljevid od mene in ga morali uporabiti. Nič v teh vadnicah ni odvisno od tega, kako so vaše komponente ožičene, če imajo ustrezna izhodna vrata. Kar me spominja. Opazite, da sta zdaj dve glavi za SDA in dva za SCL? Zakaj mislite, da smo to storili?

Zdaj, kot lahko vidite po priloženi kodi na koncu vadnice, sem preprosto izrezal in prilepil kodo z zaslona predvajalnika zadnje vadnice v novo datoteko za prikaz prodajalca. Nato sem šel skozi in spremenil iskalno tabelo "segmenti" tako, da ustreza novemu zemljevidu pin, pri čemer sem opozoril, da so za ta prikaz "com" zatiči ozemljeni, segmentni zatiči pa 5V in ne obratno, kot je bilo za drugi zaslon. Spremenil sem tudi inicializacijo vrat, da bi odražala novo ožičenje, spremenil sem naslov prikazovalnika blagajne prodajalca na 0b1000000, tako da se bo z njim lahko pogovarjal valjček za kocke, spremenil sem podprogram "cikel", tako da izklopi PC0 do PC3 "com" zatiči, ko želi napajati določen segment in sem spremenil "številko", ki se prikaže, saj ima novo ožičenje števke v nasprotnem vrstnem redu (če ste ga pustili tako in poskusili prikazati 1234 bi se namesto tega prikazal kot 4321).

Tu je nov zemljevid registra:

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

kjer je 1 ON in 0 OFF.

Zdaj preizkusite zaslon tako, da najprej nastavite začetno vrednost zaslona na različne številke, tako da jih prikaže, ko se vklopi. To vam bo povedalo, če vse deluje pravilno.

Nato spremenite kodo dicerollerja tako, da uporablja nov naslov za podrejenega, jih povežite in zaženite. Moral bi delovati točno tako, kot smo naredili v zadnji vadnici, le da se kocke zdaj prikažejo na novem zaslonu.

Super! Zdaj smo pripravljeni napisati novo kodo kocke, tako da komunicira tako z zaslonom predvajalnika kot z zaslonom prodajalca.

3. korak: oris programa

Osnutek programa
Osnutek programa
Osnutek programa
Osnutek programa
Osnutek programa
Osnutek programa

Način, kako bo koda delovala za našo igro, je, da bomo igralni kocki obdržali kot glavnega in dodali razdeljevalni prikaz kot dodatnega sužnja. Igralec za kocke bo nadzoroval igro in posledične spremembe v gotovini poslal trgovcu, igralec pa prikaže po vsakem bacanju. Zaenkrat bomo imeli stavo na pasovni liniji vsakič 10 USD, tako da se nam še ni treba preveč zapletati, ko igralec spremeni stavo. Kasneje, ko bodo mehaniki delovali, bomo dodali še enega krmilnika, ki bo dodatni mojster, ki bo nadzoroval stave in izplačila, naš igralec kock pa bo ostal mojster, vendar se bo uporabljal samo za metanje kock. To nam bo omogočilo dostop do arbitraže TWI, trkov in drugih pomembnih vidikov serijske komunikacije, če imate več gospodarjev in podrejenih. Dodali bomo tudi številne enojne 7-mestne zaslone s potisnimi gumbi pod njimi, ki nam bodo omogočili, da stavimo na druge vrste zvitkov, vse to pa bo prišlo v prihodnjih vadnicah. Za zdaj si želimo samo kocke kot glavnega, dva zaslona pa kot sužnja. Ko pritisnemo gumb, se bo koda odločila, ali bo izplačala natural, vzela denar iz crapsa ali se razvejala na niz točk "point" do zmage ali sedem-out.

Najprej zapišemo podrejene rutine. Ti so preprosti, saj bodo le opazovali naslov SDA, če bodo poklicani, bodo prebrali novo številko, da jo prikažejo in prikažejo. To je vse! Z mojstrom se jim niti ni treba pogovarjati, saj bo mojster spremljal njihove vsote in opravil vse izračune izplačil, preden jih posodobi. V prihodnjih vadnicah bomo sužnje pisali gospodarju (na primer, ko imamo enojne 7-mestne zaslone s potisnimi gumbi za znesek stav, bodo morali povedati poveljniku, koliko se stavi na vsak zaslon, zato bomo nagovorite jih z naslovom + preberite klic z glavnim v "glavnem sprejemniškem načinu"), vendar bomo do tega prišli pravočasno.

Za zdaj vse spodbudi pritisk gumba za kocke, ki mu sledi izračun ali nadaljnji pritisk gumba in na koncu sporočilo vsakemu zaslonu z novimi vsotami. Po vsakem izplačilu bo potekal test, s katerim se ugotovi, ali je igralec zmagal ali izgubil, z drugimi besedami, če delilčeva gotovina po nihanju postane nič ali če igralčeva gotovina po nihanju postane nič (niti delivec niti igralec lahko postanejo negativni, saj bodo lahko stavili le 10 USD ali karkoli drugega, če je manjše od 10 USD).

Torej bo tako delovalo. Gremo na kodiranje.

4. korak: Glavna komunikacijska koda

Glavna komunikacijska koda
Glavna komunikacijska koda

Zdaj lahko napišemo komunikacijsko rutino kockarja. Prav tako je skoraj enak tistemu, ki smo ga napisali zadnjič, le da bomo komunicirali z dvema različnima sužnjema in ne le z enim. Upoštevajte, da za vsakega od podrejenih uporabimo drugačen naslov. Kodo morate spremeniti sami, nato pa jo preprosto preizkusiti z vsakim naslovom in se prepričati, da deluje tako kot zadnja vadnica, razen z vsakim ločenim zaslonom.

Priložil bom kodo za vsako komponento, ki preprosto prikaže rezultat zvitka, tako da se lahko uporabi za pravilno delovanje zaslonov in preverjanje ožičenja.

Kodiranje igre ne prinaša nič novega, kar zadeva ukaze montažnega jezika ali komponente mikrokrmilnika AVR, zato se mi ne zdi, da bi to moral obravnavati po vrsticah. Verjetno ste opazili, da ko predstavimo kaj novega, podrobno prečrtam vsako vrstico do te mere, da vas razjezim, če ne spim. Po drugi strani tega ne bom storil, če ne bo predstavljeno nič novega. Tako je danes. Zato mislim, da ste se zdaj pripravljeni igrati s kodo, prebrati kodo, analizirati kodo, razumeti kodo, kritizirati kodo, se posmehovati kodi in se smejati fantu, ki je kodo napisal. Zato vam bom dovolil, da to storite. Skoraj gotovo je, da boste našli veliko krajev, ki jih lahko izboljšate ali vsaj poenostavite, kar sem napisal.

Kot ponavadi sem v naslednjem koraku priložil končno različico kode za oba zaslona in igralni kotiček skupaj z video posnetkom, kako to preizkušam.

5. korak: Končna koda in video

Priložil sem video in 3 programe. Opazili boste, da lahko na vrhu programa popravite stavo in začetni trgovec in igralca z izjavami.equ.

V naslednji vadnici bomo dodali možnost stave na različne stvari, ki bodo igro naredile bolj razburljivo. Zanimivost sodobnega Crapsa je, da imate na voljo veliko različnih načinov stav in poskušate povečati svoje kvote. Pravzaprav je Craps igra z najvišjo kvoto v igralnici! … ČE veste, kako se igra. Po drugi strani pa, če ne znate igrati, postane ena izmed iger z najnižjo kvoto.

Ko bomo imeli več stvari, na katere lahko stavimo svoj denar, bom povečal skupni znesek denarja v igri.

Moral bi biti zabaven!

Se vidimo naslednjič!

Priporočena: