Sadržaj:

AVR Assembler Tutorial 11: 5 Koraci
AVR Assembler Tutorial 11: 5 Koraci

Video: AVR Assembler Tutorial 11: 5 Koraci

Video: AVR Assembler Tutorial 11: 5 Koraci
Video: Что такое депрессия? — Хелен М. Фаррелл 2024, Novembar
Anonim
AVR asemblerski vodič 11
AVR asemblerski vodič 11
AVR asemblerski vodič 11
AVR asemblerski vodič 11
AVR asemblerski vodič 11
AVR asemblerski vodič 11

Dobro došli u Vodič 11!

U ovom kratkom vodiču konačno ćemo izgraditi prvi dio našeg završnog projekta.

Prvo što trebate učiniti je otići do posljednjeg koraka ovog vodiča i pogledati video. Onda se vrati ovamo. [pauzirajte dok to radite …] U redu. Sada nastavite.

Ako već niste pogodili, gradimo Craps igru! Naravno, samo zato što pravim craps igru svakako ne znači da morate. Nadam se da se to podrazumeva. U svakom slučaju korisno je koristiti mikrokontrolere za upravljanje segmentiranim ekranima itd. I međusobnu komunikaciju - to je ono što uglavnom radimo ovdje. Možete napisati kôd da biste ih koristili kako god želite. Za sada ću ih kodirati kako bi igrali craps, iako ću kasnije možda odlučiti da ponovo namjenim segmentirane zaslone kako bi učinili nešto drugo.

Razlog zbog kojeg ovo gradim je taj što razmišljam da bih na kraju možda želio stol za vegas u Vegasu u punoj veličini u mojoj "pećini za muškarce" u podrumu moje kuće. Međutim, niko od mojih prijatelja nema ni najmanju ideju kako se bave okladama i rezultatima. Pa sam zaključio da bi bilo super da stol obavi sav posao trgovca za nas! Kada stavimo opkladu na stol, možemo pritisnuti i malo dugme pored kvadrata na kojem se nalaze naši žetoni pokazujući koliko je tu stavljeno, tada mikrokontroler može izračunati isplatu za taj kvadrat nakon bacanja kockica i prikazati ga. Ipak, još nisam siguran kako ću organizirati ovaj aspekt. Pomislio sam da će od svake osobe biti zatraženo da redom položi sve svoje oklade kako bi kontrolor zabilježio gdje se nalazi novac svake osobe prije snimanja sljedećeg igrača i tako dalje. Zatim, nakon bacanja, računar može prikazati isplate na svakom kvadratu, a takođe može zadržati tekuću "ukupnu gotovinu" za svakog igrača.

Za jednu od naslovnih slika ovog vodiča samo sam morao upotrijebiti svoju sliku kako ovog ljeta vučem 5 asova za poker stolom u Vegasu. Heheh. Udovolji mi.

Evo veze do kompletne zbirke mojih vodiča za AVR asembler:

Korak 1: Sranje

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

U ovom ćemo vodiču konstruirati samo najjednostavniji dio posljednje igre Craps. Ovo se zove "The Pass Line" i na to se možete kladiti. Možete naučiti sve što trebate znati o "pass line" dijelu igre gledajući kratki dvominutni video s uputama koji sam priložio ovom koraku.

Napravićemo još jedan četvorocifreni ekran koji će pratiti gotovinu dilera na isti način na koji naš trenutni četvorocifreni ekran prati gotovinu igrača. Trgovac će početi s 20 dolara, a igrač s 20 dolara (ukupni mogući novac u igri je 9999 dolara-najviše od naših 4-znamenkastih prikaza, ali trebat će nam samo 20 dolara za ovaj prvi dio igre ili inače bilo bi ekstremno dosadno i teško bi se pobijedilo ili izgubilo u pristojnom vremenu). Ako igrač uzme sav novac djelitelja, igrač pobjeđuje. Ako igrač izgubi sav svoj novac, diler pobjeđuje.

Kako osvajate ili gubite novac? Pa, vi koji ste igrali Craps, vidjeli ljude kako na ulici "pucaju na kockice" ili su vidjeli kako se igra protiv kockarnice u Vegasu, već će znati. Za vas ostale, dopustite mi da vam dam kratak opis "pass line" dijela igre koji ćemo danas kodirati.

Craps se svira stotinama godina, još iz vremena krstaških ratova. Igrale su ga trupe u rovovima Drugog svjetskog rata, igralo se na ulicama, igralo se u kockarnicama i kockarnicama. Počelo je samo prolaznom linijom, a sve ostale stvari su joj dodane kasnije. Pratit ćemo ovu istu progresiju.

