Talaan ng mga Nilalaman:

Tutorial sa AVR Assembler 11: 5 Mga Hakbang
Tutorial sa AVR Assembler 11: 5 Mga Hakbang

Video: Tutorial sa AVR Assembler 11: 5 Mga Hakbang

Video: Tutorial sa AVR Assembler 11: 5 Mga Hakbang
Video: TESDA ELECTRICAL NCII ACTUAL WIRING INTALLATION TUTORIAL 2024, Hulyo
Anonim
Tutorial sa AVR Assembler 11
Tutorial sa AVR Assembler 11
Tutorial sa AVR Assembler 11
Tutorial sa AVR Assembler 11
Tutorial sa AVR Assembler 11
Tutorial sa AVR Assembler 11

Maligayang pagdating sa Tutorial 11!

Sa maikling tutorial na ito, sa wakas ay bubuo na kami ng unang bahagi ng aming pangwakas na proyekto.

Ang unang bagay na dapat mong gawin ay pumunta sa huling hakbang ng tutorial na ito at panoorin ang video. Saka bumalik ka dito. [humihinto habang ginagawa mo iyon….] Okay. Ngayon magpatuloy.

Kung hindi mo pa nahulaan, nagtatayo kami ng isang laro ng Craps! Siyempre, dahil lamang sa pagbuo ko ng isang laro ng craps tiyak na hindi nangangahulugang kailangan mo. Sana ay hindi na sabihin. Kapaki-pakinabang sa anumang kaso ang paggamit ng mga microcontroller upang makontrol ang mga segment na ipinapakita, atbp, at upang makipag-usap sa bawat isa - iyon ang pangunahing ginagawa natin dito. Maaari kang magsulat ng code upang magamit ang mga ito kahit papaano na gusto mo. Sa ngayon ay isasama ko ang mga ito upang maglaro ng mga crap kahit na maaari akong magpasya sa paglaon na muling layunin ang mga ipinakitang segment upang gumawa ng iba pa.

Ang dahilan kung bakit ko ito itinatayo ay dahil iniisip ko na baka kalaunan ay ginusto ko ang isang buong laki ng talahanayan ng craps sa Vegas sa aking "man lungga" sa silong ng aking bahay. Gayunpaman, wala sa aking mga kaibigan ang may kahit kaunting ideya kung paano makitungo, puntos, o magbayad ng mga pusta at rol ng craps. Kaya naisip ko na magiging cool na ang mesa na gawin ang lahat ng trabaho sa dealer para sa amin! Kapag naglalagay kami ng pusta sa talahanayan maaari din naming itulak ang isang maliit na pushbutton sa tabi ng parisukat na ang aming mga chips ay ipinapakita kung magkano ang nakalagay doon, pagkatapos ay makakalkula ng microcontroller ang pagbabayad para sa parisukat na iyon pagkatapos ng dice roll at ipakita ito. Hindi pa rin ako sigurado kung paano ko aayusin ang aspektong ito. Ang isang akala ko ay ang bawat tao ay tatanungin na ilagay ang lahat ng kanilang mga pusta sa pagliko upang maitala ng tagakontrol kung nasaan ang pera ng bawat tao bago i-record ang susunod na manlalaro at iba pa. Pagkatapos pagkatapos ng rolyo, maaaring ipakita ng computer ang mga pagbabayad sa bawat parisukat at maaari ding panatilihin ang isang tumatakbo na "kabuuang cash" para sa bawat manlalaro.

Para sa isa sa mga larawan ng pabalat ng tutorial na ito kailangan ko lang gamitin ang isang larawan ng paghila ko ng 5 aces sa poker table sa Vegas ngayong tag-init. Heheh. Magpakasawa ka sa akin.

Narito ang isang link sa kumpletong koleksyon ng aking mga tutorial na AVR assembler:

Hakbang 1: Mga Crap

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

Sa tutorial na ito ay gagawa lamang kami ng pinakasimpleng bahagi ng huling laro ng Craps. Tinatawag itong "The Pass Line" at maaari mo itong pusta. Maaari mong malaman ang lahat ng kailangan mong malaman tungkol sa "pass line" na bahagi ng laro sa pamamagitan ng panonood ng maikling 2-minutong pagtuturo na video na na-attach ko sa hakbang na ito.

Bumubuo kami ng isa pang 4 na digit na display na susubaybayan ang Cash ng Dealer sa parehong paraan na sinusubaybayan ng aming kasalukuyang 4-digit na display ang Cash ng Player. Magsisimula ang Dealer sa $ 20 at ang manlalaro ay magsisimula sa $ 20 (ang kabuuang posibleng pera sa laro ay $ 9999 - ang maximum ng aming 4-digit na ipinapakita, ngunit kakailanganin lamang namin ang $ 20 para sa unang piraso ng laro o kung hindi man ay nakakapagod sa labis at mahirap manalo o matalo sa isang disenteng dami ng oras). Kung kukuha ng manlalaro ang lahat ng pera ng dealer, mananalo ang manlalaro. Kung ang player ay mawawala ang lahat ng kanyang pera pagkatapos manalo ang dealer.

Paano ka manalo o mawawalan ng pera? Kaya, kayo na naglaro ng Craps, na nakikita ang mga taong "nag-shoot ng dice" sa kalye, o nakita na nilalaro ito laban sa casino sa Vegas, ay malalaman na. Para sa natitirang sa iyo, hayaan mo akong bigyan ka ng isang maikling paglalarawan ng "linya ng pass" na bahagi ng laro na aming mai-coding ngayon.

Ang mga Craps ay nilalaro nang daan-daang taon, na nagsimula pa noong panahon ng mga krusada. Ginampanan ito ng mga tropa sa trenches ng WWII, nilalaro ito sa mga lansangan, nilalaro ito sa mga casino at bulwagan sa pagsusugal. Nagsimula ito sa linya lamang ng pagpasa at lahat ng iba pang mga bagay ay naidagdag dito sa paglaon. Susundan namin ang parehong pag-unlad na ito.

Ang paraan ng paggana ng linya ng pass ay ito. Naglalagay ka ng pusta at pagkatapos ay igulong mo ang dice. Ang unang rolyo ay tinatawag na "come-out roll". Kung nakakuha ka ng 2 (mga mata ng ahas), isang 3 (ace deuce), o isang 12 (box car) sa come-out roll, mawalan ka ng pusta at tinawag itong "craps". Kung igulong mo ang isang 7 (isang natural) o isang 11 (isang yo, o yo-leven) mananalo ka. Kung igulong mo ang anumang iba pang numero kung gayon ang numerong ito ay magiging iyong "point". Kapag ang isang "point" ay itinatag patuloy kang igulong ang dice gamit ang layunin na maabot muli ang point bago ilunsad ang isang 7. Kung nakuha mo ang iyong puntos bago ang isang 7 ay pinagsama mananalo ka kahit pera. Kaya't ang isang dolyar na pusta ay nanalo sa iyo ng isang dolyar mula sa dealer. Kung nakakuha ka ng 7 bago mailunsad ang iyong punto, ito ay tinatawag na "pito" at mawala sa iyo ang pusta sa dealer.

Pagkatapos nito ay magsisimula ka ulit. Maglagay ng pusta sa pass line at igulong ang dice, 7 o 11 panalo, 2, 3, o 12 loses.

Maraming iba pang mga uri ng pusta, "huwag pumasa", "pass odds", "huwag pumasa sa odds", "come bet", "don't come bet", "field", "sungay", " mahihirap na paraan ", atbp atbp atbp. Maaari kang makahanap ng mga detalye dito:

en.wikipedia.org/wiki/Craps

Tulad ng sinabi ko sa itaas, sa ngayon, ise-coding lamang namin ang pass line na bahagi ng laro na lahat ay mayroon sila noong araw nang ang mga bata ay nagtatapon ng dice sa pader para sa pera sa tanghalian ng bawat isa at sa gayon dito tayo magsisimula.

Gayunpaman, bago namin simulan ang pag-coding ng mga bagay-bagay, hayaang mabuo ang pagpapakita ng cash ng dealer. Para sa mga ito, nais kong gumamit ng isa sa mas malaking mga 4-digit na pagpapakita na maaari mong makuha mula sa Sparkfun o sa iba pang lugar. Mula ngayon hindi na ako maglilista ng mga materyales sa mga tutorial na ito. Kung talagang itinatayo mo ang lahat kasama ko alam mo na kung saan kukuha ng mga materyales at kung ano ito. Walang saysay para sa aking ilista ang mga ito o kung magkano ang gastos.

Hinahayaan ang grab ang isa sa aming mga prototyping board, isang malaking 4-digit na display, isa pang ATmega328p upang makontrol ang display na iyon, at buuin ito tulad ng ginawa namin sa dice roller, at ang display ng player dati. Maglalakip din kami ng mga header para sa lakas, para sa pagprograma, at para sa mga komunikasyon sa TWI tulad ng iba pa.

Hakbang 2: Ipakita ang Cash ng Dealer

Ipakita ang Cash ng Dealer
Ipakita ang Cash ng Dealer
Ipakita ang Cash ng Dealer
Ipakita ang Cash ng Dealer
Ipakita ang Cash ng Dealer
Ipakita ang Cash ng Dealer

Binubuo namin ang display ng dealer sa parehong paraan na ginawa namin sa 4-digit na display ng manlalaro sa huling tutorial. Ang pagkakaiba lamang ay mas malaki ito, at mayroon itong mas kaunting mga pin, kaya aayusin namin ito at magkakabit ito nang magkakaiba.

Nag-attach ako ng isang larawan ng mga kable ng display na ito. Maaari mong makita na ito ay mas malaki at may mas kaunting mga pin kaysa sa aming displayercashercash. Ang larawan ay mula sa pahina ng sparkfun kung saan nakuha ko ang display at ipinapakita nito kung aling mga pin ang kapangyarihan para sa bawat digit at kung aling mga pin ang nagkokontrol sa bawat isa sa mga segment sa isang digit.

Tulad ng dati, dapat kang magsimula sa pamamagitan ng pag-plug ng display sa iyong prototyping breadboard at subukan ang bawat segment upang matiyak na naiintindihan mo kung paano ito naka-wire. Pagkatapos ay dapat mo itong mai-hook sa mga pin ng isang AVR microcontroller sa iyong breadboard at patakbuhin ito mula doon hanggang sa magawa namin ang lahat ng aming code na gumagana sa tutorial na ito. Panghuli, sa dulo, dapat mong itayo ang panlabas na board at ito ay solder. Pagkatapos kapag nasubukan mo ang pangwakas na produkto malalaman mo na ang anumang mga problema ay nagmula sa iyong paghihinang at pagputol ng trabaho at hindi ang code. Gayundin, huwag kalimutan ang kilalang axiom mula sa karpintero na "sukatin nang dalawang beses, at i-cut nang isang beses", o sa kaso ng paggawa ng mga circuit board: "gupitin nang dalawang beses, isang solder nang isang beses." Tulad ng nakikita mo sa larawan, sa wakas ay nasira ako at bumili ng perpektong pagkakabit ng Dremel para sa ganitong uri ng trabaho. Isang "Set ng Diamond Point". Nagkakahalaga ito ng 5 pera ngunit mas mababa iyon kaysa sa gastos ng Anger Managment Therapy na kasama ng pagpapaikot sa aking trabaho sa pagputol ng maraming beses sa isang hilera.

Gumagamit ako ng 330 ohm resistors para sa display na ito. Ang mga COM pin ay dumaan sa risistor sa GND at ang lakas ay napupunta sa alinmang segment na nais mong ipakita. Gagamitin ko ang PC0 sa pamamagitan ng PC3 para sa mga COM pin at PB0, PB1, PB2, PB3, PB4, PD5, PD6, at PD7 para sa mga segment.

Narito ang susi sa pag-maximize ng iyong mga pagkakataong maayos ito:

  1. mapa ang circuit
  2. putulin ang circuit
  3. suriin ang iyong mga kable
  4. ikabit ang mga resistors, ang takip, at ang kristal oscillator
  5. suriin muli ang mga koneksyon at mga kable
  6. ikabit ang panlabas na mga wire
  7. ikabit ang microcontroller
  8. suriin muli ang mga kable
  9. ikabit ang 4-digit na display
  10. suriin ang bawat digit na may isang pares ng mga wires mula sa breadboard
  11. itabi ito at isulat ang code, alam na marahil ay kailangan mong i-tweak ang mga bagay sa paglaon at umaasa na hindi mo natakpan ang isang koneksyon na kailangang putulin.

Nagpakita ako ng isang serye ng mga larawan ng aking trabaho sa mga kable. Mangyaring mapagtanto na malaya kang mag-wire sa iyo sa anumang gusto mong paraan. Malamang na maaari kang makahanap ng isang mas mahusay na mapa kaysa sa ginawa ko at dapat mo itong gamitin. Wala sa mga tutorial na ito ay nakasalalay sa kung paano naka-wire ang iyong mga bahagi, hangga't mayroon silang mga tamang output port. Alin ang nagpapaalala sa akin. Pansinin na mayroon na ngayong dalawang mga header na pupunta sa SDA at dalawa na pupunta sa SCL? Bakit sa palagay mo ginawa namin iyon?

Ngayon, tulad ng nakikita mo sa pamamagitan ng nakalakip na code sa pagtatapos ng tutorial ay gupitin ko at na-paste ang code mula sa pagpapakita ng player ng huling tutorial sa isang bagong file para sa display ng dealer. Pagkatapos ay dumaan ako at binago ang "mga segment" na talahanayan ng paghahanap upang tumutugma sa bagong mapa ng pin na binabanggit na para sa pagpapakitang ito ang mga "com" na pin ay ground at ang mga segment na pin ay 5V kaysa sa iba pang paraan tulad ng para sa ibang display. Binago ko rin ang pagsisimula ng mga port upang maipakita ang bagong mga kable, binago ko ang address ng displayercash sa 0b1000000 upang ang dice roller ay makakausap siya, binago ko ang "cycle" subroutine upang patayin nito ang Ang PC0 sa pamamagitan ng PC3 "com" ay pin kung nais nitong mapagana ang isang partikular na segment at binago ko ang "digit" na ipinapakita dahil ang bagong kable ay may mga digit sa kabaligtaran na pagkakasunud-sunod (kung iniwan mo ito tulad nito at sinubukan na ipakita 1234 ito ipapakita bilang 4321 sa halip).

Narito ang bagong mapa ng rehistro:

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

kung saan ang 1 ay ON at 0 ay OFF.

Ngayon subukan ang display sa pamamagitan ng unang pagtatakda ng inisyal na halaga ng display sa iba't ibang mga numero upang kapag ito ay lumiliko ay ipinapakita ang mga ito. Sasabihin nito sa iyo kung ang lahat ay gumagana nang tama.

Pagkatapos ay baguhin ang code ng diceroller upang magamit nito ang bagong address para sa alipin, i-hook ang mga ito, at patakbuhin ito. Dapat itong kumilos nang eksakto tulad ng ginawa namin sa huling tutorial maliban na ang mga dice roll ay lalabas ngayon sa bagong display.

Malaki! Handa na kaming magsulat ng bagong dice roller code upang ito ay makipag-usap sa parehong display ng player at display ng dealer.

Hakbang 3: Balangkas ng Program

Balangkas ng Programa
Balangkas ng Programa
Balangkas ng Programa
Balangkas ng Programa
Balangkas ng Programa
Balangkas ng Programa

Ang paraan ng paggana ng code para sa aming laro ay mapanatili namin ang roller ng dice bilang master at idagdag ang display ng dealer bilang isang karagdagang alipin. Kontrolin ng dice roller ang laro at magpapadala ito ng mga nagreresultang pagbabago sa cash sa dealer at ipinapakita ang player pagkatapos ng bawat roll. Sa ngayon magkakaroon lamang kami ng pass line na pusta na $ 10 bawat oras kaya hindi namin kailangang maging kumplikado pa sa pagbabago ng manlalaro ng kanyang pusta. Sa paglaon, sa sandaling mayroon kaming mga mekanika na gumagana, magdaragdag kami ng isa pang controller na magiging isang karagdagang master na makokontrol ang pagtaya at ang mga pagbabayad at ang aming roller ng dice ay mananatiling isang master ngunit ginagamit lamang para sa pag-ikot ng dice. Papayagan kaming makapasok sa arbitrasyon ng TWI, mga banggaan, at iba pang mahahalagang aspeto ng serial na komunikasyon kapag mayroon kang maraming mga masters at alipin. Magdaragdag din kami ng isang bilang ng mga iisang 7-digit na pagpapakita na may mga pindutan ng push sa ilalim ng mga ito na magpapahintulot sa amin na tumaya sa iba pang mga uri ng mga rolyo, ngunit ang lahat ay darating sa mga tutorial sa hinaharap. Sa ngayon, nais lang namin ang dice roller bilang master, at ang dalawang ipinapakita bilang mga alipin. Kapag pinindot namin ang pindutan, magpapasya ang code kung magbabayad ng natural, kumuha ng pera mula sa isang craps, o magtala sa isang "point" na serye ng mga roll hanggang sa isang panalo o isang pitong labas.

Isulat muna natin ang mga gawain sa alipin. Ang mga ito ay simple sa lahat ng gagawin nila ay panoorin ang linya ng SDA para sa kanilang address, kung tatawagin sila ay babasahin nila ang bagong numero upang ipakita at ipakita ito. Yun lang! Ni hindi nila kailangang makipag-usap pabalik sa master dahil isusubaybayan ng master ang kanilang kabuuan at gawin ang lahat ng mga kalkulasyon sa pagbabayad bago i-update ang mga ito. Sa mga tutorial sa hinaharap magkakaroon kami ng mga alipin na sumusulat sa master (halimbawa kapag mayroon kaming solong 7-digit na pagpapakita na may mga pindutan ng push para sa halaga ng pagtaya, sasabihin nila sa master kung magkano ang pusta sa bawat display at sa gayon tugunan ang mga ito ng isang address + basahin ang tawag sa master sa "master receiver mode") ngunit makakarating kami sa na sa takdang oras.

Sa ngayon ang lahat ay na-instigate ng push roll button na sinusundan ng isang pagkalkula o karagdagang pindot ng push at sa wakas isang mensahe sa bawat isa sa mga ipinapakita sa kanilang mga bagong kabuuan. Magkakaroon ng isang pagsubok pagkatapos ng bawat pagbabayad upang matukoy kung ang manlalaro ay nanalo o natalo, sa madaling salita, kung ang cash ng dealer ay naging zero pagkatapos ng isang rol, o kung ang cash ng manlalaro ay naging zero pagkatapos ng isang rol (alinman sa dealer o manlalaro maaaring maging negatibo dahil papayagan lamang silang tumaya ng $ 10 o kung anuman ang natitira kung mas mababa sa $ 10).

Kaya't kung paano ito gagana. Kumuha tayo ng coding.

Hakbang 4: Master Communication Code

Master Code ng Komunikasyon
Master Code ng Komunikasyon

Maaari na nating isulat ang gawain sa komunikasyon ng dice roller. Ito ay halos magkapareho din sa isinulat namin noong huling oras maliban na makikipag-usap kami sa dalawang magkakaibang alipin kaysa sa isa lamang. Tandaan na para sa bawat alipin ay gumagamit kami ng ibang address. Dapat mong baguhin ang code sa iyong sarili at pagkatapos ay subukan lamang ito sa bawat address at tiyaking gumagana ito tulad ng huling tutorial maliban sa bawat magkakahiwalay na display.

Ikakabit ko ang code para sa bawat bahagi na ipinapakita lamang ang resulta ng roll upang magamit ito upang maayos na maipakita ang mga display at suriin ang mga kable.

Ang pag-coding ng laro ay hindi nagpapakilala ng bago sa mga utos ng wika ng pagpupulong o mga sangkap ng AVR microcontroller at sa gayon ay hindi ko naramdaman na kailangan kong dumaan dito sa linya. Marahil ay napansin mo na kapag nagpakilala kami ng isang bagong bagay ay dumaan ako sa bawat linya sa minutong detalye sa punto ng pagpapagalit sa iyo kung hindi ka pinatulog. Sa kabilang banda ay hindi ko iyon gagawin kung walang bagong ipinakilala. Iyon ang kaso ngayon. Kaya sa palagay ko handa ka na ngayon upang i-play ang code, basahin ang code, pag-aralan ang code, unawain ang code, pintasan ang code, pagtawanan ang code, at pagtawanan ang taong sumulat ng code. Kaya't hahayaan kitang magpatuloy at gawin iyon. Ito ay halos tiyak na mahahanap mo ang maraming mga lugar na maaari mong pagbutihin o kahit paano gawing simple ang aking isinulat.

Mayroon akong, tulad ng dati, ikinabit ang pangwakas na bersyon ng code para sa dalawang ipinapakita at ang diceroller sa susunod na hakbang kasama ang isang video na sinusubukan ko ang bagay.

Hakbang 5: Pangwakas na Code at Video

Ikinabit ko ang video at ang 3 mga programa. Mapapansin mo na maaari mong ayusin ang taya at ang panimulang dealer at cash ng manlalaro sa tuktok ng programa gamit ang mga pahayag na.equ.

Sa susunod na tutorial ay idaragdag namin ang kakayahang tumaya sa iba't ibang mga bagay na gagawing mas kapanapanabik ang laro. Ang kagiliw-giliw na bagay tungkol sa mga modernong Craps ay mayroon kang maraming iba't ibang mga paraan upang tumaya at subukang i-maximize ang iyong mga logro. Sa katunayan, ang Craps ay ang pinakamataas na laro ng logro sa Casino! … KUNG alam mo kung paano ito laruin. Sa kabilang banda, kung hindi mo alam kung paano maglaro sa gayon ito ay magiging isa sa pinakamababang laro ng logro.

Kapag mayroon kaming maraming mga bagay na mapagpipilian ang aming pera sa gayon madadagdagan ko ang kabuuang halaga ng pera sa laro.

Dapat masaya ako!

Magkita tayo sa susunod!

Inirerekumendang: