Cuprins:
- Pasul 1: Craps
- Pasul 2: Afișarea numerarului dealerului
- Pasul 3: Schița programului
- Pasul 4: Codul principal de comunicații
- Pasul 5: Cod final și videoclip
Video: Tutorial AVR Assembler 11: 5 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:41
Bine ați venit la Tutorialul 11!
În acest scurt tutorial, vom construi în sfârșit prima parte a proiectului nostru final.
Primul lucru pe care trebuie să-l faceți este să mergeți la ultimul pas al acestui tutorial și să urmăriți videoclipul. Atunci întoarce-te aici. [pauză în timp ce faci asta …] Bine. Acum continuați.
Dacă nu ați ghicit deja, construim un joc Craps! Desigur, doar pentru că construiesc un joc de craps cu siguranță nu înseamnă că trebuie. Sper că este de la sine înțeles. Este util în orice caz să folosim microcontrolere pentru a controla afișajele segmentate etc. și pentru a comunica între noi - asta facem în principal aici. Puteți scrie cod pentru a le utiliza oricum doriți. Deocamdată le voi codifica pentru a juca craps, deși pot decide mai târziu să refac ecranele segmentate pentru a face altceva.
Motivul pentru care construiesc acest lucru este pentru că mă gândesc că aș putea dori în cele din urmă o masă de craps Vegas de dimensiuni complete în „peștera mea de bărbați” din subsolul casei mele. Cu toate acestea, niciunul dintre prietenii mei nu are nici cea mai mică idee despre cum să trateze, să înscrie sau să plătească pariuri și jocuri. Așa că m-am gândit că ar fi grozav ca masa să facă toată treaba dealerului pentru noi! Când plasăm un pariu pe masă, putem, de asemenea, să împingem un mic buton lângă pătrat pe care se află jetoanele noastre, arătând cât este plasat acolo, atunci microcontrolerul poate calcula plata pentru acel pătrat după lansarea zarurilor și îl poate afișa. Încă nu sunt foarte sigur cum voi organiza acest aspect. Unul dintre gândurile pe care l-am avut este că fiecărei persoane i se va cere să își plaseze toate pariurile pe rând, astfel încât controlorul să înregistreze unde sunt banii fiecărei persoane înainte de a înregistra următorul jucător și așa mai departe. Apoi, după lansare, computerul poate afișa plățile pe fiecare pătrat și, de asemenea, poate păstra un "numerar total" pentru fiecare jucător.
Pentru una dintre imaginile de copertă ale acestui tutorial, a trebuit doar să folosesc o poză cu mine trăgând 5 ași la masa de poker din Vegas în această vară. Heheh. Răsfățați-mă.
Iată un link către colecția completă a tutorialelor mele de asamblare AVR:
Pasul 1: Craps
În acest tutorial vom construi doar cea mai simplă parte a jocului final Craps. Aceasta se numește „Linia de trecere” și puteți paria pe ea. Puteți afla tot ce trebuie să știți despre partea „linie de trecere” a jocului, urmărind scurtul videoclip de 2 minute pe care l-am atașat acestui pas.
Vom construi un alt afișaj de 4 cifre, care va ține evidența numerarului dealerului, în același mod în care afișajul nostru actual de 4 cifre ține evidența numerarului jucătorului. Dealerul va începe cu 20 USD, iar jucătorul va începe cu 20 USD (suma totală posibilă din joc este de 9999 USD - maximul afișajelor noastre din 4 cifre, dar vom avea nevoie doar de 20 USD pentru această primă piesă a jocului sau altfel ar fi plictisitor în extrem și greu de câștigat sau pierdut într-un timp decent). Dacă jucătorul ia toți banii dealerului, acesta câștigă. Dacă jucătorul își pierde toți banii, atunci dealerul câștigă.
Cum câștigi sau pierzi bani? Ei bine, cei dintre voi care ați jucat Craps, ați văzut oameni „tragând zaruri” pe stradă sau ați văzut jucând împotriva cazinoului din Vegas, vor ști deja. Pentru ceilalți dintre voi, permiteți-mi să vă ofer o scurtă descriere a părții „linie de trecere” a jocului pe care o vom codifica astăzi.
Craps se joacă de sute de ani, datând de pe vremea cruciadelor. A fost jucat de trupe în tranșeele celui de-al doilea război mondial, a fost jucat pe străzi, a fost jucat în cazinouri și săli de jocuri de noroc. A început doar cu linia de trecere și toate celelalte lucruri i-au fost adăugate ulterior. Vom urma aceeași progresie.
Modul în care funcționează linia de trecere este acesta. Plasați un pariu și apoi aruncați zarurile. Prima rola se numește "rola de ieșire". Dacă primești un 2 (ochi de șarpe), un 3 (ace deuce) sau un 12 (mașini box) pe rolul de ieșire, îți pierzi pariul și se numește „craps”. Dacă arunci un 7 (un natural) sau un 11 (un yo, sau yo-leven) câștigi. Dacă aruncați orice alt număr, atunci acest număr devine „punctul dvs.”. Odată stabilit un „punct”, continuați să aruncați zarurile cu scopul de a lovi din nou punctul înainte de a arunca un 7. Dacă obțineți punctul înainte ca un 7 să fie lansat, câștigați chiar și bani. Deci, un pariu pe dolari câștigă un dolar de la dealer. Dacă primești un 7 înainte ca punctul tău să fie adunat, acesta se numește „șapte out” și îți pierzi pariul în fața dealerului.
După aceea începi din nou. Plasați un pariu pe linia de trecere și aruncați zarurile, 7 sau 11 victorii, 2, 3 sau 12 pierde.
Există mai multe tipuri de pariuri, „nu trece”, „trece cote”, „nu trece cote”, „vino pariu”, „nu veni pariu”, „câmp”, „corn”, „ căi grele , etc etc etc. Puteți găsi detalii aici:
en.wikipedia.org/wiki/Craps
Așa cum am spus mai sus, deocamdată, vom codifica doar partea de linie de trecere a jocului, care este tot ce aveau în ziua când copiii aruncau zaruri pe perete pentru banii prânzului celuilalt și deci de aici vom începe.
Cu toate acestea, înainte de a începe să codificăm lucruri, să construim afișajul de numerar al dealerului. Pentru aceasta, vreau să folosesc unul dintre afișajele mai mari de 4 cifre pe care le puteți obține de la Sparkfun sau în altă parte. De acum înainte nu voi lista materiale despre aceste tutoriale. Dacă ați construit de fapt tot timpul împreună cu mine, atunci știți deja de unde să obțineți materialele și care sunt acestea. Este inutil pentru mine să le listez sau cât costă.
Deci, să luăm una dintre plăcile noastre de prototipare, un afișaj mare de 4 cifre, un alt ATmega328p pentru a controla acel afișaj și să-l construim așa cum am făcut cu rolele de zaruri și afișajul jucătorului înainte. De asemenea, vom atașa anteturi pentru alimentare, pentru programare și pentru comunicații TWI la fel ca celelalte.
Pasul 2: Afișarea numerarului dealerului
Construim afișajul dealerului la fel cum am făcut-o cu afișajul de 4 cifre al jucătorului din ultimul tutorial. Singurele diferențe sunt că este mai mare și are mai puțini pini, așa că o vom aranja și o vom cabla diferit.
Am atașat o imagine a cablajului acestui afișaj. Puteți vedea că este mai mare și are mai puțini pini decât afișajul nostru de jocuri de schimb. Imaginea este de pe pagina sparkfun de unde am primit afișajul și arată care pini sunt puterea pentru fiecare cifră și care pini controlează fiecare dintre segmentele dintr-o cifră.
Ca de obicei, ar trebui să începeți prin conectarea afișajului la panoul de testare a prototipurilor și testarea fiecărui segment pentru a vă asigura că înțelegeți cum este conectat. Apoi, ar trebui să-l conectați la pinii unui microcontroler AVR de pe placa dvs. și să îl rulați de acolo până când vom avea tot codul nostru în acest tutorial. În cele din urmă, la final, ar trebui să construiți placa externă și să o lipiți. Apoi, când testați produsul final, veți ști că orice problemă provine din lucrarea de lipit și tăiat și nu din cod. De asemenea, nu uitați de binecunoscuta axiomă din tâmplărie „măsurați de două ori și tăiați o dată” sau, în cazul fabricării plăcilor de circuite: „tăiați de două ori, lipiți o dată”. După cum puteți vedea în imagine, în cele din urmă m-am despărțit și am cumpărat atașamentul perfect Dremel pentru acest tip de muncă. Un „set de puncte de diamant”. A costat 5 dolari, dar acest lucru este mult mai mic decât costul terapiei de gestionare a mâniei care vine odată cu efectuarea lucrării mele de tăiere de prea multe ori la rând.
Folosesc rezistențe de 330 ohmi pentru acest afișaj. Pinii COM trec prin rezistență la GND și puterea se îndreaptă către oricare segment pe care doriți să îl afișați. Voi folosi PC0 prin PC3 pentru pinii COM și PB0, PB1, PB2, PB3, PB4, PD5, PD6 și PD7 pentru segmente.
Iată cheia pentru a-ți maximiza șansele de a-ți face bine:
- trasează circuitul
- taie circuitul
- verificați cablajul
- atașați rezistențele, capacele și oscilatorul de cristal
- verificați din nou conexiunile și cablajul
- atașați firele externe
- atașați microcontrolerul
- verificați din nou cablajul
- atașați afișajul din 4 cifre
- verificați fiecare cifră cu o pereche de fire de pe panoul de verificare
- lăsați-l deoparte și scrieți codul, știind că probabil va trebui să modificați lucrurile mai târziu și sperând că nu ați acoperit o conexiune care trebuie tăiată.
Am arătat o serie de poze cu lucrările mele de cablare. Vă rog să vă dați seama că sunteți liber să vă conectați a dvs. în orice fel doriți. Este foarte probabil să găsiți o hartă mai bună decât am făcut-o și ar trebui să o folosiți. Nimic din aceste tutoriale nu depinde de modul în care sunt conectate componentele dvs., atâta timp cât acestea au porturile de ieșire corecte. Ceea ce îmi amintește. Observați că acum există două anteturi care merg către SDA și două care merg către SCL? De ce crezi că am făcut asta?
Acum, după cum puteți vedea după codul atașat la sfârșitul tutorialului, pur și simplu am tăiat și lipit codul de pe afișajul playerului din ultimul tutorial într-un fișier nou pentru afișajul dealerului. Apoi am parcurs și am schimbat tabelul de căutare „segmente” pentru a corespunde noii hărți a pinului, observând că pentru acest afișaj pinii „com” sunt măcinați și pinii segmentului sunt 5V, mai degrabă decât invers, așa cum a fost pentru celălalt afișaj. Am schimbat, de asemenea, inițializarea porturilor pentru a reflecta noua cablare, am schimbat adresa afișajului dealercash la 0b1000000, astfel încât rolul de zaruri să poată vorbi cu el, am schimbat subrutina "ciclu", astfel încât să oprească PC0 până la PC3 "com" pini când vrea să alimenteze un anumit segment și am schimbat "cifra" care se afișează, deoarece noua cablare are cifrele în ordinea opusă (dacă l-ați lăsat așa cum a fost și ați încercat să-l afișați 1234 ar fi apărut ca 4321 în schimb).
Iată noua hartă a registrului:
(PD7, PD6, PD5, PB4, PB3, PB2, PB1, PB0) = (punct zecimal, c, g, b, f, a, e, d)
unde 1 este PORNIT și 0 este OPRIT.
Acum testați afișajul setând mai întâi valoarea inițializată a afișajului pe diferite numere, astfel încât atunci când se aprinde să le arate. Acest lucru vă va spune dacă totul funcționează corect.
Apoi modificați codul dicerollerului astfel încât să utilizeze noua adresă pentru sclav, conectați-le împreună și executați-l. Ar trebui să acționeze exact așa cum am făcut în ultimul tutorial, cu excepția faptului că aruncările de zaruri apar acum pe noul ecran.
Grozav! Acum suntem gata să scriem noul cod cu role de zaruri, astfel încât să comunice atât cu afișajul jucătorului, cât și cu afișajul dealerului.
Pasul 3: Schița programului
Modul în care codul va funcționa pentru jocul nostru este că vom păstra rolele de zaruri ca stăpân și vom adăuga afișajul dealerului ca un sclav suplimentar. Rola de zaruri va controla jocul și va trimite modificările rezultate în numerar dealerului, iar jucătorul afișează după fiecare lansare. Deocamdată, pariul pe linia de trecere va fi de 10 USD de fiecare dată, deci nu trebuie să ne complicăm prea mult, jucătorul schimbându-și pariul. Mai târziu, odată ce mecanica funcționează, vom adăuga un alt controler care va fi un master suplimentar care va controla pariurile și plățile, iar rola noastră de zaruri va rămâne un master, dar este utilizată doar pentru aruncarea zarurilor. Acest lucru ne va permite să intrăm în arbitrajul TWI, coliziuni și alte aspecte importante ale comunicării seriale atunci când aveți mai mulți maeștri și sclavi. Vom adăuga, de asemenea, un număr de afișaje unice de 7 cifre, cu butoane sub ele, care ne vor permite să mizăm pe alte tipuri de role, dar toate acestea vor veni în tutoriale viitoare. Deocamdată, vrem doar rolul de zaruri ca maestru, iar cele două afișaje ca sclavi. Când apăsăm butonul, codul va decide dacă plătiți un produs natural, să luați bani de la un craps sau să ramificați într-o serie de "puncte" de rulouri până la o victorie sau un șapte-out.
Să scriem mai întâi rutina sclavilor. Acestea sunt simple prin faptul că tot ce vor face este să urmărească linia SDA pentru adresa lor, dacă sunt chemate, vor citi noul număr pentru a-l afișa și afișa. Asta e tot! Nici măcar nu trebuie să vorbească cu masterul, deoarece masterul va ține evidența totalelor lor și va face toate calculele de plată înainte de a le actualiza. În viitorele tutoriale vom avea sclavi care se vor întoarce la master (de exemplu, atunci când avem afișaje unice de 7 cifre cu butoane pentru suma de pariere, vor trebui să îi spună masterului cât se pariază pe fiecare afișaj și așa vom face adresează-le cu o adresă + citire apel cu masterul în „modul receptor master”), dar vom ajunge la asta în timp util.
Deocamdată totul este instigat de apăsarea butonului de aruncare a zarurilor, urmată de un calcul sau de apăsarea butoanelor ulterioare și în cele din urmă un mesaj către fiecare dintre afișaje cu noile lor totaluri. Va fi un test după fiecare plată pentru a determina dacă jucătorul a câștigat sau a pierdut, cu alte cuvinte, dacă banii dealerului devin zero după o lansare sau dacă banii jucătorului devin zero după o lansare (nici dealerul, nici jucătorul pot deveni negative, deoarece li se va permite să parieze doar 10 $ sau altceva ce rămâne dacă este mai mic de 10 $).
Deci, așa va funcționa. Să luăm codificarea.
Pasul 4: Codul principal de comunicații
Acum putem scrie rutina de comunicare a rolei de zaruri. De asemenea, este aproape identic cu cel pe care l-am scris ultima dată, cu excepția faptului că vom comunica cu doi sclavi diferiți decât cu unul singur. Rețineți că pentru fiecare dintre sclavi folosim o adresă diferită. Ar trebui să modificați singur codul și apoi pur și simplu să-l testați cu fiecare adresă și să vă asigurați că funcționează la fel ca ultimul tutorial, cu excepția fiecărui afișaj separat.
Voi atașa codul pentru fiecare componentă care afișează pur și simplu rezultatul ruloului, astfel încât să poată fi folosit pentru ca afișajele să funcționeze corect și să verifice cablajul.
Codificarea jocului nu introduce nimic nou în ceea ce privește comenzile limbajului de asamblare sau componentele microcontrolerului AVR și, prin urmare, nu am impresia că trebuie să îl parcurg rând cu rând. Probabil că ați observat că, atunci când introducem ceva nou, trec prin fiecare linie cu detalii minuscule până la punctul de a vă exaspera, dacă nu de a vă adormi. Pe de altă parte, nu voi face asta dacă nu este introdus nimic nou. Acesta este cazul astăzi. Deci, cred că sunteți pregătit până acum să vă jucați cu codul, să citiți codul, să analizați codul, să înțelegeți codul, să criticați codul, să vă bateți jocul și să râdeți de tipul care a scris codul. Așa că te voi lăsa să mergi mai departe și să faci asta. Este aproape sigur că veți găsi multe locuri pe care le puteți îmbunătăți sau cel puțin simplifica ceea ce am scris.
Am atașat, ca de obicei, versiunea finală a codului pentru cele două afișaje și diceroller la pasul următor, împreună cu un videoclip cu mine testând chestia.
Pasul 5: Cod final și videoclip
Am atașat videoclipul și cele 3 programe. Veți observa că puteți remedia pariul și banii de la dealer și jucător de la începutul programului cu declarații.equ.
În următorul tutorial vom adăuga posibilitatea de a paria pe diferite lucruri care vor face jocul mai interesant. Interesantul despre Craps modern este că aveți o multitudine de modalități diferite de a paria și de a încerca să vă maximizați cotele. De fapt, Craps este cel mai mare joc de cote din cazinou! … DACĂ știi cum să o joci. Pe de altă parte, dacă nu știi cum să joci, acesta devine unul dintre cele mai mici cote.
Odată ce vom avea mai multe lucruri pe care să ne pariați banii, atunci voi crește suma totală de bani din joc.
Ar trebui să fiu distractiv!
Ne vedem data viitoare!
Recomandat:
Tutorial AVR Assembler 2: 4 pași
Tutorial AVR Assembler 2: Acest tutorial este o continuare a " AVR Assembler Tutorial 1 " Dacă nu ați parcurs Tutorialul 1, ar trebui să vă opriți acum și să faceți asta mai întâi. În acest tutorial vom continua studiul programării limbajului de asamblare al atmega328p u
Tutorial AVR Assembler 1: 5 pași
AVR Assembler Tutorial 1: Am decis să scriu o serie de tutoriale despre cum să scriu programe de limbaj de asamblare pentru Atmega328p care este microcontrolerul utilizat în Arduino. Dacă oamenii rămân interesați, voi continua să renunț la o săptămână sau cam așa până când voi rămâne fără
Tutorial AVR Assembler 6: 3 pași
Tutorial AVR Assembler 6: Bine ați venit la Tutorialul 6! Tutorialul de astăzi va fi unul scurt, în care vom dezvolta o metodă simplă de comunicare a datelor între un atmega328p și altul folosind două porturi care le conectează. Vom lua apoi rolul de zaruri din Tutorialul 4 și din Registr
Tutorial AVR Assembler 8: 4 Pași
AVR Assembler Tutorial 8: Bine ați venit la Tutorialul 8! În acest scurt tutorial vom face o mică deviere de la introducerea de noi aspecte ale programării limbajului de asamblare pentru a arăta cum să mutăm componentele noastre de prototipare într-un „tipărit” separat. placă de circuit
Tutorial AVR Assembler 7: 12 Pași
AVR Assembler Tutorial 7: Bine ați venit la Tutorialul 7! Astăzi vom arăta mai întâi cum să curățați o tastatură și apoi să arătăm cum să utilizați porturile de intrare analogice pentru a comunica cu tastatura. Vom face acest lucru folosind întreruperi și un singur fir ca intrare. Vom conecta tastatura astfel încât să