Ovako funkcionira prolazna linija. Uložite okladu, a zatim bacite kockicu. Prva rola se naziva "rola koja izlazi". Ako dobijete 2 (zmijske oči), 3 (ace deuce) ili 12 (boks kola) na izlazu, gubite opkladu i to se naziva "craps". Ako bacite 7 (prirodno) ili 11 (yo yo ili yo-leven) dobit ćete. Ako okrenete bilo koji drugi broj, onda taj broj postaje vaš "bod". Jednom kada se "poen" uspostavi, nastavljate bacati kockice s ciljem da ponovo pogodite bod prije bacanja 7. Ako dobijete svoj bod prije bacanja 7, osvajate čak i novac. Dakle, opklada u dolarima osvaja dolar od dilera. Ako dobijete 7 prije nego što vaš poen bude uložen, to se zove "7 out" i gubite okladu od djelitelja.

Nakon toga krećete iznova. Stavite opkladu na liniju dodavanja i bacite kockice, 7 ili 11 pobjeda, 2, 3 ili 12 poraza.

Postoji mnogo više vrsta oklada, "ne dodaj", "probi kvote", "ne prođi kvote", "dođi na okladu", "nemoj se kladiti", "polje", "rog", " teški načini ", itd itd itd itd. Detalje možete pronaći ovdje:

en.wikipedia.org/wiki/Craps

Kao što sam već rekao, za sada ćemo kodirati samo dio igre sa prolazom, što je sve što su imali u danu kada su djeca bacala kockice u zid jedni drugima za ručak, pa ćemo ovdje početi.

Međutim, prije nego što počnemo kodirati, napravimo prodajni ekran za prodavače. U tu svrhu želim upotrijebiti jedan od većih četveroznamenkastih zaslona koje možete nabaviti od Sparkfuna ili drugdje. Od sada neću nabrajati materijale o ovim vodičima. Ako ste sve zajedno gradili zajedno sa mnom, onda već znate gdje nabaviti materijale i šta su oni. Besmisleno je da ih navodim ili koliko koštaju.

Pa hajde da uzmemo jednu od naših ploča za izradu prototipova, veliki četverocifreni ekran, drugi ATmega328p za kontrolu tog ekrana i izgradimo ga kao što smo to radili sa valjkom za kockice i ekranom igrača. Također ćemo priložiti zaglavlja za napajanje, za programiranje i za TWI komunikacije, baš kao i drugi.

Korak 2: Prikaz gotovine dilera

Izložba gotovine dilera
Izložba gotovine dilera
Izložba gotovine dilera
Izložba gotovine dilera
Izložba gotovine dilera
Izložba gotovine dilera

Konstruišemo ekran dilera na isti način kao što smo uradili sa četvorocifrenim ekranom igrača u prošlom vodiču. Jedina razlika je u tome što je veći i ima manje pinova, pa ćemo ga urediti i ožičiti drugačije.

Priložio sam sliku ožičenja ovog ekrana. Možete vidjeti da je veći i da ima manje pinova od našeg prikaza blagajne. Slika je sa sparkfun stranice na kojoj sam dobio ekran i pokazuje koji pinovi su napajanje za svaku cifru, a koji kontroliraju svaki segment u znamenci.

Kao i obično, trebali biste započeti uključivanjem zaslona u matičnu ploču za izradu prototipova i testirati svaki segment kako biste bili sigurni da razumijete kako je ožičen. Zatim biste ga trebali spojiti na pinove AVR mikrokontrolera na vašoj matičnoj ploči i pokrenuti ga odatle dok sav naš kôd ne radi u ovom vodiču. Konačno, na kraju trebate izgraditi vanjsku ploču i lemiti je. Zatim, kada isprobate konačni proizvod, znat ćete da svi problemi proizlaze iz posla lemljenja i rezanja, a ne iz koda. Također, ne zaboravite dobro poznati aksiom iz stolarije "izmjeri dvaput, a jednom reži", ili u slučaju izrade ploča: "dvaput reži, jednom lemi". Kao što vidite na slici, konačno sam se pokvario i kupio savršen Dremel nastavak za ovu vrstu posla. "Set dijamantskih točaka". Koštala je 5 dolara, ali to je mnogo manje od troškova terapije upravljanja ljutnjom koja dolazi s tim da mi previše puta uzastopno otežava posao rezanja.

Za ovaj ekran koristim otpornike od 330 ohma. COM pinovi prolaze kroz otpornik do GND -a, a napajanje ide u bilo koji segment koji želite prikazati. Koristit ću PC0 do PC3 za COM pinove, a PB0, PB1, PB2, PB3, PB4, PD5, PD6 i PD7 za segmente.

Evo ključa za povećanje vaših šansi da to ispravite:

  1. preslikajte krug
  2. prekinuti strujno kolo
  3. provjerite ožičenje
  4. priključite otpornike, kape i kristalni oscilator
  5. ponovo provjerite veze i ožičenje
  6. priključite vanjske žice
  7. priključite mikrokontroler
  8. ponovo provjerite ožičenje
  9. priključite 4-cifreni ekran
  10. provjerite svaku znamenku parom žica s matične ploče
  11. ostavite ga po strani i napišite kôd, znajući da ćete vjerojatno morati kasnije dotjerati stvari i nadajući se da niste prikrili vezu koju je potrebno prekinuti.

Pokazao sam niz slika svog električnog posla. Molimo vas da shvatite da možete poslati svoje na bilo koji način. Vrlo je vjerojatno da ćete pronaći bolju kartu od mene i da biste je trebali koristiti. Ništa u ovim vodičima ne ovisi o tome kako su vaše komponente ožičene, sve dok imaju ispravne izlazne priključke. Što me podseća. Primijetite da sada postoje dva zaglavlja koja idu u SDA, a dva u SCL? Zašto mislite da smo to uradili?

Sada, kao što vidite po priloženom kodu na kraju vodiča, jednostavno sam izrezao i zalijepio kôd s ekrana playera zadnjeg vodiča u novu datoteku za prikaz distributera. Zatim sam pregledao i promijenio tablicu pretraživanja "segmenata" tako da odgovara novoj karti s napomenama, primijetivši da su za ovaj prikaz "com" pinovi uzemljeni i da su segmentni pinovi 5V, a ne obrnuto kao što je to bio slučaj s drugim zaslonom. Promijenio sam i inicijalizaciju portova tako da odražava novo ožičenje, promijenio sam adresu prikaza gotovinskog računa trgovca na 0b1000000 tako da valjak za kockice može razgovarati s njim, promijenio sam potprogram "ciklus" tako da isključuje PC0 do PC3 "com" pinovi kada želi napajati određeni segment, a ja sam promijenio "cifru" koja se prikazuje budući da novo ožičenje ima znamenke u suprotnom redoslijedu (ako ste ga ostavili onakvim kakav je bio i pokušali prikazati 1234 umjesto toga bi se prikazao kao 4321).

Evo nove mape registra:

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

gdje je 1 UKLJUČEN, a 0 ISKLJUČEN.

Sada testirajte zaslon tako da prvo postavite početnu vrijednost zaslona na različite brojeve tako da ih, kada se uključi, prikazuje. Ovo će vam reći radi li sve ispravno.

Zatim izmijenite kod dicerollera tako da koristi novu adresu za slave, spojite ih zajedno i pokrenite. Trebalo bi se ponašati baš kao što smo radili u prošlom vodiču, osim što se kockice sada pojavljuju na novom ekranu.

Odlično! Sada smo spremni za pisanje novog koda za kockice tako da komunicira i sa ekranom igrača i sa ekranom dilera.

Korak 3: Pregled programa

Pregled programa
Pregled programa
Pregled programa
Pregled programa
Pregled programa
Pregled programa

Način na koji će kod funkcionirati za našu igru je da ćemo zadržati valjak za kockice kao glavni i dodati djeliteljev prikaz kao dodatni rob. Kockač će kontrolirati igru i poslat će rezultirajuće promjene u gotovini djelitelju i igrač prikazuje nakon svakog bacanja. Za sada ćemo imati samo opkladu na prolaznoj liniji svaki put 10 USD, tako da se ne moramo previše komplikovati samo sa tim da igrač promijeni svoju opkladu. Kasnije, kad mehaničari budu radili, dodat ćemo još jedan kontroler koji će biti dodatni majstor koji će kontrolirati klađenje i isplate, a naš valjak za kockice će ostati majstor, ali će se koristiti samo za bacanje kockica. To će nam omogućiti da pristupimo TWI arbitraži, sukobima i drugim važnim aspektima serijske komunikacije kada imate više gospodara i robova. Također ćemo dodati brojne pojedinačne sedmoznamenkaste zaslone s gumbima ispod njih koji će nam omogućiti da se kladimo na druge vrste rola, ali sve će to doći u budućim vodičima. Za sada samo želimo da valjak za kockice bude glavni, a dva ekrana za robove. Kada pritisnemo dugme, kôd će odlučiti da li će se isplatiti natural, uzeti novac iz craps-a ili će se granati na "point" seriju bacanja do pobjede ili sedmorke.

Hajdemo prvo napisati podređene rutine. Oni su jednostavni po tome što će sve što će učiniti učiniti da gledaju SDA liniju u potrazi za njihovom adresom, ako ih pozovu, pročitat će novi broj kako bi ga prikazali i prikazali. To je sve! Ne moraju čak ni razgovarati s majstorom jer će majstor pratiti njihove ukupne iznose i izvršavati sve izračune isplata prije nego ih ažurira. U budućim vodičima imat ćemo robove koji će pisati majstoru (na primjer, kada imamo pojedinačne 7-znamenkaste ekrane s tipkama za iznos klađenja, oni će morati reći gospodaru koliko se kladi na svaki prikaz, pa ćemo obratite im se s adresom + poziv za čitanje s gospodarom u "načinu rada glavnog prijemnika"), ali do toga ćemo doći u dogledno vrijeme.

Za sada je sve potaknuto pritiskom gumba za bacanje kockica, nakon čega slijedi izračun ili daljnje pritiskanje gumba i na kraju poruka svakom od zaslona s njihovim novim zbrojevima. Nakon svake isplate provest će se test kako bi se utvrdilo je li igrač pobijedio ili izgubio, drugim riječima, da li djelitelj gotovine postaje nula nakon bacanja ili ako igrač postaje nula nakon bacanja (ni djelitelj ni igrač mogu biti negativni jer će im biti dozvoljeno da se klade samo 10 USD ili šta god je ostalo ako je manje od 10 USD).

Tako će to funkcionirati. Idemo na kodiranje.

Korak 4: Master komunikacijski kod

Glavni komunikacijski kod
Glavni komunikacijski kod

Sada možemo napisati komunikacijsku rutinu valjka za kockice. Također je gotovo identičan onom koji smo napisali prošli put, osim što ćemo komunicirati s dva različita roba, a ne samo s jednim. Imajte na umu da za svakog od slave -a koristimo različitu adresu. Trebali biste sami izmijeniti kôd, a zatim ga jednostavno testirati sa svakom adresom i pobrinuti se da radi kao i zadnji vodič, osim sa svakim posebnim zaslonom.

Priložit ću kôd za svaku komponentu koji jednostavno prikazuje rezultat prevrtanja tako da se može koristiti za pravilno funkcioniranje zaslona i provjeru ožičenja.

Kodiranje igre ne uvodi ništa novo što se tiče naredbi na asemblerskom jeziku ili komponenti AVR mikrokontrolera, pa nemam osjećaj da moram to prolaziti liniju po liniju. Vjerojatno ste primijetili da kad uvodimo nešto novo prolazim kroz svaki redak do najsitnijih detalja do te mjere da vas razbjesnim ako vas ne uspavam. S druge strane, neću to učiniti ako se ne uvede ništa novo. To je danas slučaj. Tako da mislim da ste se već pripremili da se igrate sa kodom, čitate kôd, analizirate kôd, razumijete kôd, kritikujete kôd, rugate se kodu i smijete se momku koji je napisao kod. Pa ću vas pustiti da to učinite. Gotovo je sigurno da ćete pronaći mnoga mjesta koja možete poboljšati ili barem pojednostaviti ono što sam napisao.

Priložio sam, kao i obično, konačnu verziju koda za dva ekrana i valjak za kockice u sljedećem koraku zajedno sa video zapisom na kojem testiram stvar.

Korak 5: Završni kod i video

Priložio sam video i 3 programa. Primijetićete da možete popraviti opkladu i početni djelitelj i igrač u gotovini na vrhu programa pomoću.equ izvoda.

U sljedećem vodiču dodat ćemo mogućnost klađenja na različite stvari koje će igru učiniti uzbudljivijom. Zanimljivost modernog Crapsa je to što imate mnoštvo različitih načina klađenja i pokušavate povećati svoje kvote. U stvari, Craps je igra s najvećim kvotama u Casinu! … AKO znate igrati. S druge strane, ako ne znate igrati, to postaje jedna od igara s najnižim kvotama.

Kad budemo imali više stvari na koje se možemo kladiti, povećat ću ukupnu količinu novca u igri.

Trebao bih biti zabavan!

Vidimo se sljedeći put!

Preporučuje se: