Indholdsfortegnelse:

AVR Assembler Tutorial 11: 5 trin
AVR Assembler Tutorial 11: 5 trin

Video: AVR Assembler Tutorial 11: 5 trin

Video: AVR Assembler Tutorial 11: 5 trin
Video: Лекция 4. Архитектура AVR. Ассемблер 2024, November
Anonim
Vejledning til AVR -samler 11
Vejledning til AVR -samler 11
Vejledning til AVR -samler 11
Vejledning til AVR -samler 11
Vejledning til AVR -samler 11
Vejledning til AVR -samler 11

Velkommen til selvstudie 11!

I denne korte vejledning skal vi endelig bygge den første del af vores afsluttende projekt.

Den første ting du skal gøre er at gå til det sidste trin i denne vejledning og se videoen. Så kom tilbage her. [holder pause, mens du gør det …] Okay. Fortsæt nu.

Hvis du ikke allerede har gættet, bygger vi et Craps -spil! Selvfølgelig, bare fordi jeg bygger et craps -spil, betyder det bestemt ikke, at du skal. Jeg håber, at det siger sig selv. Det er under alle omstændigheder nyttigt at bruge mikrokontroller til at styre segmenterede skærme osv. Og kommunikere med hinanden - det er hovedsageligt det, vi gør her. Du kan skrive kode for at bruge dem, uanset hvad du vil. For nu vil jeg kode dem for at spille craps, selvom jeg senere kan beslutte at omformulere de segmenterede skærme til at gøre noget andet.

Grunden til, at jeg bygger dette, er fordi jeg tænker på, at jeg i sidste ende måske vil have et Vegas craps -bord i fuld størrelse i min "mandhule" i kælderen i mit hus. Ingen af mine venner har dog den mindste idé om, hvordan man skal forholde sig til, score eller udbetale craps -spil og -ruller. Så jeg regnede med, at det ville være fedt at få bordet til at gøre alt forhandlerens arbejde for os! Når vi placerer et væddemål på bordet, kan vi også trykke på en lille trykknap ved siden af firkanten, som vores chips er på for at vise, hvor meget der er placeret der, så kan mikrokontrolleren beregne udbetalingen for den firkant efter terningkastet og vise den. Jeg er stadig ikke helt sikker på, hvordan jeg vil organisere dette aspekt. En tanke jeg havde var, at hver person bliver bedt om at placere alle deres indsatser efter tur, så controlleren registrerer, hvor hver persons penge er, før den næste spiller optages og så videre. Efter rollen kan computeren vise udbetalingerne på hver firkant og kan også holde en løbende "samlet kontant" for hver spiller.

Til et af forsidebillederne af denne tutorial skulle jeg bare bruge et billede af mig, der trak 5 esser ved pokerbordet i Vegas i sommer. Heheh. Forkæl mig.

Her er et link til den komplette samling af mine AVR-assembler-selvstudier:

Trin 1: Craps

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

I denne tutorial vil vi kun konstruere den enkleste del af det sidste Craps -spil. Dette kaldes "The Pass Line", og du kan satse på det. Du kan lære alt, hvad du har brug for at vide om "pass line" -delen af spillet ved at se den korte 2-minutters instruktionsvideo, jeg har vedhæftet dette trin.

Vi opbygger endnu et 4-cifret display, der holder styr på dealerens kontanter på samme måde som vores nuværende 4-cifrede display holder styr på spillerens kontanter. Dealeren starter med $ 20, og spilleren starter med $ 20 (de samlede mulige penge i spillet er $ 9999-maksimumet for vores firecifrede displays, men vi skal kun bruge $ 20 for dette første stykke af spillet eller på anden måde det ville være kedeligt i det ekstreme og svært at vinde eller tabe på en anstændig tid). Hvis spilleren tager alle dealerens penge, vinder spilleren. Hvis spilleren mister alle sine penge, vinder dealeren.

Hvordan vinder eller taber du penge? De af jer, der har spillet Craps, set folk "skyde terninger" på gaden eller set det spillet mod kasinoet i Vegas, ved det allerede. For resten af jer, lad mig give jer en kort beskrivelse af "pass line" -delen af spillet, som vi vil kode i dag.

Craps er blevet spillet i hundredvis af år, der går tilbage til korstogernes tid. Det blev spillet af tropper i skyttegravene under 2. verdenskrig, det blev spillet på gaden, det blev spillet i kasinoer og spillehaller. Det startede med passelinjen, og alle de andre ting blev tilføjet til det senere. Vi vil følge den samme udvikling.

Den måde passagen fungerer på er denne. Du placerer et væddemål, og derefter kaster du terningerne. Den første rulle kaldes "come-out-rullen". Hvis du får en 2 (slangeøjne), en 3 (eseduc) eller en 12 (kassebiler) på come-out-kastet, mister du dit væddemål, og det kaldes "craps". Hvis du ruller en 7 (en naturlig) eller en 11 (en yo eller yo-leven) vinder du. Hvis du ruller et andet nummer, bliver dette nummer dit "point". Når et "point" er etableret, fortsætter du med at kaste terningerne med det mål at ramme pointet igen, før du kaster en 7. Hvis du får dit point, før et 7 bliver kastet, vinder du lige penge. Så et dollarspil vinder dig en dollar fra dealeren. Hvis du får 7 inden dit point kastes, kaldes dette "syv ud", og du mister dit væddemål til dealeren.

Herefter starter du igen. Placer et væddemål på passlinjen og kast terningerne, 7 eller 11 sejre, 2, 3 eller 12 taber.

Der er mange flere former for væddemål, "pass ikke", "pass odds", "don't pass odds", "come bet", "don't come bet", "field", "horn", " hårde måder ", osv. osv. osv. Du kan finde detaljer her:

en.wikipedia.org/wiki/Craps

Som jeg sagde ovenfor, vil vi foreløbig kun kode kodelinjen i spillet, som er alt, hvad de havde dengang, da børn kastede terninger mod væggen for hinandens frokostpenge, og det er her, vi starter.

Men før vi begynder at kode ting, lad os bygge dealerens kontantdisplay. Til dette vil jeg bruge en af de større 4-cifrede displays, som du kan få fra Sparkfun eller andre steder. Fra nu af vil jeg ikke liste materialer til disse selvstudier. Hvis du faktisk har bygget alt sammen sammen med mig, så ved du allerede, hvor du skal hente materialerne, og hvad de er. Det er meningsløst for mig at liste dem, eller hvad de koster.

Så lad os få fat i et af vores prototyper, et stort firecifret display, et andet ATmega328p for at styre displayet, og bygge det som vi gjorde med terningevalsen og afspilleren før. Vi vil også vedhæfte headere til strøm, til programmering og til TWI -kommunikation ligesom de andre.

Trin 2: Dealers kontantvisning

Forhandlerens kontantvisning
Forhandlerens kontantvisning
Forhandlerens kontantvisning
Forhandlerens kontantvisning
Forhandlerens kontantvisning
Forhandlerens kontantvisning

Vi konstruerer dealer-displayet på samme måde, som vi gjorde med spillerens 4-cifrede display i den sidste tutorial. De eneste forskelle er, at den er større, og den har færre stifter, så vi vil arrangere den og tilslutte den forskelligt.

Jeg har vedhæftet et billede af ledningerne til dette display. Du kan se, at den er større og har færre pins end vores playercash -display. Billedet er fra sparkfun -siden, hvor jeg fik displayet, og det viser, hvilke ben der er strøm til hvert ciffer, og hvilke ben der styrer hvert af segmenterne i et ciffer.

Som sædvanlig bør du begynde med at tilslutte skærmen til dit prototypebrødbræt og teste hvert segment for at være sikker på, at du forstår, hvordan det er kablet. Derefter skal du tilslutte den til stifterne på en AVR -mikrokontroller på dit brødbræt og køre den derfra, indtil vi har hele vores kode, der fungerer i denne vejledning. Til sidst skal du i slutningen bygge det eksterne bord og lodde det på. Når du så tester det endelige produkt, ved du, at eventuelle problemer kommer fra dit lodde- og skærejob og ikke koden. Glem heller ikke det velkendte aksiom fra tømrerarbejde "mål to gange og skær en gang", eller i tilfælde af at lave kredsløb: "skær to gange, lodde en gang." Som du kan se på billedet, brød jeg endelig sammen og købte det perfekte Dremel -tilbehør til denne slags arbejde. Et "Diamond Point Set". Det kostede 5 bucks, men det er meget mindre end omkostningerne ved Anger Managment Therapy, der følger med at udføre mit skærejob for mange gange i træk.

Jeg bruger 330 ohm modstande til dette display. COM -benene går gennem modstanden til GND, og strømmen går til det segment, du vil vise. Jeg vil bruge PC0 til og med PC3 til COM -benene og PB0, PB1, PB2, PB3, PB4, PD5, PD6 og PD7 til segmenterne.

Her er nøglen til at maksimere dine chancer for at få det rigtigt:

  1. kortlægge kredsløbet
  2. afbryde kredsløbet
  3. tjek dine ledninger
  4. fastgør modstandene, hætterne og krystaloscillatoren
  5. kontrollere tilslutninger og ledninger igen
  6. fastgør de eksterne ledninger
  7. fastgør mikrokontrolleren
  8. tjek ledningerne igen
  9. vedhæft det 4-cifrede display
  10. tjek hvert ciffer med et par ledninger fra brødbrættet
  11. læg den til side og skriv koden, velvidende at du sandsynligvis bliver nødt til at justere tingene senere og håber, at du ikke har dækket til en forbindelse, der skal afbrydes.

Jeg har vist en række billeder af mit ledningsarbejde. Vær opmærksom på, at du er fri til at koble din, som du vil. Det er meget sandsynligt, at du kan finde et bedre kort, end jeg gjorde, og du bør bruge det. Intet i disse selvstudier afhænger af, hvordan dine komponenter er kabelforbundet, så længe de har de korrekte outputporte. Hvilket minder mig. Bemærk, at der nu er to headers, der skal til SDA og to til SCL? Hvorfor tror du vi gjorde det?

Nu, som du kan se ved den vedhæftede kode i slutningen af selvstudiet, klipte jeg simpelthen og indsatte koden fra afspillerdisplayet i den sidste tutorial til en ny fil til dealerens display. Derefter gik jeg igennem og ændrede opslagstabellen "segmenter" til at svare til det nye pin -kort, og bemærkede, at for dette display er "com" -stifterne slebet, og segmentstifterne er 5V i stedet for omvendt, som det var for det andet display. Jeg ændrede også initialiseringen af portene for at afspejle de nye ledninger, jeg ændrede adressen på dealercash -displayet til 0b1000000, så terningevalsen kunne tale med ham, jeg ændrede "cyklus" -programmen, så den slukker for PC0 til og med PC3 "com" -stifter, når den vil drive et bestemt segment, og jeg ændrede det "ciffer", der vises, da de nye ledninger har cifrene i den modsatte rækkefølge (hvis du forlod det, som det var og forsøgte at vise 1234 det ville have vist sig som 4321 i stedet).

Her er det nye registerkort:

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

hvor 1 er ON og 0 er OFF.

Test nu displayet ved først at indstille displayets initialiserede værdi til forskellige tal, så når det tændes, viser det dem. Dette vil fortælle dig, om alt fungerer korrekt.

Rediger derefter diceroller -koden, så den bruger den nye adresse til slaven, hook dem sammen og kør den. Det skal fungere nøjagtigt som det, vi gjorde i den sidste tutorial bortset fra, at terningekastene nu vises på det nye display.

Store! Nu er vi klar til at skrive den nye terningrullekode, så den kommunikerer med både spillerens display og dealerens display.

Trin 3: Programoversigt

Programoversigt
Programoversigt
Programoversigt
Programoversigt
Programoversigt
Programoversigt

Den måde koden skal fungere på i vores spil er, at vi beholder terningevalsen som mesteren og tilføjer dealerens display som en ekstra slave. Terningevalsen kontrollerer spillet, og den sender de resulterende ændringer i kontanter til dealeren, og spilleren viser efter hvert kast. For nu vil vi bare have passlinjespillet på $ 10 hver gang, så vi ikke behøver at blive for komplicerede endnu med at spilleren ændrer sit væddemål. Senere, når vi har mekanikken i gang, tilføjer vi en anden controller, som vil være en ekstra master, der kontrollerer væddemål og udbetalinger, og vores terningrulle forbliver en mester, men bruges kun til terningkastning. Dette giver os mulighed for at komme ind på TWI -voldgift, kollisioner og andre vigtige aspekter af seriel kommunikation, når du har flere mestre og slaver. Vi tilføjer også et antal enkelte 7-cifrede displays med trykknapper under dem, der giver os mulighed for at satse på andre typer ruller, men alt det kommer i fremtidige tutorials. For nu vil vi bare have terningevalsen som mester, og de to displays som slaver. Når vi trykker på knappen, vil koden afgøre, om der skal udbetales en naturlig, tage penge fra en craps eller forgrene sig til en "point" -serie ruller, indtil enten en sejr eller en syv-out.

Lad os først skrive slaverutinerne. Disse er enkle, fordi de kun vil se SDA -linjen for deres adresse. Hvis de bliver ringet op, læser de det nye nummer for at vise og vise det. Det er alt! De behøver ikke engang at tale tilbage til mesteren, da mesteren vil holde styr på deres totaler og foretage alle udbetalingsberegninger, før de opdaterer dem. I fremtidige øvelser vil vi have slaver, der skriver tilbage til mesteren (for eksempel når vi har enkelt 7-cifret display med trykknapper til indsatsbeløbet, skal de fortælle mesteren, hvor meget der bliver satset på hvert display, og derfor vil vi adresser dem med en adresse + læseopkald med masteren i "master receiver mode"), men vi kommer til det i god tid.

For nu startes alt ved at trykke på terningeknap -knappen efterfulgt af en beregning eller yderligere knaptryk og endelig en besked til hver af skærmene med deres nye totaler. Der vil være en test efter hver udbetaling for at afgøre, om spilleren har vundet eller har tabt, med andre ord, om dealerens penge bliver nul efter et kast, eller om spillerens kontanter bliver nul efter et kast (hverken dealeren eller spilleren kan blive negative, da de kun får lov til at satse $ 10 eller andet, hvad der er tilbage, hvis det er mindre end $ 10).

Så det er sådan det kommer til at fungere. Lad os få kodning.

Trin 4: Master Communications Code

Master kommunikationskode
Master kommunikationskode

Vi kan nu skrive kommunikationsrutinen for terningevalsen. Det er også næsten identisk med det, vi skrev sidste gang, bortset fra at vi vil kommunikere med to forskellige slaver frem for kun en. Bemærk, at for hver af slaverne bruger vi en anden adresse. Du bør selv ændre koden og derefter bare teste den med hver adresse og sørge for, at den fungerer ligesom sidste vejledning undtagen med hver separat skærm.

Jeg vedhæfter koden for hver komponent, der blot viser resultatet af rullen, så den kan bruges til at få skærmene til at fungere korrekt og kontrollere ledningerne.

Kodning af spillet introducerer intet nyt for så vidt angår montagesprogskommandoer eller AVR-mikrokontrollerkomponenter, og derfor føler jeg ikke, at jeg skal gennemgå det linje for linje. Du har sikkert bemærket, at når vi introducerer noget nyt, går jeg gennem hver linje i detaljer til det punkt, hvor jeg irriterer dig, hvis du ikke får dig til at sove. På den anden side vil jeg ikke gøre det, hvis der ikke er noget nyt introduceret. Sådan er det i dag. Så jeg tror, at du nu er forberedt på at lege med koden, læse koden igennem, analysere koden, forstå koden, kritisere koden, spotte koden og grine ad den fyr, der skrev koden. Så jeg vil lade dig gå videre og gøre det. Det er næsten sikkert, at du finder mange steder, du kan forbedre eller i det mindste forenkle, hvad jeg har skrevet.

Jeg har som sædvanlig vedhæftet den sidste version af koden til de to displays og diceroller i det næste trin sammen med en video af mig, der tester tingen.

Trin 5: Endelig kode og video

Jeg har vedhæftet videoen og de 3 programmer. Du vil bemærke, at du kan rette indsatsen og startende dealer og spiller kontanter øverst i programmet med.equ -udsagn.

I den næste vejledning tilføjer vi muligheden for at satse på forskellige ting, som vil gøre spillet mere spændende. Det interessante ved moderne Craps er, at du har en lang række forskellige måder at satse på og forsøge at maksimere dine odds. Faktisk er Craps det højeste odds spil i kasinoet! … HVIS du ved, hvordan du spiller det. På den anden side, hvis du ikke ved, hvordan du spiller, bliver det et af de laveste oddsspil.

Når vi har flere ting at satse vores penge på, så vil jeg øge det samlede beløb i spillet.

Jeg burde være sjov!

Vi ses næste gang!

Anbefalede: