Innholdsfortegnelse:

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: Assembly Language Programming Tutorial - 11 - Instructions - Part 1 - Labels 2024, Juli
Anonim
AVR Assembler Opplæring 11
AVR Assembler Opplæring 11
AVR Assembler Opplæring 11
AVR Assembler Opplæring 11
AVR Assembler Opplæring 11
AVR Assembler Opplæring 11

Velkommen til opplæring 11!

I denne korte opplæringen skal vi endelig bygge den første delen av vårt siste prosjekt.

Det første du bør gjøre er å gå til det aller siste trinnet i denne opplæringen og se videoen. Så kom tilbake hit. [stopper mens du gjør det …] Ok. Fortsett nå.

Hvis du ikke allerede har gjettet, bygger vi et Craps -spill! Selvfølgelig, bare fordi jeg bygger et craps -spill betyr absolutt ikke at du må. Jeg håper det sier seg selv. Det er nyttig i alle fall å bruke mikrokontrollere til å kontrollere segmenterte skjermer, etc., og å kommunisere med hverandre - det er hovedsakelig det vi gjør her. Du kan skrive kode for å bruke dem uansett hva du vil. For nå skal jeg kode dem for å spille craps, selv om jeg senere kan bestemme meg for å omformulere de segmenterte skjermene til å gjøre noe annet.

Grunnen til at jeg bygger dette er fordi jeg tenker at jeg til slutt kan ønske meg et craps -bord i full størrelse i "mannhulen" i kjelleren i huset mitt. Imidlertid har ingen av vennene mine den minste anelse om hvordan jeg skal håndtere, score eller betale craps ved innsatser og kast. Så jeg tenkte at det ville være kult å få bordet til å gjøre alt forhandlerarbeidet for oss! Når vi satser på bordet, kan vi også trykke på en liten trykknapp ved siden av firkanten som sjetongene våre viser for hvor mye som er plassert der, så kan mikrokontrolleren beregne utbetalingen for den ruten etter terningkastet og vise den. Jeg er fortsatt ikke helt sikker på hvordan jeg skal organisere dette aspektet. En tanke jeg hadde var at hver person vil bli bedt om å plassere alle spillene sine etter tur, slik at kontrolleren registrerer hvor hver persons penger er før han spiller inn den neste spilleren og så videre. Etter rullingen kan datamaskinen vise utbetalingene på hver firkant og kan også beholde en løpende "total kontant" for hver spiller.

For et av forsidebildene til denne opplæringen måtte jeg bare bruke et bilde av meg som trakk 5 ess ved pokerbordet i Vegas i sommer. Heheh. Unn meg.

Her er en lenke til den komplette samlingen av mine AVR assembler-opplæringsprogrammer:

Trinn 1: Craps

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

I denne opplæringen skal vi bare bygge den enkleste delen av det siste Craps -spillet. Dette kalles "The Pass Line", og du kan satse på det. Du kan lære alt du trenger å vite om "pass line" -delen av spillet ved å se den korte 2-minutters instruksjonsvideoen jeg har lagt ved dette trinnet.

Vi vil bygge enda et firesifret display som vil holde oversikt over dealerens penger på samme måte som vårt nåværende firesifrede display holder oversikt over spillerens kontanter. Dealeren starter med $ 20 og spilleren starter med $ 20 (de totale mulige pengene i spillet er $ 9999-maksimumet for våre firesifrede skjermer, men vi trenger bare $ 20 for dette første stykket i spillet eller på annen måte det ville være kjedelig i det ekstreme og vanskelig å vinne eller tape på anstendig tid). Hvis spilleren tar alle dealerens penger, vinner spilleren. Hvis spilleren mister alle pengene sine, vinner dealeren.

Hvordan vinner eller taper du penger? De av dere som har spilt Craps, sett folk "skyte terninger" på gaten, eller sett det spilt mot kasinoet i Vegas, vet det allerede. For resten av dere, la meg gi deg en kort beskrivelse av "pass line" -delen av spillet som vi skal kode i dag.

Craps har blitt spilt i hundrevis av år, og dateres tilbake til korstogene. Det ble spilt av tropper i skyttergravene under andre verdenskrig, det ble spilt på gatene, det ble spilt i kasinoer og spillhaller. Det begynte med bare pasningslinjen, og alle de andre tingene ble lagt til i det senere. Vi vil følge den samme utviklingen.

Måten passlinjen fungerer på er denne. Du legger en innsats og deretter kaster du terningen. Den første rullen kalles "come-out-rullen". Hvis du får en 2 (slangeøyne), en 3 (ess) eller en 12 (boksbiler) på come-out-kastet, mister du innsatsen din og det kalles "craps". Hvis du ruller en 7 (en naturlig) eller en 11 (en yo, eller yo-leven) vinner du. Hvis du ruller et annet nummer, blir dette tallet ditt "poeng". Når et "poeng" er etablert, fortsetter du å kaste terningene med målet om å treffe poenget igjen før du kaster et 7. Hvis du får poenget ditt før en 7 kastes, vinner du jevne penger. Så et dollarinnsats vinner deg en dollar fra dealeren. Hvis du får en 7 før poenget ditt rulles, kalles dette "syv ut" og du mister innsatsen din til dealeren.

Etter det starter du igjen. Legg et spill på pasningslinjen og kast terningene, 7 eller 11 seire, 2, 3 eller 12 tap.

Det er mange flere typer spill, "ikke pass", "pass odds", "ikke pass odds", "come bet", "don't come bet", "field", "horn", " vanskelige måter ", etc etc etc. Du finner detaljer her:

en.wikipedia.org/wiki/Craps

Som jeg sa ovenfor, for nå vil vi bare kode passelinjen i spillet, som er alt de hadde på dagen da barna kastet terninger mot veggen for hverandres lunsjpenger, og det er her vi skal begynne.

Imidlertid, før vi begynner å kode ting, kan vi bygge forhandlerenes kontantdisplay. For dette vil jeg bruke en av de større 4-sifrede skjermer som du kan få fra Sparkfun eller andre steder. Fra nå av kommer jeg ikke til å liste opp materialer på disse opplæringsprogrammene. Hvis du faktisk har bygget alt sammen med meg, vet du allerede hvor du skal få tak i materialene og hva de er. Det er meningsløst for meg å liste dem eller hvor mye de koster.

Så la oss ta et av våre prototypebrett, en stor firesifret skjerm, en annen ATmega328p for å kontrollere skjermen, og bygge den som vi gjorde med terningrullen og spillerdisplayet før. Vi vil også legge ved overskrifter for strøm, programmering og TWI -kommunikasjon akkurat som de andre.

Trinn 2: Forhandlerenes kontantvisning

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

Vi konstruerer forhandlerdisplayet på samme måte som vi gjorde med spillerens 4-sifrede display i den siste opplæringen. De eneste forskjellene er at den er større, og den har færre pinner, så vi skal ordne den og koble den annerledes.

Jeg har lagt ved et bilde av ledningene til denne skjermen. Du kan se at den er større og har færre pins enn vår playercash -skjerm. Bildet er fra sparkfun -siden der jeg fikk displayet, og det viser hvilke pinner som er strøm for hvert siffer og hvilke pinner som styrer hvert av segmentene i et siffer.

Som vanlig bør du begynne med å koble skjermen til prototypebrødbrettet og teste hvert segment for å være sikker på at du forstår hvordan det er kablet. Deretter bør du koble den til pinnene på en AVR -mikrokontroller på brødbrettet og kjøre den derfra til vi har all koden vår i denne opplæringen. Til slutt, på slutten, bør du bygge det eksterne kortet og lodde det på. Når du tester det endelige produktet, vil du vite at eventuelle problemer kommer fra lodde- og skjærejobben og ikke koden. Ikke glem det velkjente aksiomet fra snekring "mål to ganger og kutt en gang", eller i tilfelle du lager kretskort: "kutt to ganger, loddetinn en gang." Som du kan se på bildet, brøt jeg endelig ned og kjøpte det perfekte Dremel -festet for denne typen arbeid. Et "Diamond Point Set". Det kostet 5 dollar, men det er mye mindre enn kostnaden for Anger Managment Therapy som følger med å gjøre oppskjæringsjobben min for mange ganger på rad.

Jeg bruker 330 ohm motstander til denne skjermen. COM -pinnene går gjennom motstanden til GND og strømmen går til det segmentet du vil vise. Jeg kommer til å bruke PC0 til PC3 for COM -pinnene og PB0, PB1, PB2, PB3, PB4, PD5, PD6 og PD7 for segmentene.

Her er nøkkelen til å maksimere sjansene for å få det riktig:

  1. kartlegge kretsen
  2. kutte kretsen
  3. sjekk ledningene dine
  4. fest motstandene, hettene og krystalloscillatoren
  5. sjekk tilkoblinger og ledninger igjen
  6. fest de eksterne ledningene
  7. fest mikrokontrolleren
  8. sjekk ledningene igjen
  9. fest det firesifrede displayet
  10. sjekk hvert siffer med et par ledninger fra brødbrettet
  11. legg den til side og skriv koden, vel vitende om at du sannsynligvis må justere ting senere og håpe at du ikke har dekket til en tilkobling som må kuttes.

Jeg har vist en serie bilder av ledningsjobben min. Vær oppmerksom på at du står fritt til å koble din slik du vil. Det er veldig sannsynlig at du kan finne et bedre kart enn jeg gjorde, og du bør bruke det. Ingenting i disse opplæringsprogrammene avhenger av hvordan komponentene er kablet, så lenge de har de riktige utgangsportene. Som minner meg. Legg merke til at det nå er to overskrifter som skal til SDA og to til SCL? Hvorfor tror du vi gjorde det?

Som du kan se ved den vedlagte koden på slutten av opplæringen, klippet jeg bare inn og limte inn koden fra spillerdisplayet til den siste opplæringen til en ny fil for dealerens skjerm. Deretter gikk jeg igjennom og endret oppslagstabellen for segmenter slik at den samsvarer med det nye pinnekartet og bemerket at for denne skjermen er "com" -pinnene malt og segmentpinnene er 5V i stedet for omvendt som for den andre skjermen.. Jeg endret også initialiseringen av portene for å gjenspeile de nye ledningene, jeg endret adressen til dealerkassen til 0b1000000 slik at terningvalsen kunne snakke med ham, jeg endret "syklus" -rutinen slik at den slår av PC0 til og med PC3 "com" -nål når den vil drive et bestemt segment, og jeg endret "sifferet" som vises siden de nye ledningene har sifrene i motsatt rekkefølge (hvis du lot det være som det var og prøvde å vise 1234 det ville dukket opp som 4321 i stedet).

Her er det nye registerkartet:

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

hvor 1 er PÅ og 0 er AV.

Test nå skjermen ved først å sette den initialiserte verdien av skjermen til forskjellige tall, slik at når den slås på, vises den. Dette vil fortelle deg om alt fungerer som det skal.

Endre deretter diceroller -koden slik at den bruker den nye adressen til slaven, koble dem sammen og kjør den. Det skal fungere akkurat som det vi gjorde i den siste opplæringen bortsett fra at terningkastene nå vises på den nye skjermen.

Flott! Nå er vi klare til å skrive den nye terningvalskoden slik at den kommuniserer med både spillerdisplayet og forhandlerdisplayet.

Trinn 3: Programoversikt

Programoversikt
Programoversikt
Programoversikt
Programoversikt
Programoversikt
Programoversikt

Måten koden kommer til å fungere for spillet vårt er at vi beholder terningrullen som mesteren og legger til forhandlerdisplayet som en ekstra slave. Terningkasteren vil kontrollere spillet, og den vil sende de resulterende endringene i kontanter til dealeren og spilleren viser etter hvert kast. For nå vil vi bare ha passlinjespillet på $ 10 hver gang, så vi trenger ikke å bli for kompliserte ennå med at spilleren endrer innsatsen. Senere, når vi har mekanikken i gang, vil vi legge til en annen kontroller som vil være en ekstra master som vil kontrollere innsatsen og utbetalingene, og terningkastene våre vil forbli en mester, men bare brukes til terningkast. Dette vil tillate oss å komme inn på TWI -voldgift, kollisjoner og andre viktige aspekter ved seriell kommunikasjon når du har flere mestere og slaver. Vi vil også legge til en rekke enkle 7-sifrede skjermer med trykknapper under dem som lar oss satse på andre typer ruller, men alt dette kommer i fremtidige opplæringsprogrammer. Foreløpig vil vi bare ha terningrullen som mester, og de to skjermene som slaver. Når vi trykker på knappen, vil koden bestemme om du vil betale en naturlig, ta penger fra en craps eller forgrense til en "poeng" -serie med kast til enten en seier eller en sju-out.

La oss først skrive slaverutinene. Disse er enkle ved at alt de vil gjøre er å se SDA -linjen for adressen deres. Hvis de blir ringt, vil de lese det nye nummeret for å vise og vise det. Det er alt! De trenger ikke engang å snakke tilbake til mesteren siden mesteren vil holde oversikt over summen og gjøre alle utbetalingsberegningene før de oppdaterer dem. I fremtidige opplæringsprogrammer vil vi ha slaver som skriver tilbake til mesteren (for eksempel når vi har enkle 7-sifrede skjermer med trykknapper for innsatsbeløpet, må de fortelle mesteren hvor mye som satses på hver skjerm, og så vil vi adresser dem med en adresse + leseanrop med masteren i "hovedmottakermodus"), men vi kommer til det i tide.

For øyeblikket blir alt igangsatt av et terningkastknapp -trykk etterfulgt av en beregning eller ytterligere knappetrykk og til slutt en melding til hver av skjermene med sine nye totaler. Det vil bli en test etter hver utbetaling for å avgjøre om spilleren har vunnet eller tapt, med andre ord om dealerens penger blir null etter et kast, eller om spillerens kontanter blir null etter et kast (verken dealeren eller spilleren kan gå negativt siden de bare får satse $ 10 eller annet som er igjen hvis det er mindre enn $ 10).

Så det er slik det kommer til å fungere. La oss få koding.

Trinn 4: Hovedkommunikasjonskode

Master kommunikasjonskode
Master kommunikasjonskode

Vi kan nå skrive kommunikasjonsrutinen til terningrullen. Det er også nesten identisk med det vi skrev sist, bortsett fra at vi vil kommunisere med to forskjellige slaver i stedet for bare en. Vær oppmerksom på at for hver av slaver bruker vi en annen adresse. Du bør endre koden selv og deretter bare teste den med hver adresse og sørge for at den fungerer akkurat som forrige opplæring, bortsett fra med hver separat skjerm.

Jeg vil legge ved koden for hver komponent som bare viser resultatet av rullen, slik at den kan brukes til å få skjermene til å fungere skikkelig og kontrollere ledningene.

Koding av spillet introduserer ingenting nytt for montering av språkkommandoer eller AVR-mikrokontrollerkomponenter, og derfor føler jeg ikke at jeg trenger å gå gjennom det linje for linje. Du har sikkert lagt merke til at når vi introduserer noe nytt, går jeg gjennom hver linje i liten detalj til det punktet å irritere deg hvis du ikke sovner. På den annen side vil jeg ikke gjøre det hvis det ikke er noe nytt introdusert. Slik er det i dag. Så jeg tror at du nå er forberedt på å leke med koden, lese gjennom koden, analysere koden, forstå koden, kritisere koden, latterliggjøre koden og le av fyren som skrev koden. Så jeg lar deg gå videre og gjøre det. Det er nesten sikkert at du vil finne mange steder du kan forbedre eller i det minste forenkle det jeg har skrevet.

Jeg har som vanlig vedlagt den siste versjonen av koden for de to displayene og diceroller i neste trinn sammen med en video av meg som tester tingen.

Trinn 5: Sluttkode og video

Jeg har lagt ved videoen og de 3 programmene. Du vil legge merke til at du kan fikse innsatsen og startdealeren og spillerens kontanter øverst i programmet med.equ -utsagn.

I den neste opplæringen legger vi til muligheten til å satse på forskjellige ting som vil gjøre spillet mer spennende. Det interessante med moderne Craps er at du har en rekke forskjellige måter å satse på og prøve å maksimere oddsen din. Faktisk er Craps det høyeste oddsspillet i kasinoet! … HVIS du vet hvordan du spiller det. På den annen side, hvis du ikke vet hvordan du spiller, blir det et av de laveste oddsspillene.

Når vi har flere ting å satse pengene våre på, vil jeg øke den totale mengden penger i spillet.

Jeg burde være morsom!

Ser deg neste gang!

Anbefalt: