Innehållsförteckning:

AVR Assembler Tutorial 11: 5 Steg
AVR Assembler Tutorial 11: 5 Steg

Video: AVR Assembler Tutorial 11: 5 Steg

Video: AVR Assembler Tutorial 11: 5 Steg
Video: AVR Ассемблер. Урок 11. LCD. AVR Assembler. Lesson 11. LCD. 2024, Juli
Anonim
AVR -monteringshandledning 11
AVR -monteringshandledning 11
AVR -monteringshandledning 11
AVR -monteringshandledning 11
AVR -monteringshandledning 11
AVR -monteringshandledning 11

Välkommen till självstudie 11!

I denna korta handledning ska vi äntligen bygga den första delen av vårt slutprojekt.

Det första du bör göra är att gå till det allra sista steget i denna handledning och titta på videon. Kom sedan tillbaka hit. [pausar medan du gör det …] Okej. Fortsätt nu.

Om du inte redan har gissat bygger vi ett Craps -spel! Naturligtvis, bara för att jag bygger ett craps -spel betyder det verkligen inte att du måste. Jag hoppas att det är självklart. Det är i alla fall användbart att använda mikrokontroller för att styra segmenterade bildskärmar etc., och att kommunicera med varandra - det är främst det vi gör här. Du kan skriva kod för att använda dem hur du än vill. För tillfället kommer jag att koda dem för att spela craps även om jag senare kan bestämma mig för att omformulera de segmenterade skärmarna för att göra något annat.

Anledningen till att jag bygger detta är för att jag tänker att jag så småningom kanske vill ha ett Vegas -crappbord i full storlek i min "mangrotta" i källaren i mitt hus. Ingen av mina vänner har dock den minsta aning om hur man ska hantera, göra poäng eller betala craps -spel och -rullar. Så jag tänkte att det skulle vara häftigt att få bordet att göra allt återförsäljararbete för oss! När vi lägger en insats på bordet kan vi också trycka på en liten tryckknapp bredvid rutan som våra marker visar på hur mycket som placeras där, sedan kan mikrokontrollern beräkna utbetalningen för den rutan efter tärningskastet och visa den. Jag är fortfarande inte helt säker på hur jag ska organisera denna aspekt. En tanke jag hade var att varje person kommer att bli ombedd att placera alla sina insatser i tur och ordning så att kontrollanten kommer att spela in var varje persons pengar är innan nästa spelare spelas in och så vidare. Efter rullen kan datorn visa utbetalningarna på varje ruta och kan också hålla en löpande "totala kontanter" för varje spelare.

För en av omslagsbilderna på denna handledning var jag bara tvungen att använda en bild av mig som drog 5 ess vid pokerbordet i Vegas i somras. Heheh. Unna mig.

Här är en länk till den kompletta samlingen av mina AVR-monteringsstudier:

Steg 1: Craps

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

I denna handledning kommer vi bara att konstruera den enklaste delen av det sista Craps -spelet. Detta kallas "The Pass Line" och du kan satsa på det. Du kan lära dig allt du behöver veta om "pass line" -delen av spelet genom att titta på den korta 2-minuters instruktionsvideon som jag har bifogat detta steg.

Vi kommer att bygga ytterligare en 4-siffrig display som kommer att hålla reda på dealerns kontanter på samma sätt som vår nuvarande 4-siffriga display håller reda på spelarens kontanter. Dealern börjar med $ 20 och spelaren kommer att börja med $ 20 (de totala möjliga pengarna i spelet är $ 9999-maximalt för våra fyrsiffriga displayer, men vi behöver bara $ 20 för denna första del av spelet eller annars skulle vara extremt tråkigt och svårt att vinna eller förlora på en hyfsad tid). Om spelaren tar alla dealerns pengar vinner spelaren. Om spelaren förlorar alla sina pengar vinner dealern.

Hur vinner eller förlorar du pengar? De av er som har spelat Craps, sett människor "skjuta tärningar" på gatan, eller sett det spelat mot kasinot i Vegas, vet redan. För er andra, låt mig ge er en kort beskrivning av "pass line" -delen av spelet som vi kommer att koda idag.

Craps har spelats i hundratals år och går tillbaka till korstågens tid. Det spelades av trupper i andra världskrigets skyttegravar, det spelades på gatorna, det spelades i kasinon och spelhallar. Det började med bara passlinjen och alla andra saker lades till senare. Vi kommer att följa samma utveckling.

Så här fungerar passlinjen. Du lägger en insats och sedan kastar du tärningarna. Den första rullen kallas "come-out-rullen". Om du får en 2 (ormögon), en 3 (ace deuce) eller en 12 (boxbilar) på come-out-rullen förlorar du din insats och det kallas "craps". Om du rullar en 7 (en naturlig) eller en 11 (en yo, eller yo-leven) vinner du. Om du rullar något annat nummer blir detta nummer din "poäng". När en "poäng" är etablerad fortsätter du att kasta tärningarna med målet att slå punkten igen innan du kastar en 7. Om du får din poäng innan en 7 kastas vinner du jämna pengar. Så en dollarinsats vinner dig en dollar från dealern. Om du får en 7 innan din poäng kastas kallas detta "sju ut" och du förlorar din insats till dealern.

Efter det börjar du om. Satsa på passlinjen och kasta tärningarna, 7 eller 11 vinster, 2, 3 eller 12 förluster.

Det finns många fler typer av spel, "passera inte", "passera odds", "inte passera odds", "come bet", "don't come bet", "field", "horn", " hårda sätt ", etc etc etc. Du hittar detaljer här:

en.wikipedia.org/wiki/Craps

Som jag sa ovan kommer vi för närvarande bara att koda pass -line -delen av spelet, vilket är allt de hade förr när barnen kastade tärningar mot väggen för varandras lunchpengar och så här kommer vi att börja.

Men innan vi börjar koda saker, låt oss bygga återförsäljarens kontantskärm. För detta vill jag använda en av de större fyrsiffriga skärmarna som du kan få från Sparkfun eller någon annanstans. Från och med nu kommer jag inte att lista material på dessa självstudier. Om du faktiskt har byggt allt tillsammans med mig så vet du redan var du ska få materialet och vad de är. Det är meningslöst för mig att lista dem eller hur mycket de kostar.

Så låt oss ta en av våra prototyper, en stor fyrsiffrig display, en annan ATmega328p för att styra den och bygga den som vi gjorde med tärningsrullen och spelarens display tidigare. Vi kommer också att bifoga rubriker för ström, för programmering och för TWI -kommunikation precis som de andra.

Steg 2: Återförsäljarens kontantvisning

Återförsäljarens kontantvisning
Återförsäljarens kontantvisning
Återförsäljarens kontantvisning
Återförsäljarens kontantvisning
Återförsäljarens kontantvisning
Återförsäljarens kontantvisning

Vi konstruerar dealerdisplayen på samma sätt som vi gjorde med spelarens fyrsiffriga display i den senaste handledningen. De enda skillnaderna är att det är större och det har färre stift, så vi kommer att ordna det och koppla det annorlunda.

Jag har bifogat en bild av kablarna till den här skärmen. Du kan se att den är större och har färre stift än vår playercash -skärm. Bilden är från sparkfun -sidan där jag fick displayen och den visar vilka stift som är effekt för varje siffra och vilka stift som styr vart och ett av segmenten i en siffra.

Som vanligt bör du börja med att ansluta skärmen till din prototypbrödbräda och testa varje segment för att vara säker på att du förstår hur det är trådbundet. Sedan ska du ansluta den till stiften på en AVR -mikrokontroller på din brödbräda och köra den därifrån tills vi har all vår kod som fungerar i denna handledning. Slutligen, i slutet, bör du bygga det yttre kortet och lödda det på. När du sedan testar den slutliga produkten kommer du att veta att eventuella problem kommer från ditt lödnings- och skärjobb och inte koden. Glöm inte heller det välkända axiomet från snickeri "mäta två gånger och klipp en gång", eller om du gör kretskort: "skär två gånger, löd en gång." Som du kan se på bilden bröt jag äntligen ihop och köpte den perfekta Dremel -infästningen för den här typen av arbete. En "Diamond Point Set". Det kostade 5 dollar men det är mycket mindre än kostnaden för Anger Managment Therapy som kommer med att sluta med mitt klippjobb för många gånger i rad.

Jag använder 330 ohm motstånd för denna skärm. COM -stiften går genom motståndet till GND och strömmen går till vilket segment du vill visa. Jag kommer att använda PC0 till PC3 för COM -stiften och PB0, PB1, PB2, PB3, PB4, PD5, PD6 och PD7 för segmenten.

Här är nyckeln till att maximera dina chanser att få det rätt:

  1. kartlägga kretsen
  2. bryt kretsen
  3. kontrollera din ledning
  4. fäst motstånden, locken och kristalloscillatorn
  5. kontrollera anslutningarna och ledningarna igen
  6. fäst de yttre ledningarna
  7. fäst mikrokontrollern
  8. kontrollera ledningarna igen
  9. fäst den fyrsiffriga displayen
  10. kontrollera varje siffra med ett par ledningar från brödbrädan
  11. lägg den åt sidan och skriv koden, med vetskap om att du förmodligen måste justera saker senare och hoppas att du inte har täckt en anslutning som måste brytas.

Jag har visat en serie bilder på mitt ledningsjobb. Var medveten om att du är fri att koppla din hur du vill. Det är mycket troligt att du kan hitta en bättre karta än jag och du bör använda den. Ingenting i dessa självstudier beror på hur dina komponenter är anslutna, så länge de har rätt utgångsportar. Vilket påminner mig. Lägg märke till att det nu är två rubriker som går till SDA och två som går till SCL? Varför tror du att vi gjorde det?

Nu, som du kan se av den bifogade koden i slutet av handledningen, klippte jag helt enkelt in och klistrade in koden från spelarens display för den senaste handledningen till en ny fil för återförsäljarens display. Sedan gick jag igenom och ändrade uppslagstabellen "segment" för att motsvara den nya stiftkartan och noterade att för denna display är "com" -nålarna slipade och segmentstiften är 5V snarare än tvärtom som det var för den andra skärmen. Jag ändrade också initialiseringen av portarna för att återspegla de nya kablarna, jag ändrade adressen till dealerkassans display till 0b1000000 så att tärningsrullen kan prata med honom, jag ändrade "cykel" -rutinen så att den stänger av PC0 till och med PC3 "com" -nålar när den vill driva ett visst segment och jag ändrade "siffran" som visas eftersom den nya ledningen har siffrorna i motsatt ordning (om du lämnade den som den var och försökte visa 1234 den skulle ha dykt upp som 4321 istället).

Här är den nya registerkartan:

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

där 1 är PÅ och 0 är AV.

Testa nu displayen genom att först ställa in det initialiserade värdet på displayen till olika nummer så att den visas när den slås på. Detta kommer att berätta om allt fungerar korrekt.

Ändra sedan dicerollerkoden så att den använder den nya adressen för slaven, koppla ihop dem och kör den. Det borde fungera exakt som det vi gjorde i den senaste handlingen förutom att tärningsslingorna nu visas på den nya skärmen.

Bra! Nu är vi redo att skriva den nya tärningskoden så att den kommunicerar med både spelarens display och dealerns display.

Steg 3: Programöversikt

Programöversikt
Programöversikt
Programöversikt
Programöversikt
Programöversikt
Programöversikt

Sättet som koden kommer att fungera för vårt spel är att vi kommer att behålla tärningsrullen som master och lägga till dealerns display som en extra slav. Tärningsrullen kommer att styra spelet och det kommer att skicka de resulterande ändringarna i kontanter till dealern och spelaren visar efter varje kast. För tillfället kommer vi bara att ha passlinjebetet på $ 10 varje gång så att vi inte behöver bli för komplicerade ännu med att spelaren ändrar sin insats. Senare, när vi har mekaniken fungerande, kommer vi att lägga till en annan controller som kommer att vara en extra master som kommer att styra vadslagningen och utbetalningarna och vår tärningsrulle kommer att förbli en mästare men bara användas för att kasta tärningarna. Detta gör att vi kan komma in på TWI -skiljedom, kollisioner och andra viktiga aspekter av seriell kommunikation när du har flera mästare och slavar. Vi kommer också att lägga till ett antal enkla 7-siffriga skärmar med tryckknappar under dem som gör att vi kan satsa på andra typer av rullar, men allt som kommer i framtida självstudier. För tillfället vill vi bara ha tärningsrullen som mästare och de två skärmarna som slavar. När vi trycker på knappen kommer koden att avgöra om en naturlig ska betalas ut, ta pengar från en craps eller förgrena sig till en "punkt" -serie med rullar tills antingen en vinst eller en sju-out.

Låt oss först skriva slavrutinerna. Dessa är enkla genom att allt de kommer att göra är att titta på SDA -raden för deras adress. Om de ringer kommer de att läsa det nya numret för att visa och visa det. Det är allt! De behöver inte ens prata tillbaka till befälhavaren eftersom befälhavaren kommer att hålla reda på deras totalsumma och göra alla utbetalningsberäkningar innan de uppdaterar dem. I framtida självstudier kommer vi att ha slavar som skriver tillbaka till befälhavaren (till exempel när vi har enkla 7-siffriga displayer med tryckknappar för insatsbeloppet måste de berätta för mästaren hur mycket som satsas på varje display och så kommer vi att adressera dem med en adress + läsanrop med befälhavaren i "huvudmottagarläge") men vi kommer till det i god tid.

För närvarande startas allt av tärningsknappsknappen följt av en beräkning eller ytterligare knapptryckningar och slutligen ett meddelande till var och en av displayerna med sina nya totalsummor. Det kommer att göras ett test efter varje utbetalning för att avgöra om spelaren har vunnit eller förlorat, med andra ord om dealerkassan blir noll efter en rulle, eller om spelarens kontanter blir noll efter en rulle (varken dealern eller spelaren kan bli negativa eftersom de bara får satsa $ 10 eller annat vad som är kvar om det är mindre än $ 10).

Så det är hur det kommer att fungera. Låt oss få kodning.

Steg 4: Huvudkommunikationskod

Huvudkommunikationskod
Huvudkommunikationskod

Vi kan nu skriva tärningsrullens kommunikationsrutin. Det är också nästan identiskt med det vi skrev förra gången förutom att vi kommer att kommunicera med två olika slavar snarare än bara en. Observera att för var och en av slavarna använder vi en annan adress. Du bör ändra koden själv och sedan helt enkelt testa den med varje adress och se till att den fungerar precis som förra handledningen utom med varje separat display.

Jag bifogar koden för varje komponent som helt enkelt visar resultatet av rullen så att den kan användas för att få skärmarna att fungera korrekt och kontrollera ledningarna.

Kodning av spelet introducerar inget nytt när det gäller montering av språkkommandon eller AVR-mikrokontroller komponenter och så känner jag inte att jag behöver gå igenom det rad för rad. Du har förmodligen märkt att när vi introducerar något nytt går jag igenom varje rad i minsta detalj till den grad att irritera dig om du inte sover. Å andra sidan kommer jag inte att göra det om det inte finns något nytt introducerat. Så är fallet idag. Så jag tror att du nu är beredd att leka med koden, läsa igenom koden, analysera koden, förstå koden, kritisera koden, håna koden och skratta åt killen som skrev koden. Så jag låter dig gå vidare och göra det. Det är nästan säkert att du hittar många platser som du kan förbättra eller åtminstone förenkla det jag har skrivit.

Jag har, som vanligt, bifogat den slutliga versionen av koden för de två skärmarna och diceroller i nästa steg tillsammans med en video av mig som testar saken.

Steg 5: Slutlig kod och video

Jag har bifogat videon och de tre programmen. Du kommer att märka att du kan fixa insatsen och startdealern och spelarens kontanter högst upp i programmet med.equ -uttalanden.

I nästa handledning kommer vi att lägga till möjligheten att satsa på olika saker som kommer att göra spelet mer spännande. Det intressanta med moderna Craps är att du har en mängd olika sätt att satsa och försöka maximera dina odds. I själva verket är Craps det högsta oddsspelet i kasinot! … OM du vet hur man spelar det. Å andra sidan, om du inte vet hur man spelar så blir det ett av de lägsta oddsspelen.

När vi har fler saker att satsa våra pengar på så kommer jag att öka det totala beloppet i spelet.

Jag borde vara kul!

Vi ses nästa gång!

Rekommenderad: