Obsah:

AVR Assembler Tutorial 11: 5 Steps
AVR Assembler Tutorial 11: 5 Steps

Video: AVR Assembler Tutorial 11: 5 Steps

Video: AVR Assembler Tutorial 11: 5 Steps
Video: AVR I/O Manipulation in Assembler: Whole Register Operations 2024, Listopad
Anonim
AVR Assembler Tutorial 11
AVR Assembler Tutorial 11
AVR Assembler Tutorial 11
AVR Assembler Tutorial 11
AVR Assembler Tutorial 11
AVR Assembler Tutorial 11

Vítejte v Tutoriálu 11!

V tomto krátkém tutoriálu se konečně chystáme postavit první část našeho finálního projektu.

První věc, kterou byste měli udělat, je přejít na poslední krok tohoto tutoriálu a podívat se na video. Pak se vrať sem. [pauza, když to děláte …] Dobře. Nyní pokračujte.

Pokud jste to ještě neuhodli, stavíme hru Craps! Samozřejmě to, že stavím hru craps, rozhodně neznamená, že musíte. Doufám, že je to samozřejmé. V každém případě je užitečné používat mikrokontroléry k ovládání segmentovaných displejů atd. A komunikovat mezi sebou - to je právě to, co zde děláme. Můžete je napsat tak, abyste je mohli používat, jak chcete. Prozatím je budu kódovat, aby hráli kostky, i když se později mohu rozhodnout znovu použít segmentované displeje, aby dělaly něco jiného.

Důvod, proč to stavím, je ten, že přemýšlím o tom, že bych ve své „jeskyni pro muže“v suterénu svého domu možná nakonec chtěl stůl plné velikosti Vegas. Žádný z mých přátel však nemá nejmenší tušení, jak rozdávat, skórovat nebo vyplácet výplatu a sázky. A tak jsem usoudil, že by bylo skvělé mít stůl, aby za nás udělal veškerou práci dealera! Když umístíme sázku na stůl, můžeme také stisknout malé tlačítko vedle pole, na kterém jsou naše žetony, a ukázat, kolik je tam umístěno, poté může mikrokontrolér vypočítat výplatu pro toto pole po hodu kostkami a zobrazit ho. Stále si nejsem jistý, jak budu tento aspekt organizovat. Jedna myšlenka, kterou jsem měl, byla, že každá osoba bude požádána, aby postupně podala všechny své sázky, aby správce zaznamenal, kde jsou peníze každé osoby, než zaznamená dalšího hráče atd. Poté může počítač po hodu zobrazit výplaty na každém políčku a také si může nechat běžet „celkovou hotovost“pro každého hráče.

Pro jeden z titulních obrázků tohoto tutoriálu jsem musel použít obrázek, jak jsem letos v létě tahal 5 es za pokerový stůl ve Vegas. Heheh. Dopřejte mi to.

Zde je odkaz na kompletní sbírku mých návodů k assembleru AVR:

Krok 1: Craps

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

V tomto tutoriálu budeme stavět pouze nejjednodušší část finální hry Craps. Říká se tomu „The Pass Line“a můžete na něj sázet. Můžete se dozvědět vše, co potřebujete vědět o části hry „pass line“, sledováním krátkého 2minutového instruktážního videa, které jsem k tomuto kroku připojil.

Postavíme další 4místný displej, který bude sledovat hotovost dealera stejným způsobem, jako náš současný 4místný displej sleduje hotovost hráče. Dealer začne s $ 20 a hráč začne s $ 20 (celkové možné peníze ve hře jsou $ 9999-maximum našich 4místných displejů, ale na tento první kus hry nebo jinak budeme potřebovat pouze $ 20) by bylo extrémně únavné a těžké vyhrát nebo prohrát za slušnou dobu). Pokud hráč vezme všechny peníze dealera, vyhrává hráč. Pokud hráč ztratí všechny své peníze, pak krupiér vyhrává.

Jak vyhrajete nebo ztratíte peníze? No, kdo z vás hrál Craps, viděl lidi „střílet kostkami“na ulici nebo to viděl hrát proti kasinu ve Vegas, už to bude vědět. Pro vás ostatní vám dovolím krátký popis části hry „pass line“, kterou dnes budeme kódovat.

Craps se hraje stovky let, sahající až do doby křížových výprav. Hrály ho vojska v zákopech druhé světové války, hrálo se na ulicích, hrálo se v kasinech a hernách. Začalo to jen přihrávkou a všechny ostatní věci k tomu byly přidány později. Budeme sledovat stejný vývoj.

Takto funguje propustka. Vložíte sázku a poté hodíte kostkami. První hod se nazývá „vyjížďka“. Pokud dostanete 2 (hadí oči), 3 (eso dvojky) nebo 12 (krabicová auta) v hodu na vhazování, prohráváte sázku a říká se tomu „craps“. Pokud hodíte 7 (přírodní) nebo 11 (jo nebo jo-leven), vyhrajete. Pokud hodíte jiným číslem, pak se toto číslo stane vaším „bodem“. Jakmile je stanoven „bod“, budete házet kostkami s cílem znovu bod zasáhnout, než hodíte 7. Pokud získáte svůj bod před hodem 7, vyhrajete dokonce peníze. Sázka na dolar vám tedy vyhraje dolar od dealera. Pokud dostanete 7 dříve, než vám padne bod, říká se tomu „sedm ven“a sázku prohráváte.

Poté začněte znovu. Umístěte sázku na přihrávku a házejte kostkami, 7 nebo 11 výher, 2, 3 nebo 12 porážek.

Existuje mnoho dalších druhů sázek, „neprocházejí“, „předávají se kurzy“, „neprocházejí kurzy“, „přijďte sázet“, „nepřijďte sázet“, „pole“, „lesní roh“, „ tvrdé způsoby “atd. atd. atd. Podrobnosti najdete zde:

en.wikipedia.org/wiki/Craps

Jak jsem řekl výše, prozatím budeme kódovat pouze část hry, která byla v den, kdy děti navzájem házely kostkami o peníze na oběd, a tak tady začneme.

Než však začneme kódovat věci, pojďme postavit zobrazení pokladny prodejce. K tomu chci použít jeden z větších 4místných displejů, které můžete získat ze Sparkfunu nebo jinde. Od této chvíle nebudu vypisovat materiály k těmto tutoriálům. Pokud jste vlastně stavěli všechno společně se mnou, pak už víte, kde získat materiály a jaké jsou. Je pro mě zbytečné je vyjmenovávat nebo kolik stojí.

Pojďme tedy chytit jednu z našich desek pro vytváření prototypů, velký 4místný displej, další ATmega328p pro ovládání tohoto displeje a postavit jej tak, jako jsme to udělali s válečkem na kostky a displejem přehrávače dříve. Stejně jako ostatní připojíme záhlaví pro napájení, pro programování a pro komunikaci TWI.

Krok 2: Zobrazení hotovosti prodejce

Zobrazení hotovosti prodejce
Zobrazení hotovosti prodejce
Zobrazení hotovosti prodejce
Zobrazení hotovosti prodejce
Zobrazení hotovosti prodejce
Zobrazení hotovosti prodejce

Displej dealera sestrojíme stejným způsobem, jako jsme to udělali u 4místného displeje hráče v minulém tutoriálu. Jediným rozdílem je, že je větší a má méně kolíků, takže jej uspořádáme a zapojíme jinak.

Přikládám obrázek zapojení tohoto displeje. Vidíte, že je větší a má méně pinů, než zobrazuje náš playercash. Obrázek je ze stránky sparkfun, kde jsem dostal displej, a ukazuje, které piny jsou pro každou číslici výkonné a které piny ovládají každý ze segmentů v číslici.

Jako obvykle byste měli začít zapojením displeje do prototypovacího prkénka a otestováním každého segmentu, abyste si byli jisti, že rozumíte jeho zapojení. Pak byste jej měli připojit k pinům mikrokontroléru AVR na vašem prkénku a spustit jej odtud, dokud nebudeme mít celý náš kód v tomto tutoriálu funkční. Nakonec byste na konci měli postavit externí desku a pájet ji. Když pak testujete konečný produkt, budete vědět, že jakékoli problémy pocházejí z vaší pájky a řezání, a ne z kódu. Nezapomeňte také na známý axiom z truhlářství „dvakrát měř a jednou řež“, nebo v případě výroby desek s obvody: „dvakrát řez, jednou pájej“. Jak vidíte na obrázku, nakonec jsem se porouchal a koupil perfektní nástavec Dremel pro tento druh práce. „Sada diamantových bodů“. Stálo to 5 babek, ale to je mnohem méně, než náklady na terapii zvládání hněvu, která přichází s tím, že se moje stříhací práce objevila příliš mnohokrát za sebou.

Pro tento displej používám odpory 330 ohmů. Piny COM procházejí odporem na GND a napájení jde do kteréhokoli segmentu, který chcete zobrazit. Budu používat PC0 až PC3 pro piny COM a PB0, PB1, PB2, PB3, PB4, PD5, PD6 a PD7 pro segmenty.

Zde je klíč k maximalizaci šancí na správné provedení:

  1. zmapovat okruh
  2. přerušit obvod
  3. zkontrolujte zapojení
  4. připojte odpory, kryty a krystalový oscilátor
  5. znovu zkontrolujte zapojení a zapojení
  6. připojte externí vodiče
  7. připojte mikrokontrolér
  8. znovu zkontrolujte zapojení
  9. připojte 4místný displej
  10. zkontrolujte každou číslici dvojicí vodičů z prkénka
  11. dejte to stranou a napište kód s vědomím, že budete pravděpodobně muset věci doladit později a doufáte, že jste nepokryli spojení, které je třeba přerušit.

Ukázal jsem sérii obrázků z mé elektroinstalační práce. Uvědomte si prosím, že můžete libovolně propojit svůj. Je velmi pravděpodobné, že najdete lepší mapu než já a měli byste ji použít. Nic v těchto výukových programech nezávisí na tom, jak jsou vaše komponenty zapojeny, pokud mají správné výstupní porty. Což mi připomíná. Všimli jste si, že nyní dvě hlavičky směřují do SDA a dvě do SCL? Proč si myslíte, že jsme to udělali?

Nyní, jak vidíte na přiloženém kódu na konci tutoriálu, jsem jednoduše vyjmul a vložil kód z displeje přehrávače posledního tutoriálu do nového souboru pro zobrazení dealera. Pak jsem prošel a změnil vyhledávací tabulku "segmentů" tak, aby odpovídala nové mapě pinů, přičemž jsem poznamenal, že pro tento displej jsou kolíky "com" uzemněny a kolíky segmentů jsou 5V spíše než naopak, jako tomu bylo u druhého displeje. Také jsem změnil inicializaci portů tak, aby odrážela nové zapojení, změnil jsem adresu displeje dealercash na 0b1000000, aby s ním mohl váleček s kostkami mluvit, změnil jsem podprogram „cyklus“tak, aby vypnul Piny PC0 až PC3 „com“, když chce napájet konkrétní segment, a změnil jsem „číslici“, která se zobrazí, protože nové zapojení má číslice v opačném pořadí (pokud jste to nechali tak, jak to bylo, a pokusili jste se zobrazit 1234 by se místo toho ukázal jako 4321).

Zde je nová mapa registrů:

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

kde 1 je ZAPNUTO a 0 je VYPNUTO.

Nyní otestujte displej tak, že nejprve nastavíte inicializovanou hodnotu displeje na různá čísla, aby je při zapnutí zobrazoval. To vám řekne, zda vše funguje správně.

Potom upravte kód dicerolleru tak, aby používal novou adresu pro slave, spojte je dohromady a spusťte jej. Mělo by to fungovat přesně jako to, co jsme dělali v minulém tutoriálu, kromě toho, že se nyní na novém displeji zobrazí kostky.

Skvělý! Nyní jsme připraveni napsat nový kód hracích kostek tak, aby komunikoval jak s displejem hráče, tak s displejem dealera.

Krok 3: Programový přehled

Přehled programu
Přehled programu
Přehled programu
Přehled programu
Přehled programu
Přehled programu

Kód bude v naší hře fungovat tak, že ponecháme hrací kostku jako hlavní a přidáme zobrazení dealera jako další otrok. Válec s kostkami bude ovládat hru a výsledné změny v hotovosti odešle dealerovi a hráč zobrazí po každém hodu. Prozatím budeme mít pouze sázku na přihrávku pokaždé 10 $, takže se nemusíme zatím příliš komplikovat, když hráč mění svoji sázku. Později, když budeme mít mechaniku funkční, přidáme další ovladač, který bude dalším masterem, který bude ovládat sázení a výplaty a náš kostkový válec zůstane pánem, ale slouží pouze k házení kostkami. To nám umožní dostat se do arbitráže TWI, kolizí a dalších důležitých aspektů sériové komunikace, když máte více mistrů a otroků. Rovněž přidáme řadu samostatných 7místných displejů s tlačítky pod nimi, které nám umožní sázet na jiné typy rolí, ale to vše přijde v budoucích tutoriálech. Prozatím chceme pouze kostkový válec jako hlavní a dva se zobrazí jako podřízené. Když stiskneme tlačítko, kód rozhodne, zda vyplatíme přirozenou částku, vezmeme peníze z kostek nebo se rozdělíme na „bodovou“sérii hodů, dokud nevyhrajeme nebo nevyhrajeme.

Nejprve si napíšeme otrocké rutiny. Ty jsou jednoduché v tom, že vše, co budou dělat, bude sledovat řádek SDA pro jejich adresu, pokud budou voláni, přečtou nové číslo, aby jej zobrazili a zobrazili. To je vše! Nemusí ani mluvit s pánem, protože mistr bude sledovat jejich součty a provádět všechny výpočty výplat, než je aktualizuje. V budoucích tutoriálech budeme mít podřízené odepsané zpět na master (například když budeme mít jednotlivé 7místné displeje s tlačítky pro sázkovou částku, budou muset na každém displeji sdělit masteru, kolik se sází, a tak budeme oslovte je adresou + přečtěte si hovor s masterem v „režimu hlavního přijímače“), ale k tomu se včas dostaneme.

Prozatím je vše iniciováno stisknutím tlačítka házení kostkou, následným výpočtem nebo dalším stiskem tlačítka a nakonec zprávou na každém z displejů s jejich novými součty. Po každé výplatě proběhne test, aby se zjistilo, zda hráč vyhrál nebo prohrál, jinými slovy, pokud se hotovost dealera po hodu změní na nulu, nebo pokud se hotovost hráče stane nulou po hodu (ani krupiér, ani hráč může jít do záporu, protože jim bude povoleno sázet pouze 10 $ nebo cokoli jiného, co zbývá, pokud je nižší než 10 $).

Takže takhle to bude fungovat. Pojďme kódovat.

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

Hlavní komunikační kód
Hlavní komunikační kód

Nyní můžeme napsat komunikační rutinu hracího kostky. Je také téměř totožný s tím, který jsme napsali minule, kromě toho, že budeme komunikovat spíše se dvěma různými otroky než s jediným. Všimněte si toho, že pro každého z podřízených používáme jinou adresu. Měli byste kód upravit sami a pak jej jednoduše otestovat s každou adresou a ujistit se, že funguje stejně jako v minulém kurzu, s výjimkou každého samostatného zobrazení.

Připojím kód pro každou součást, který jednoduše zobrazí výsledek role, aby jej bylo možné použít k řádnému fungování displejů a kontrole zapojení.

Kódování hry nepředstavuje nic nového, pokud jde o příkazy sestavovacího jazyka nebo komponenty mikrokontroléru AVR, a tak nemám pocit, že bych ho musel procházet řádek po řádku. Pravděpodobně jste si všimli, že když představujeme něco nového, procházím každou řádkou do nejmenších podrobností, až vás to rozčiluje, ne -li uspává. Na druhou stranu to neudělám, pokud nebude zavedeno nic nového. Tak je tomu dnes. Takže si myslím, že jste již připraveni hrát s kódem, přečíst si kód, analyzovat kód, porozumět kódu, kritizovat kód, vysmívat se kódu a smát se chlápkovi, který kód napsal. Takže vás nechám jít a udělat to. Je téměř jisté, že najdete mnoho míst, která můžete vylepšit nebo alespoň zjednodušit, co jsem napsal.

Jako obvykle jsem v dalším kroku připojil konečnou verzi kódu pro dva displeje a diceroller spolu s videem, na kterém věc testuji.

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

Připojil jsem video a 3 programy. Všimnete si, že sázku a hotovost prodejce a hráče můžete opravit v horní části programu pomocí příkazů.equ.

V dalším tutoriálu přidáme možnost sázet na různé věci, díky kterým bude hra více vzrušující. Zajímavostí moderních Craps je, že máte mnoho různých způsobů sázení a snažíte se maximalizovat své šance. Craps je ve skutečnosti hra s nejvyšší pravděpodobností v kasinu! … KDYŽ víte, jak se to hraje. Na druhou stranu, pokud nevíte, jak hrát, stane se to jednou z nejnižších kurzových her.

Jakmile budeme mít více věcí, na které můžeme sázet své peníze, pak zvýším celkový objem peněz ve hře.

Měl bych se bavit!

Uvidíme se příště!

Doporučuje: