Obsah:

AVR Assembler Tutorial 11: 5 krokov
AVR Assembler Tutorial 11: 5 krokov

Video: AVR Assembler Tutorial 11: 5 krokov

Video: AVR Assembler Tutorial 11: 5 krokov
Video: Лекция 4. Архитектура AVR. Ассемблер 2024, Júl
Anonim
Výučba montéra AVR 11
Výučba montéra AVR 11
Výučba montéra AVR 11
Výučba montéra AVR 11
Výučba montéra AVR 11
Výučba montéra AVR 11

Vitajte v návode 11!

V tomto krátkom návode sa konečne chystáme postaviť prvú časť nášho záverečného projektu.

Prvá vec, ktorú musíte urobiť, je prejsť na posledný krok tohto tutoriálu a pozrieť si video. Potom sa vráť sem. [prestávka, kým to robíte …] Dobre. Teraz pokračujte.

Ak ste to ešte nehádali, staviame hru Craps! Samozrejme, to, že staviam hru craps, rozhodne neznamená, že musíte. Dúfam, že je to samozrejmé. V každom prípade je užitočné používať mikrokontroléry na ovládanie segmentovaných displejov atď. A komunikovať navzájom - to je predovšetkým to, čo tu robíme. Môžete napísať kód a použiť ich tak, ako chcete. Zatiaľ ich kódujem, aby hrali kocky, aj keď sa neskôr môžem rozhodnúť znova použiť segmentované displeje, aby robili niečo iné.

Dôvod, prečo to staviam, je ten, že uvažujem nad tým, že by som nakoniec mohol chcieť v mojej „mužskej jaskyni“v suteréne môjho domu stôl Vegas craps v plnej veľkosti. Nikto z mojich priateľov však nemá najmenšiu predstavu o tom, ako rozdávať, skórovať alebo vyplácať, ktoré je v rozpore so stávkami a hodmi. Tak som usúdil, že by bolo skvelé, keby stôl vykonal všetku prácu predajcu za nás! Keď umiestnime stávku na stôl, môžeme tiež stlačiť malé tlačidlo vedľa štvorca, na ktorom sú naše žetóny, a ukázať, koľko je tam umiestnených. Potom môže mikrokontrolér vypočítať výplatu pre toto políčko po hode kockou a zobraziť ho. Stále si nie som celkom istý, ako budem tento aspekt organizovať. Jedna z myšlienok, ktorú som mal, bolo, že každá osoba bude vyzvaná, aby postupne vložila všetky svoje stávky, aby regulátor pred zaznamenaním ďalšieho hráča a podobne zaznamenal, kde sú peniaze jednotlivých osôb. Potom môže počítač po hode zobraziť výplaty na každom políčku a tiež môže nechať bežnú „celkovú hotovosť“pre každého hráča.

Na jeden z titulných obrázkov tohto tutoriálu som musel použiť obrázok, ako som toto leto ťahal 5 es za pokrový stôl vo Vegas. Heheh. Doprajte mi.

Tu je odkaz na kompletnú zbierku mojich návodov k assembleru AVR:

Krok 1: Craps

Kecy!
Kecy!
Kecy!
Kecy!
Kecy!
Kecy!

V tomto návode budeme stavať iba najjednoduchšiu časť finálnej hry Craps. Hovorí sa tomu „The Pass Line“a môžete na to staviť. Môžete sa dozvedieť všetko, čo potrebujete vedieť o časti hry „pass line“, sledovaním krátkeho 2-minútového inštruktážneho videa, ktoré som pripojil k tomuto kroku.

Postavíme ďalší 4-miestny displej, ktorý bude sledovať hotovosť predajcu rovnakým spôsobom, akým náš súčasný 4-miestny displej sleduje hotovosť hráča. Predajca začne s 20 dolármi a hráč začne s 20 dolármi (celkové možné peniaze v hre sú 9999 dolárov-maximum z našich 4-ciferných displejov, ale na tento prvý kus hry alebo inak budeme potrebovať iba 20 dolárov) bolo by v extrémnom prípade únavné a ťažké vyhrať alebo prehrať v slušnom čase). Ak hráč vezme všetky peniaze dílera, vyhráva. Ak hráč príde o všetky svoje peniaze, potom víťazí díler.

Ako vyhráte alebo prídete o peniaze? Tí, ktorí ste hrali hru Craps, videli ste na ulici „strieľať kocky“alebo ste ju videli hrať proti kasínu vo Vegas, už to poznáte. Pre vás ostatných mi dovoľte krátky opis časti hry „pass line“, ktorú dnes budeme kódovať.

Craps sa hrá už stovky rokov, pričom siaha až do čias križiackych výprav. Hrali ho vojská v zákopoch 2. svetovej vojny, hralo sa na uliciach, hralo sa v kasínach a herniach. Začalo sa to iba prihrávkou a všetky ostatné veci k tomu boli pridané neskôr. Rovnakým vývojom sa budeme riadiť aj my.

Takto funguje prihrávková čiara. Vsadíte a potom hodíte kockami. Prvá rolka sa nazýva „roll-out roll“. Ak dostanete 2 (hadie oči), 3 (eso dvojky) alebo 12 (skriňové autá) v hre coming-out, prehráte stávku a hovorí sa tomu „craps“. Ak hodíte 7 (prirodzený) alebo 11 (jo alebo jo-leven), vyhráte. Ak hodíte iným číslom, toto číslo sa stane vašim „bodom“. Hneď ako je dosiahnutý „bod“, pokračujete v hodení kockami s cieľom trafiť bod znova pred hodom 7. Ak získate svoj bod skôr, ako padne 7, vyhráte dokonca peniaze. Stávka na dolár vám teda vyhrá dolár od dílera. Ak získate 7 skôr, ako vám padne bod, nazýva sa to „sedem von“a prehráte stávku s dílerom.

Potom začnite znova. Vsádzajte na prihrávku a hodte kockami, 7 alebo 11 víťazstiev, 2, 3 alebo 12 prehier.

Existuje mnoho ďalších druhov stávok „neprejdite“, „neprejdite kurzom“, „neprejdite kurzom“, „poďte staviť“, „nepriďte si staviť“, „poľom“, „klaksónom“, „ ťažké cesty “atď. atď. atď. Podrobnosti nájdete tu:

en.wikipedia.org/wiki/Craps

Ako som povedal vyššie, nateraz budeme kódovať iba časť hry, ktorá bola minulosťou v deň, keď deti navzájom hádzali kockami o stenu za peniaze na obed, a tak to je miesto, kde začneme.

Avšak skôr, ako začneme kódovať veci, nechajme si zostaviť predajcov pokladničný displej. Na to chcem použiť jeden z väčších 4-miestnych displejov, ktoré môžete získať zo Sparkfunu alebo inde. Odteraz nebudem uvádzať zoznam materiálov k týmto tutoriálom. Ak ste so mnou vlastne stavali všetko, potom už viete, kde získať materiály a aké sú. Je pre mňa nezmyselné uvádzať ich zoznam alebo koľko stoja.

Uchopme teda jednu z našich prototypovacích dosiek, veľký 4-miestny displej, ďalší ATmega328p na ovládanie tohto displeja a zostrojíme ho tak, ako sme to urobili s kockou na kocky, a displejom prehrávača predtým. Rovnako ako ostatné pripojíme hlavičky pre napájanie, pre programovanie a pre komunikáciu TWI.

Krok 2: Zobrazenie hotovosti predajcu

Zobrazenie hotovosti predajcu
Zobrazenie hotovosti predajcu
Zobrazenie hotovosti predajcu
Zobrazenie hotovosti predajcu
Zobrazenie hotovosti predajcu
Zobrazenie hotovosti predajcu

Displej dílera zostrojíme rovnako, ako sme to urobili pri 4-miestnom displeji hráča v minulom návode. Jediným rozdielom je, že je väčší a má menej kolíkov, takže ho usporiadame a zapojíme inak.

Prikladám obrázok zapojenia tohto displeja. Môžete vidieť, že je väčší a má menej pinov ako náš prehrávač playercash. Obrázok je zo stránky sparkfun, kde som dostal displej, a ukazuje, ktoré piny sú pre každú číslicu silné a ktoré piny ovládajú každý zo segmentov v číslici.

Ako obvykle, mali by ste začať zapojením displeja do prototypu nepájivého poľa a otestovaním každého segmentu, aby ste sa presvedčili, že rozumiete jeho prepojeniu. Potom by ste ho mali pripojiť k pinom mikrokontroléra AVR na doske a spustiť ho odtiaľ, kým v tomto návode nebudeme pracovať s celým kódom. Nakoniec by ste mali externú dosku postaviť a spájkovať. Potom, keď testujete konečný výrobok, budete vedieť, že akékoľvek problémy pochádzajú z vašej spájkovačky a rezačky, a nie z kódu. Nezabudnite tiež na dobre známu axiómu z tesárstva „dvakrát meraj a raz rež“, alebo v prípade výroby obvodových dosiek: „dvakrát rež, raz spájkuj“. Ako vidíte na obrázku, nakoniec som sa zlomil a kúpil som si perfektný nástavec Dremel na tento druh práce. „Sada diamantových bodov“. Stálo to 5 dolárov, ale to je oveľa menej, ako náklady na terapiu zvládania hnevu, ktorá prichádza s tým, že sa moje strihanie stane príliš často za sebou.

