Sadržaj:

AVR asemblerski vodič 11: 5 koraka
AVR asemblerski vodič 11: 5 koraka

Video: AVR asemblerski vodič 11: 5 koraka

Video: AVR asemblerski vodič 11: 5 koraka
Video: Автомобильный генератор для генератора с самовозбуждением с использованием ДИОДА 2024, Studeni
Anonim
Vodič za sastavljač AVR -a 11
Vodič za sastavljač AVR -a 11
Vodič za sastavljač AVR -a 11
Vodič za sastavljač AVR -a 11
Vodič za sastavljač AVR -a 11
Vodič za sastavljač AVR -a 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. [zastanite dok to radite …] U redu. Sada nastavite.

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

Razlog zašto 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, nitko od mojih prijatelja nema ni najmanju ideju kako se baviti okladama i rezultatima. Pa sam zaključio da bi bilo super da stol za nas obavi sav posao! Kad stavimo okladu na stol, također možemo pritisnuti 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. Još uvijek nisam sasvim siguran kako ću organizirati ovaj aspekt. Pomislio sam da će od svake osobe biti zatraženo da redom stavi sve svoje oklade tako da će kontrolor zabilježiti gdje se nalazi novac svake osobe prije snimanja sljedećeg igrača i tako dalje. Zatim, nakon bacanja, računalo može prikazati isplate na svakom kvadratu, a može zadržati i "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 cijele zbirke mojih vodiča za AVR asembler:

Korak 1: Sranje

Gluposti!
Gluposti!
Gluposti!
Gluposti!
Gluposti!
Gluposti!

U ovom ćemo vodiču konstruirati samo najjednostavniji dio posljednje igre Craps. To 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.

Izgradit ćemo još jedan četveroznamenkasti zaslon koji će pratiti gotovinu dilera na isti način na koji naš trenutni četveroznamenkasti zaslon prati gotovinu igrača. Trgovac će početi s 20 USD, a igrač s 20 USD (ukupni mogući novac u igri je 9999 USD-najviše od naših 4-znamenkastih prikaza, ali trebat će nam samo 20 USD za ovaj prvi dio igre ili na drugi način bilo bi ekstremno zamorno i teško pobijediti ili izgubiti u pristojnom vremenu). Ako igrač uzme sav novac djelitelja, igrač pobjeđuje. Ako igrač izgubi sav svoj novac, djelitelj pobjeđuje.

Kako dobivate ili gubite novac? Pa, oni od vas koji su 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 dijela igre "pass line" koji ćemo danas kodirati.

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

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

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

Postoji mnogo više vrsta oklada, "ne prolazi", "koeficijenti za prolaz", "ne zaobiđite kvote", "dođite okladiti", "ne kladite se", "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 s prolazom, što je sve što su imali u danu kad 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 zapravo zajedno sa mnom sve gradili, onda već znate gdje nabaviti materijale i koji su oni. Besmisleno mi je nabrajati ih ili koliko koštaju.

Stoga uzmimo jednu od naših ploča za izradu prototipova, veliki 4-znamenkasti zaslon, drugi ATmega328p za upravljanje tim zaslonom i izradimo ga kao što smo to radili s valjkom za kockice i zaslonom igrača. Također ćemo priložiti zaglavlja za napajanje, za programiranje i za TWI komunikacije, baš kao i drugi.

Korak 2: Prikaz gotovine kod trgovca

Izložba gotovine zastupnika
Izložba gotovine zastupnika
Izložba gotovine zastupnika
Izložba gotovine zastupnika
Izložba gotovine zastupnika
Izložba gotovine zastupnika

Zaslon distributera konstruiramo na isti način kao što smo to učinili s 4-znamenkasti prikazom igrača u prošlom vodiču. Jedine su razlike u tome što je veći i ima manje pinova, pa ćemo ga drugačije rasporediti i ožičiti.

Priložio sam sliku ožičenja ovog zaslona. 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 zaslon i prikazuje koje pinove ima snaga za svaku znamenku, a koje 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 priključiti 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 biste trebali izgraditi vanjsku ploču i lemiti je. Zatim, kada isprobate konačni proizvod, znat ćete da svi problemi dolaze iz vašeg posla lemljenja i rezanja, a ne iz koda. Također, ne zaboravite dobro poznati aksiom iz stolarije "dvaput izmjeri, a jednom reži", ili u slučaju izrade pločica: "dvaput reži, jednom lemi". Kao što možete vidjeti na slici, napokon sam se pokvario i kupio savršen Dremel nastavak za ovu vrstu posla. "Skup dijamantskih točaka". Koštala je 5 dolara, ali to je puno manje od cijene terapije gnjeva koja dolazi s tim da mi previše puta uzastopno pojačava posao rezanja.

Za ovaj zaslon 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 mogućnosti da to ispravite:

  1. preslikajte krug
  2. prekinut krug
  3. provjerite ožičenje
  4. pričvrstite otpornike, kape i kristalni oscilator
  5. ponovno provjerite spojeve i ožičenje
  6. pričvrstite vanjske žice
  7. priključite mikrokontroler
  8. ponovno provjerite ožičenje
  9. priključite 4-znamenkasti zaslon
  10. provjerite svaku znamenku parom žica s matične ploče
  11. ostavite je sa strane i napišite kôd, znajući da ćete vjerojatno kasnije morati dotjerati stvari i nadajući se da niste prikrili vezu koju je potrebno prekinuti.

Pokazao sam niz slika svog ožičenja. 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 podsjeća. Primijetite da sada postoje dva zaglavlja koja idu u SDA, a dva u SCL? Zašto mislite da smo to učinili?

Sada, kao što vidite po priloženom kodu na kraju vodiča, jednostavno sam izrezao i zalijepio kôd s prikaza playera zadnjeg vodiča u novu datoteku za prikaz trgovca. Zatim sam pregledao i promijenio tablicu traženja "segmenata" tako da odgovara novoj karti s napomenama, primijetivši da su za ovaj prikaz "com" pinovi uzemljeni i da su segmentne iglice 5V, a ne obrnuto kao što je to bio slučaj s drugim zaslonom. Promijenio sam i inicijalizaciju portova kako bi odražavao 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 "znamenku" 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 karte registra:

(PD7, PD6, PD5, PB4, PB3, PB2, PB1, PB0) = (decimalna toč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, kad se uključi, prikazuje. To ć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 djelovati točno kao što smo učinili u prošlom vodiču, osim što se kockice sada pojavljuju na novom zaslonu.

Sjajno! Sada smo spremni za pisanje novog koda za kockice tako da komunicira i s zaslonom igrača i s prikazom trgovca.

Korak 3: Pregled programa

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

Način na koji će kôd funkcionirati za našu igru je da ćemo držati kockicu kao majstora i dodati prikaz djelitelja kao dodatni rob. Kockač će kontrolirati igru i poslat će rezultirajuće promjene u gotovini djelitelju, a igrač prikazuje nakon svakog bacanja. Za sada ćemo imati samo prolaznu okladu svaki put 10 USD, tako da se ne moramo previše komplicirati samo s tim da igrač mijenja svoju okladu. 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 kocke ostat će glavni, ali samo za bacanje kockica. To će nam omogućiti pristup TWI arbitraži, sukobima i drugim važnim aspektima serijske komunikacije kada imate više gospodara i robova. Također ćemo dodati niz pojedinačnih 7-znamenkastih zaslona 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 zaslona kao robovi. Kad pritisnemo gumb, kôd će odlučiti hoćemo li isplatiti natural, uzeti novac iz crapsa ili će se odvojiti do "point" serije bacanja sve do pobjede ili sedmog ulaza.

Hajdemo prvo napisati podređene rutine. Oni su jednostavni po tome što će sve što će učiniti učiniti promatrati SDA liniju u potrazi za njihovom adresom. Ako ih pozovu, pročitat će novi broj za prikaz i prikaz. To je sve! Ne moraju čak ni razgovarati s majstorom jer će gospodar 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 zaslone s gumbima za iznos klađenja, oni će morati reći gospodaru koliko se ulaže na svaki zaslon, pa ćemo obratite im se s adresom + poziv za čitanje s glavnim 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 zaslonu s njihovim novim zbrojevima. Nakon svake isplate provodit će se test kako bi se utvrdilo je li igrač pobijedio ili izgubio, drugim riječima, je li djeliteljev novac nakon bacanja nula, ili ako igrač nakon bacanja postane nula (ni djelitelj ni igrač mogu biti negativni jer će im biti dopušteno uložiti samo 10 USD ili drugo što je preostalo ako je manje od 10 USD).

Tako će to i funkcionirati. Idemo na kodiranje.

Korak 4: Glavni 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 robova koristimo različitu adresu. Kôd biste trebali sami izmijeniti, a zatim ga jednostavno testirati sa svakom adresom i provjeriti radi li isto kao i zadnji vodič, osim sa svakim zasebnim zaslonom.

Priložit ću kôd za svaku komponentu koji jednostavno prikazuje rezultat prevrtanja kako bi se mogao 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 se ne osjećam kao da je trebam 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, to neću učiniti ako se ne uvede ništa novo. Tako je i danas. Tako da mislim da ste se već pripremili za igranje s kodom, čitanje koda, analizu koda, razumijevanje koda, kritiziranje koda, ismijavanje koda i smijeh momku koji je napisao kod. Pa ću vam dopustiti 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.

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

Korak 5: Završni kod i video

Priložio sam video i 3 programa. Primijetit ćete da možete popraviti okladu 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 šanse. Zapravo, Craps je igra s najvećim koeficijentom 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 možemo staviti svoj novac, povećat ću ukupnu količinu novca u igri.

Trebao bih biti zabavan!

Vidimo se sljedeći put!

Preporučeni: