Sommario:
- Fase 1: Craps
- Passaggio 2: display contanti del rivenditore
- Passaggio 3: struttura del programma
- Passaggio 4: codice di comunicazione principale
- Passaggio 5: codice finale e video
Video: Tutorial Assembler AVR 11: 5 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 09:59
Benvenuto nell'esercitazione 11!
In questo breve tutorial, andremo finalmente a costruire la prima parte del nostro progetto finale.
La prima cosa da fare è andare all'ultimo passaggio di questo tutorial e guardare il video. Allora torna qui. [pausa mentre lo fai….] Okay. Ora procedi.
Se non hai ancora indovinato, stiamo costruendo un gioco di Craps! Naturalmente, solo perché sto costruendo un gioco di craps di certo non significa che tu debba farlo. Spero che sia ovvio. È utile in ogni caso utilizzare microcontrollori per controllare display segmentati, ecc. e per comunicare tra loro - questo è principalmente ciò che stiamo facendo qui. Puoi scrivere il codice per usarli come preferisci. Per ora li codificherò per giocare a craps, anche se in seguito potrei decidere di riutilizzare i display segmentati per fare qualcos'altro.
Il motivo per cui sto costruendo questo è perché sto pensando che alla fine potrei volere un tavolo da craps di Las Vegas a grandezza naturale nella mia "grotta dell'uomo" nel seminterrato di casa mia. Tuttavia, nessuno dei miei amici ha la minima idea di come distribuire, segnare o pagare le puntate ei lanci di craps. Quindi ho pensato che sarebbe stato bello che il tavolo facesse tutto il lavoro del dealer per noi! Quando piazziamo una puntata sul tavolo, possiamo anche premere un piccolo pulsante vicino al quadrato su cui si trovano le nostre fiches per mostrare quanto è posizionato lì, quindi il microcontrollore può calcolare la vincita per quel quadrato dopo il lancio dei dadi e visualizzarlo. Non sono ancora abbastanza sicuro di come organizzerò questo aspetto però. Un pensiero che avevo era che a ogni persona sarebbe stato chiesto di piazzare tutte le sue scommesse a turno in modo che il controller registrerà dove si trovano i soldi di ogni persona prima di registrare il giocatore successivo e così via. Quindi, dopo il lancio, il computer può mostrare le vincite su ogni casella e può anche mantenere un "cash totale" in esecuzione per ogni giocatore.
Per una delle immagini di copertina di questo tutorial ho dovuto usare una foto di me che tiro 5 assi al tavolo da poker a Las Vegas quest'estate. Eheh. Assecondami.
Ecco un link alla raccolta completa dei miei tutorial sull'assemblatore AVR:
Fase 1: Craps
In questo tutorial costruiremo solo la parte più semplice del gioco finale di Craps. Questo si chiama "The Pass Line" e puoi scommetterci. Puoi imparare tutto ciò che devi sapere sulla parte "pass line" del gioco guardando il breve video didattico di 2 minuti che ho allegato a questo passaggio.
Costruiremo un altro display a 4 cifre che terrà traccia dei contanti del banco nello stesso modo in cui il nostro attuale display a 4 cifre tiene traccia dei contanti del giocatore. Il banco inizierà con $ 20 e il giocatore inizierà con $ 20 (il denaro totale possibile nel gioco è $ 9999 -- il massimo dei nostri display a 4 cifre, ma avremo bisogno solo di $ 20 per questo primo pezzo del gioco o altrimenti sarebbe noioso all'estremo e difficile da vincere o perdere in un discreto lasso di tempo). Se il giocatore prende tutti i soldi del banco, il giocatore vince. Se il giocatore perde tutti i suoi soldi, vince il banco.
Come si vince o si perde denaro? Bene, quelli di voi che hanno giocato a Craps, visto gente "tirare a dadi" per strada, o visto giocare contro il casinò di Las Vegas, lo sapranno già. Per il resto di voi, lasciate che vi dia una breve descrizione della parte "pass line" del gioco che codificheremo oggi.
Si gioca a craps da centinaia di anni, fin dai tempi delle crociate. È stato giocato dalle truppe nelle trincee della seconda guerra mondiale, è stato giocato per le strade, è stato giocato nei casinò e nelle sale da gioco. È iniziato solo con la linea di passaggio e tutte le altre cose sono state aggiunte in seguito. Seguiremo questa stessa progressione.
Il modo in cui funziona la pass line è questo. Fai una scommessa e poi tiri i dadi. Il primo rotolo è chiamato "come-out roll". Se ottieni un 2 (occhi di serpente), un 3 (asso due) o un 12 (carrozze) sul lancio di apertura, perdi la tua scommessa e si chiama "craps". Se ottieni un 7 (naturale) o un 11 (yo o yo-leven) vinci. Se ottieni qualsiasi altro numero, questo numero diventa il tuo "punto". Una volta stabilito un "punto", si continua a tirare i dadi con l'obiettivo di centrare nuovamente il punto prima di ottenere un 7. Se si ottiene il punto prima che venga lanciato un 7, si vince alla pari. Quindi una scommessa in dollari ti fa guadagnare un dollaro dal banco. Se ottieni un 7 prima che il tuo punto venga tirato, questo è chiamato "sette out" e perdi la tua scommessa per il banco.
Dopo ricominci. Piazza una scommessa sulla linea di passaggio e tira i dadi, 7 o 11 vittorie, 2, 3 o 12 perdite.
Ci sono molti altri tipi di scommesse, "non passare", "passare le probabilità", "non passare le probabilità", "come scommettere", "non venire", "campo", "corno", " modi duri", ecc ecc ecc. Puoi trovare i dettagli qui:
en.wikipedia.org/wiki/Craps
Come ho detto sopra, per ora, codificheremo solo la parte della linea di passaggio del gioco, che è tutto ciò che avevano ai tempi in cui i bambini lanciavano dadi contro il muro per i soldi del pranzo l'uno dell'altro e quindi è qui che inizieremo.
Tuttavia, prima di iniziare a codificare, costruiamo il display del bancomat. Per questo, voglio usare uno dei display a 4 cifre più grandi che puoi ottenere da Sparkfun o altrove. D'ora in poi non elencherò materiali su questi tutorial. Se hai effettivamente costruito tutto insieme a me, allora sai già dove trovare i materiali e cosa sono. È inutile per me elencarli o quanto costano.
Quindi prendiamo una delle nostre schede di prototipazione, un grande display a 4 cifre, un altro ATmega328p per controllare quel display e costruiamolo come abbiamo fatto con il rullo dei dadi e il display del giocatore prima. Allegheremo anche intestazioni per l'alimentazione, per la programmazione e per le comunicazioni TWI proprio come le altre.
Passaggio 2: display contanti del rivenditore
Costruiamo il display del mazziere nello stesso modo in cui abbiamo fatto con il display a 4 cifre del giocatore nell'ultimo tutorial. L'unica differenza è che è più grande e ha meno pin, quindi lo organizzeremo e lo collegheremo in modo diverso.
Ho allegato una foto del cablaggio di questo display. Puoi vedere che è più grande e ha meno pin rispetto al nostro display playercash. L'immagine proviene dalla pagina sparkfun in cui ho ottenuto il display e mostra quali pin sono alimentati per ogni cifra e quali pin controllano ciascuno dei segmenti in una cifra.
Come al solito, dovresti iniziare collegando il display alla breadboard di prototipazione e testare ogni segmento per essere sicuro di capire come è cablato. Quindi dovresti collegarlo ai pin di un microcontrollore AVR sulla tua breadboard ed eseguirlo da lì fino a quando tutto il nostro codice funziona in questo tutorial. Infine, alla fine, dovresti costruire la scheda esterna e saldarla. Quindi, quando proverai il prodotto finale, saprai che eventuali problemi derivano dal tuo lavoro di saldatura e taglio e non dal codice. Inoltre, non dimenticare il noto assioma della falegnameria "misura due volte e taglia una volta", o nel caso della realizzazione di circuiti stampati: "taglia due volte, salda una volta". Come puoi vedere dall'immagine, alla fine mi sono rotto e ho comprato l'accessorio Dremel perfetto per questo tipo di lavoro. Una "punta di diamante". È costato 5 dollari, ma è molto meno del costo della terapia per la gestione della rabbia che viene fornito con il mio lavoro di taglio troppe volte di seguito.
Sto usando resistori da 330 ohm per questo display. I pin COM passano attraverso il resistore a GND e l'alimentazione va a qualsiasi segmento che si desidera visualizzare. Userò da PC0 a PC3 per i pin COM e PB0, PB1, PB2, PB3, PB4, PD5, PD6 e PD7 per i segmenti.
Ecco la chiave per massimizzare le tue possibilità di farlo bene:
- tracciare il circuito
- taglia il circuito
- controlla il cablaggio
- collegare i resistori, i cappucci e l'oscillatore a cristallo
- ricontrollare i collegamenti e il cablaggio
- collegare i fili esterni
- collegare il microcontrollore
- ricontrolla il cablaggio
- collegare il display a 4 cifre
- controlla ogni cifra con un paio di fili dalla breadboard
- mettilo da parte e scrivi il codice, sapendo che probabilmente dovrai modificare le cose in seguito e sperando di non aver coperto una connessione che deve essere interrotta.
Ho mostrato una serie di immagini del mio lavoro di cablaggio. Per favore, renditi conto che sei libero di cablare il tuo come preferisci. È molto probabile che tu possa trovare una mappa migliore della mia e dovresti usarla. Niente in questi tutorial dipende da come sono cablati i tuoi componenti, purché abbiano le porte di uscita corrette. Che mi ricorda. Notare che ora ci sono due intestazioni che vanno a SDA e due che vanno a SCL? Perché pensi che l'abbiamo fatto?
Ora, come puoi vedere dal codice allegato alla fine del tutorial, ho semplicemente tagliato e incollato il codice dal display del giocatore dell'ultimo tutorial in un nuovo file per il display del mazziere. Quindi ho esaminato e modificato la tabella di ricerca "segmenti" in modo che corrisponda alla nuova mappa dei pin notando che per questo display i pin "com" sono macinati e i pin dei segmenti sono 5V anziché il contrario come era per l'altro display. Ho anche cambiato l'inizializzazione delle porte per riflettere il nuovo cablaggio, ho cambiato l'indirizzo del display dealercash in 0b1000000 in modo che il rullo dei dadi possa parlare con lui, ho cambiato la subroutine "ciclo" in modo che spenga il pin "com" da PC0 a PC3 quando vuole alimentare un particolare segmento e ho cambiato la "cifra" che viene visualizzata poiché il nuovo cablaggio ha le cifre nell'ordine opposto (se l'hai lasciato com'era e hai provato a visualizzarlo 1234 sarebbe invece apparso come 4321).
Ecco la nuova mappa del registro:
(PD7, PD6, PD5, PB4, PB3, PB2, PB1, PB0) = (punto decimale, c, g, b, f, a, e, d)
dove 1 è ON e 0 è OFF.
Ora prova il display impostando prima il valore inizializzato del display su vari numeri in modo che quando si accende li mostri. Questo ti dirà se tutto funziona correttamente.
Quindi modificare il codice diceroller in modo che utilizzi il nuovo indirizzo per lo slave, collegarli insieme ed eseguirlo. Dovrebbe funzionare esattamente come abbiamo fatto nell'ultimo tutorial, tranne per il fatto che i lanci di dadi ora vengono visualizzati sul nuovo display.
Grande! Ora siamo pronti per scrivere il nuovo codice del rullo di dadi in modo che comunichi sia con il display del giocatore che con il display del banco.
Passaggio 3: struttura del programma
Il modo in cui il codice funzionerà per il nostro gioco è che manterremo il lanciatore di dadi come master e aggiungeremo il display del mazziere come slave aggiuntivo. Il lanciatore di dadi controllerà il gioco e invierà le modifiche risultanti in contanti al banco e il giocatore visualizzerà dopo ogni lancio. Per ora faremo in modo che la scommessa sulla linea di passaggio sia di $ 10 ogni volta, quindi non dobbiamo ancora complicarci troppo con il giocatore che cambia la sua scommessa. Successivamente, una volta che la meccanica funziona, aggiungeremo un altro controller che sarà un master aggiuntivo che controllerà le scommesse e le vincite e il nostro rullo di dadi rimarrà un maestro ma utilizzato solo per tirare i dadi. Questo ci consentirà di entrare nell'arbitrato TWI, nelle collisioni e in altri aspetti importanti della comunicazione seriale quando si dispone di più master e slave. Aggiungeremo anche una serie di display a 7 cifre con pulsanti sotto di loro che ci permetteranno di scommettere su altri tipi di lanci, ma tutto ciò arriverà nei tutorial futuri. Per ora, vogliamo solo il rullo di dadi come master e i due display come slave. Quando premiamo il pulsante, il codice deciderà se pagare un naturale, prelevare denaro da un craps o ramificarsi in una serie di lanci "punti" fino a una vincita oa un sette-out.
Scriviamo prima le routine slave. Questi sono semplici in quanto tutto ciò che faranno è guardare la linea SDA per il loro indirizzo, se vengono chiamati leggeranno il nuovo numero per visualizzarlo e visualizzarlo. Questo è tutto! Non devono nemmeno rispondere al master poiché il master terrà traccia dei loro totali e farà tutti i calcoli dei pagamenti prima di aggiornarli. In futuri tutorial avremo slave che scriveranno di nuovo al master (ad esempio quando abbiamo display a 7 cifre con pulsanti per l'importo della puntata, dovranno dire al master quanto viene scommesso su ciascun display e quindi indirizzarli con un indirizzo + chiamata di lettura con il master in "modalità ricevitore master") ma ci arriveremo a tempo debito.
Per ora tutto è attivato dalla pressione del pulsante del lancio dei dadi seguito da un calcolo o da ulteriori pressioni del pulsante e infine un messaggio a ciascuno dei display con i loro nuovi totali. Ci sarà un test dopo ogni pagamento per determinare se il giocatore ha vinto o ha perso, in altre parole, se il denaro del banco diventa zero dopo un lancio, o se il denaro del giocatore diventa zero dopo un tiro (né il banco né il giocatore può diventare negativo poiché potranno scommettere solo $ 10 o qualsiasi altra cosa rimasta se è inferiore a $ 10).
Quindi è così che funzionerà. Passiamo alla codifica.
Passaggio 4: codice di comunicazione principale
Ora possiamo scrivere la routine di comunicazione del rullo di dadi. È anche quasi identico a quello che abbiamo scritto l'ultima volta, tranne per il fatto che comunicheremo con due diversi slave anziché con uno solo. Si noti che per ciascuno degli slave utilizziamo un indirizzo diverso. Dovresti modificare tu stesso il codice e poi semplicemente testarlo con ogni indirizzo e assicurarti che funzioni proprio come l'ultimo tutorial tranne che con ogni display separato.
Allegherò il codice per ogni componente che visualizza semplicemente il risultato del rotolo in modo che possa essere utilizzato per far funzionare correttamente i display e controllare il cablaggio.
La codifica del gioco non introduce nulla di nuovo per quanto riguarda i comandi in linguaggio assembly o i componenti del microcontrollore AVR e quindi non sento di doverlo esaminare riga per riga. Avrai probabilmente notato che quando introduciamo qualcosa di nuovo esamino ogni riga nei minimi dettagli fino al punto di esasperarti se non di addormentarti. D'altra parte non lo farò se non viene introdotto nulla di nuovo. Questo è il caso di oggi. Quindi penso che ormai tu sia pronto a giocare con il codice, leggere il codice, analizzare il codice, capire il codice, criticare il codice, deridere il codice e ridere del ragazzo che ha scritto il codice. Quindi ti lascio andare avanti e farlo. È quasi certo che troverai molti posti in cui puoi migliorare o almeno semplificare ciò che ho scritto.
Ho allegato, come al solito, la versione finale del codice per i due display e il diceroller nel passaggio successivo insieme a un video di me che provo la cosa.
Passaggio 5: codice finale e video
Ho allegato il video e i 3 programmi. Noterai che puoi fissare la puntata e il banco iniziale e il denaro del giocatore nella parte superiore del programma con dichiarazioni.equ.
Nel prossimo tutorial aggiungeremo la possibilità di scommettere su cose diverse che renderanno il gioco più emozionante. La cosa interessante del Craps moderno è che hai una moltitudine di modi diversi per scommettere e cercare di massimizzare le tue probabilità. In effetti, Craps è il gioco con le quote più alte del Casinò! … SE sai come suonarlo. D'altra parte, se non sai come giocare, allora diventa uno dei giochi con le quote più basse.
Una volta che avremo più cose su cui scommettere, aumenterò l'importo totale del gioco.
dovrei essere divertente!
Arrivederci alla prossima!
Consigliato:
Tutorial Assembler AVR 2: 4 passaggi
AVR Assembler Tutorial 2: questo tutorial è una continuazione del "AVR Assembler Tutorial 1" Se non hai seguito il Tutorial 1, dovresti fermarti ora e farlo prima. In questo tutorial continueremo il nostro studio sulla programmazione in linguaggio assembly di atmega328p u
Tutorial Assembler AVR 1: 5 passaggi
AVR Assembler Tutorial 1: Ho deciso di scrivere una serie di tutorial su come scrivere programmi in linguaggio assembly per l'Atmega328p che è il microcontrollore utilizzato nell'Arduino. Se le persone rimangono interessate, continuerò a pubblicarne una a settimana o giù di lì fino a quando non finirò
Tutorial Assembler AVR 6: 3 passaggi
AVR Assembler Tutorial 6: Benvenuto nel Tutorial 6! Il tutorial di oggi sarà breve in cui svilupperemo un metodo semplice per comunicare dati tra un atmega328p e un altro utilizzando due porte che li collegano. Prenderemo quindi il rullo di dadi dal Tutorial 4 e dal Registro
Tutorial Assembler AVR 8: 4 passaggi
Tutorial AVR Assembler 8: Benvenuto nel Tutorial 8! In questo breve tutorial faremo una piccola deviazione dall'introduzione di nuovi aspetti della programmazione in linguaggio assembly per mostrare come spostare i nostri componenti di prototipazione in un separato "stampato" scheda di circuito. Il
Tutorial Assembler AVR 7: 12 passaggi
Tutorial AVR Assembler 7: Benvenuto nel Tutorial 7! Oggi mostreremo prima come eseguire lo scavenging di una tastiera, quindi mostreremo come utilizzare le porte di ingresso analogiche per comunicare con la tastiera. Lo faremo utilizzando interruzioni e un singolo filo come ingresso. Collegheremo la tastiera in modo che