Na tento displej používam odpory 330 ohmov. Piny COM prechádzajú cez odpor na GND a výkon ide do akéhokoľvek segmentu, ktorý chcete zobraziť. Na piny COM použijem PC0 až PC3 a pre segmenty PB0, PB1, PB2, PB3, PB4, PD5, PD6 a PD7.

Tu je kľúč k maximalizácii šancí, ako to urobiť správne:

  1. zmapovať okruh
  2. prerušiť obvod
  3. skontrolujte svoje zapojenie
  4. pripojte odpory, kryty a kryštálový oscilátor
  5. znova skontrolujte zapojenie a zapojenie
  6. pripojte vonkajšie vodiče
  7. pripojte mikrokontrolér
  8. znova skontrolujte zapojenie
  9. pripojte 4-miestny displej
  10. skontrolujte každú číslicu pomocou dvojice vodičov z dosky na chlieb
  11. odložte to a napíšte kód s vedomím, že pravdepodobne budete musieť veci neskôr vyladiť, a dúfajúc, že ste nepokryli spojenie, ktoré je potrebné prerušiť.

Ukázal som sériu obrázkov mojej elektroinštalačnej práce. Uvedomte si prosím, že ten svoj môžete ľubovoľne prepojiť. Je veľmi pravdepodobné, že nájdete lepšiu mapu ako ja a mali by ste ju použiť. Nič v týchto návodoch nezávisí od toho, ako sú vaše súčasti zapojené, pokiaľ majú správne výstupné porty. Čo mi pripomína. Všimli ste si, že teraz dve hlavičky smerujú do SDA a dve do SCL? Prečo si myslíte, že sme to urobili?

Teraz, ako vidíte na priloženom kóde na konci tutoriálu, som jednoducho vystrihol a vložil kód z prehrávača z posledného tutoriálu do nového súboru pre zobrazenie predajcu. Potom som prešiel a zmenil vyhľadávaciu tabuľku „segmentov“tak, aby zodpovedala novej mape pinov, pričom som poznamenal, že pre tento displej sú kolíky „com“uzemnené a kolíky segmentov sú 5 V, a nie naopak, ako pre ostatné displeje.. Tiež som zmenil inicializáciu portov tak, aby odrážali nové zapojenie, zmenil som adresu displeja dealercash na 0b1000000 tak, aby s ním valček s kockami mohol hovoriť, zmenil som podprogram „cyklus“tak, aby sa vypol Piny PC0 až PC3 „com“, keď chce napájať konkrétny segment, a zmenil som „číslicu“, ktorá sa zobrazí, pretože nové zapojenie má číslice v opačnom poradí (ak ste to nechali tak a pokúsili ste sa zobraziť 1234 by sa namiesto toho ukázal ako 4321).

Tu je nová mapa registra:

(PD7, PD6, PD5, PB4, PB3, PB2, PB1, PB0) = (desatinná čiarka, c, g, b, f, a, e, d)

kde 1 je ZAPNUTÁ a 0 je VYPNUTÁ.

Teraz vyskúšajte displej tak, že najskôr nastavíte inicializovanú hodnotu displeja na rôzne čísla, aby ich po zapnutí zobrazil. To vám povie, či všetko funguje správne.

Potom upravte kód dicerollera tak, aby používal novú adresu pre slave, spojte ich dohromady a spustite ho. Malo by to fungovať presne tak, ako sme to urobili v minulom návode, okrem toho, že teraz sa na novom displeji zobrazujú hracie kocky.

Skvelé! Teraz sme pripravení napísať nový kód kockou, aby komunikoval s displejom prehrávača aj s displejom dílera.

Krok 3: Prehľad programu

Prehľad programu
Prehľad programu
Prehľad programu
Prehľad programu
Prehľad programu
Prehľad programu

Kód bude v našej hre fungovať tak, že ponecháme valček s kockami ako majstra a displej dílera pridáme ako dodatočného otroka. Kockou kockou sa bude riadiť hra a výsledné zmeny v hotovosti bude odoslané dílerovi a hráč zobrazí po každom hode. Zatiaľ budeme mať stávku Pass line vždy 10 dolárov, aby sme sa nemuseli príliš komplikovať s tým, ako hráč zmení svoju stávku. Neskôr, keď budú mechanici pracovať, pridáme ďalší ovládač, ktorý bude ďalším majstrom, ktorý bude ovládať stávky a výplaty, a náš valček s kockami zostane majstrom, ale bude sa používať iba na hádzanie kockami. To nám umožní dostať sa do arbitráže TWI, kolízií a ďalších dôležitých aspektov sériovej komunikácie, ak máte viacerých nadriadených a podriadených. Tiež pridáme niekoľko samostatných 7-miestnych displejov s tlačidlami pod nimi, ktoré nám umožnia staviť na iné typy rolí, ale to všetko príde v budúcich návodoch. Zatiaľ chceme len kocky ako hlavný a tieto dva sa budú zobrazovať ako podradené. Keď stlačíme tlačidlo, kód rozhodne, či vyplatíme prírodnú výhru, vezmeme peniaze z kociek alebo rozvetvíme na „bodovú“sériu hodov, až kým nevyhráme alebo nevyhráme sedem.

Najprv napíšeme rutiny otrokov. Tieto sú jednoduché v tom, že všetko, čo urobia, bude sledovať riadok SDA pre ich adresu. Ak sa na nich zavolá, prečítajú nové číslo a zobrazia ho. To je všetko! Nemusia sa ani rozprávať s pánom, pretože kapitán bude pred ich aktualizáciou sledovať ich celkové sumy a vykonávať všetky výpočty výplat. V budúcich tutoriáloch budeme mať otrokov odpísaných späť na master (napríklad keď budeme mať jednotlivé 7-miestne displeje s tlačidlami pre výšku stávky, budú musieť na každom displeji informovať majstra, koľko sa tipuje, a tak budeme oslovte ich adresou + prečítajte si hovor s majstrom v „režime hlavného prijímača“), ale k tomu sa včas dostaneme.

Zatiaľ je všetko iniciované stlačením kocky, po ktorom nasleduje výpočet alebo ďalšie stlačenie tlačidla a nakoniec správa na každom z displejov s ich novými súčtami. Po každom výplate bude nasledovať test, aby sa zistilo, či hráč vyhral alebo prehral, inými slovami, či sa hotovosť dílera stane nulou po hode alebo či sa hotovosť hráča stane nulou po hode (díler ani hráč môže ísť do záporu, pretože budú môcť staviť iba 10 dolárov alebo čokoľvek iné, čo zostane, ak je menej ako 10 dolárov).

Takže takto to bude fungovať. Poďme na kódovanie.

Krok 4: Hlavný komunikačný kód

Hlavný komunikačný kód
Hlavný komunikačný kód

Teraz môžeme napísať komunikačnú rutinu valca s kockami. Je tiež takmer identický s tým, ktorý sme napísali minule, okrem toho, že budeme komunikovať skôr s dvoma rôznymi otrokmi, než len s jedným. Všimnite si toho, že pre každého z otrokov používame inú adresu. Kód by ste mali upraviť sami a potom ho jednoducho otestovať s každou adresou a uistiť sa, že funguje rovnako ako v minulom návode, s výnimkou každého samostatného displeja.

Priložím kód pre každý komponent, ktorý jednoducho zobrazí výsledok kotúča, aby ho bolo možné použiť na správnu funkciu displejov a kontrolu zapojenia.

Kódovanie hry nepredstavuje nič nové, pokiaľ ide o príkazy jazyka zostavy alebo komponenty mikrokontroléra AVR, a tak nemám pocit, že by som ho mal prechádzať riadok po riadku. Pravdepodobne ste si všimli, že keď predstavíme niečo nové, prejdem každý riadok do najmenších podrobností, až vás to rozčúli, ak vás neuspí. Na druhej strane to neurobím, ak nebude zavedené nič nové. Dnes je to tak. Myslím si, že ste už pripravení hrať s kódom, prečítať si ho, analyzovať ho, porozumieť mu, kritizovať ho, vysmievať sa mu a smiať sa na chlapcovi, ktorý ho napísal. Nechám vás teda ísť a urobiť to. Je takmer isté, že nájdete veľa miest, ktoré môžete vylepšiť alebo aspoň zjednodušiť, čo som napísal.

Ako obvykle som v nasledujúcom kroku pripojil konečnú verziu kódu pre dva displeje a diceroller spolu s videom, ako vec testujem.

Krok 5: Konečný kód a video

Prikladám video a 3 programy. Všimnete si, že stávku a počiatočný dealer a hotovosť v hotovosti môžete opraviť v hornej časti programu pomocou príkazov.equ.

V nasledujúcom návode pridáme možnosť tipovať rôzne veci, vďaka ktorým bude hra vzrušujúcejšia. Zaujímavosťou moderných Craps je, že máte k dispozícii množstvo rôznych spôsobov, ako staviť a pokúsiť sa maximalizovať svoje šance. Craps je v skutočnosti najvyššia kurzová hra v kasíne! … AK viete, ako sa to hrá. Na druhej strane, ak neviete, ako hrať, stane sa to jednou z najnižších kurzových hier.

Akonáhle budeme mať viac vecí, na ktoré môžeme staviť svoje peniaze, zvýšim celkový objem peňazí v hre.

Mala by ma to baviť!

Uvidíme sa nabudúce!

Odporúča: