Taula de continguts:

Tutorial AVR Assembler 11: 5 passos
Tutorial AVR Assembler 11: 5 passos

Vídeo: Tutorial AVR Assembler 11: 5 passos

Vídeo: Tutorial AVR Assembler 11: 5 passos
Vídeo: AVR Ассемблер. Урок 1. Вводный. AVR Assembler. Lesson 1. Promo. 2024, Desembre
Anonim
Tutorial AVR Assembler 11
Tutorial AVR Assembler 11
Tutorial AVR Assembler 11
Tutorial AVR Assembler 11
Tutorial AVR Assembler 11
Tutorial AVR Assembler 11

Benvingut al tutorial 11!

En aquest breu tutorial, finalment construirem la primera part del nostre projecte final.

El primer que heu de fer és anar al darrer pas d’aquest tutorial i veure el vídeo. Després torna aquí. [fent una pausa mentre ho fas …] D'acord. Ara procediu.

Si encara no ho heu endevinat, estem construint un joc de Craps. Per descomptat, només perquè estigui construint un joc de craps, sens dubte no vol dir que ho hagueu de fer. Espero que no cal dir-ho. En qualsevol cas, és útil utilitzar microcontroladors per controlar pantalles segmentades, etc., i comunicar-nos entre ells, això és principalment el que estem fent aquí. Podeu escriure codi per utilitzar-los com vulgueu. Ara per ara, els codificaré per reproduir-los, tot i que després podré decidir reutilitzar les pantalles segmentades per fer una altra cosa.

La raó per la qual estic construint això és perquè estic pensant que, finalment, podria voler una taula de creps Vegas de mida completa a la meva "cova d'home" al soterrani de casa meva. Tanmateix, cap dels meus amics no té la més mínima idea de com afrontar, puntuar o pagar les apostes i els rolls. Així que vaig pensar que seria genial que la taula fes tota la feina del distribuïdor per nosaltres. Quan fem una aposta sobre la taula, també podem prémer un petit polsador al costat de la casella on es mostren les nostres fitxes quant es col·loca allà, el microcontrolador pot calcular el pagament d’aquesta casella després del llançament de daus i mostrar-la. Encara no estic del tot segur de com organitzaré aquest aspecte. Un dels pensaments que tenia era que es demanaria a cada persona que fes totes les seves apostes al seu torn, de manera que el controlador anotés els diners de cada persona abans de gravar el següent jugador, etc. Després, després de la tirada, l'ordinador pot mostrar els pagaments de cada casella i també pot mantenir un "efectiu total" corrent per a cada jugador.

Per a una de les imatges de portada d’aquest tutorial, només vaig haver d’utilitzar una foto meva tirant 5 ases a la taula de pòquer de Las Vegas aquest estiu. Heheh. Concediu-me.

Aquí hi ha un enllaç a la col·lecció completa dels meus tutorials del muntador AVR:

Pas 1: Craps

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

En aquest tutorial només construirem la part més senzilla del joc final de Craps. Això s’anomena “The Pass Line” i podeu apostar-hi. Podeu aprendre tot el que necessiteu saber sobre la part "línia de passada" del joc veient el breu vídeo instructiu de dos minuts que he adjuntat a aquest pas.

Construirem una altra pantalla de 4 dígits que farà un seguiment de l’efectiu del concessionari de la mateixa manera que la nostra pantalla de 4 dígits actual fa un seguiment de l’efectiu del jugador. El distribuïdor començarà amb 20 dòlars i el jugador començarà amb 20 dòlars (el total de diners possibles al joc és de 9999 dòlars, el màxim de les nostres pantalles de 4 dígits, però només necessitarem 20 dòlars per a aquesta primera peça del joc o, en cas contrari, seria tediós en extrem i difícil de guanyar o perdre en un temps decent). Si el jugador s’emporta tots els diners del distribuïdor, el jugador guanya. Si el jugador perd tots els seus diners, guanyarà el repartidor.

Com es guanya o es perd diners? Doncs bé, els que heu jugat a Craps, que heu vist gent tirant daus al carrer o que heu vist jugar al casino de Las Vegas, ja ho sabreu. Per a la resta, deixeu-me fer-vos una breu descripció de la part "línia de passada" del joc que codificarem avui.

Es juga a Craps des de fa centenars d’anys, que es remunta a l’època de les croades. Va ser jugat per tropes a les trinxeres de la Segona Guerra Mundial, es va jugar als carrers, es va jugar en casinos i sales de jocs. Va començar només amb la línia de pas i s’hi van afegir totes les altres coses més tard. Seguirem aquesta mateixa progressió.

La manera com funciona la línia de pas és aquesta. Feu una aposta i llanceu els daus. El primer tiratge s’anomena “rotllo de sortida”. Si obteniu un 2 (ulls de serp), un 3 (as deuce) o un 12 (box cars) al llançament de sortida, perdeu l'aposta i s'anomena "craps". Si tira un 7 (un natural) o un 11 (un jo, o jo-leven) guanyaràs. Si feu un altre número, aquest número es convertirà en el vostre "punt". Un cop establert un "punt", continueu llançant els daus amb l'objectiu de tornar a colpejar el punt abans de llançar un 7. Si obteniu el vostre punt abans de llançar un 7, guanyareu fins i tot diners. Per tant, una aposta en dòlars us guanya un dòlar del concessionari. Si obtingueu un 7 abans que el vostre punt es llanci, es diu "set out" i perdeu l'aposta al concessionari.

Després, torneu a començar. Feu una aposta a la línia de passada i llenceu els daus, 7 o 11 victòries, 2, 3 o 12 perdudes.

Hi ha molts més tipus d'apostes, "no aprovis", "aprovis les probabilitats", "no aprovis les probabilitats", "vingui apostes", "no vinguis a apostar", "camp", "trompa", " formes difícils ", etc etc etc. Podeu trobar detalls aquí:

ca.wikipedia.org/wiki/Craps

Com he dit més amunt, ara per ara, només codificarem la part de la línia de passada del joc, que és tot el que tenien en el dia en què els nens llançaven daus contra la paret pels diners dels altres per dinar i per això és aquí on començarem.

Tanmateix, abans de començar a codificar coses, permetem crear la visualització d'efectiu del distribuïdor. Per a això, vull utilitzar una de les pantalles més grans de 4 dígits que podeu obtenir des de Sparkfun o en qualsevol altre lloc. A partir d’ara no llistaré materials sobre aquests tutorials. Si realment heu estat construint tot amb mi, ja sabeu on obtenir els materials i quins són. Per a mi és inútil enumerar-los o quant costen.

Així que agafem una de les nostres taules de prototipatge, una pantalla gran de 4 dígits, una altra ATmega328p per controlar aquesta pantalla i la construïm com ho fèiem amb el rodet de daus i la pantalla del reproductor abans. També adjuntarem capçaleres d’alimentació, de programació i de comunicacions TWI igual que les altres.

Pas 2: visualització d'efectiu del concessionari

Visualització d’efectiu del concessionari
Visualització d’efectiu del concessionari
Visualització d’efectiu del concessionari
Visualització d’efectiu del concessionari
Visualització d’efectiu del concessionari
Visualització d’efectiu del concessionari

Construïm la pantalla del distribuïdor de la mateixa manera que ho vam fer amb la pantalla de 4 dígits del reproductor a l'últim tutorial. Les úniques diferències són que és més gran i té menys pins, de manera que l’organitzarem i el cablejarem de manera diferent.

He adjuntat una imatge del cablejat d'aquesta pantalla. Podeu veure que és més gran i té menys pins que la nostra pantalla de reproductor de bitllets. La imatge és de la pàgina sparkfun, on vaig obtenir la pantalla, i mostra quins pins tenen potència per a cada dígit i quins pins controlen cadascun dels segments d’un dígit.

Com és habitual, hauríeu de començar connectant la pantalla a la vostra taula de prototipatge i provar cada segment per assegurar-vos que enteneu com està connectat. A continuació, hauríeu de connectar-lo als pins d’un microcontrolador AVR de la vostra taula de treball i executar-lo des d’allà fins que tinguem tot el nostre codi en aquest tutorial. Finalment, al final, heu de construir el tauler extern i soldar-lo. Després, quan proveu el producte final, sabreu que els problemes provenen del vostre treball de soldadura i tall i no del codi. Tampoc no oblideu el conegut axioma de la fusteria "mesureu dues vegades i talleu una vegada", o en el cas de fer plaques de circuits: "talleu dues vegades, soldeu una vegada". Com podeu veure a la imatge, finalment em vaig trencar i vaig comprar l’adjunt Dremel perfecte per a aquest tipus de treballs. Un "conjunt de punts de diamant". Va costar 5 dòlars, però això és molt inferior al cost de la teràpia de gestió de la ràbia que suposa fer el treball de tall massa vegades seguides.

Estic fent servir resistències de 330 ohms per a aquesta pantalla. Els pins COM passen per la resistència fins a GND i la potència passa al segment que vulgueu mostrar. Vaig a utilitzar PC0 a PC3 per als pins COM i PB0, PB1, PB2, PB3, PB4, PD5, PD6 i PD7 per als segments.

Aquí teniu la clau per maximitzar les vostres possibilitats de fer-ho bé:

  1. traça el circuit
  2. tallar el circuit
  3. comproveu el cablejat
  4. connecteu les resistències, les tapes i l'oscil·lador de cristall
  5. comproveu de nou les connexions i el cablejat
  6. connecteu els cables externs
  7. connecteu el microcontrolador
  8. torneu a comprovar el cablejat
  9. connecteu la pantalla de 4 dígits
  10. comproveu cada dígit amb un parell de cables de la taula
  11. reserveu-lo i escriviu el codi, sabent que probablement haureu de modificar les coses més endavant i esperant que no hagueu tapat cap connexió que cal tallar.

He mostrat una sèrie d'imatges del meu treball de cablejat. Tingueu en compte que és lliure de connectar el vostre de la manera que vulgueu. És molt probable que pugueu trobar un mapa millor que jo i que l’heu d’utilitzar. Res d’aquests tutorials no depèn de com es connectin els components, sempre que tinguin els ports de sortida correctes. La qual cosa em recorda. Noteu que ara hi ha dues capçaleres que van a SDA i dues que van a SCL? Per què creus que ho vam fer?

Ara, com podeu veure al codi adjunt al final del tutorial, simplement he tallat i enganxat el codi de la pantalla del reproductor de l'últim tutorial a un fitxer nou per a la visualització del distribuïdor. Després he anat a través i he canviat la taula de cerca de "segments" perquè es correspongui amb el nou mapa de pins indicant que per a aquesta pantalla els pins "com" estan triturats i els pins de segment són de 5 V en lloc de fer-ho al revés com ho era per a l'altra pantalla. També he canviat la inicialització dels ports per reflectir el nou cablejat, he canviat l'adreça de la pantalla del dealercash a 0b1000000 perquè el rodet de daus pugui parlar amb ell, he canviat la subrutina de "cicle" perquè s'apagui la Els pins "com" de PC0 a PC3 quan volen alimentar un segment en concret i he canviat el "dígit" que es mostra ja que el nou cablejat té els dígits en l'ordre oposat (si ho heu deixat tal com estava i heu intentat mostrar-lo 1234) hauria aparegut com a 4321).

Aquí teniu el nou mapa de registre:

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

on 1 és ON i 0 està OFF.

Ara proveu la pantalla configurant primer el valor inicialitzat de la pantalla a diversos números perquè, quan s’encengui, els mostri. Això us indicarà si tot funciona correctament.

A continuació, modifiqueu el codi del diceroller de manera que utilitzi la nova adreça de l'esclau, enganxeu-los i executeu-lo. Hauria d’actuar exactament com el que vam fer a l’últim tutorial, tret que ara els llançaments de daus apareguin a la nova pantalla.

Genial! Ara estem preparats per escriure el nou codi del rodet de daus perquè es comuniqui tant amb la pantalla del jugador com amb la del distribuïdor.

Pas 3: Esquema del programa

Esquema del programa
Esquema del programa
Esquema del programa
Esquema del programa
Esquema del programa
Esquema del programa

La manera com el codi funcionarà per al nostre joc és que mantindrem el rodet de daus com a mestre i afegirem la pantalla del distribuïdor com a esclau addicional. El rodet de daus controlarà el joc i enviarà els canvis resultants en efectiu al repartidor i el jugador apareixerà després de cada tir. De moment, només tindrem una aposta per línia de passada de 10 dòlars cada vegada, de manera que no ens haurem de complicar massa encara que el jugador canviï la seva aposta. Més endavant, un cop hàgim treballat la mecànica, afegirem un altre controlador que serà un mestre addicional que controlarà les apostes i els pagaments i el nostre rodet de daus seguirà sent un mestre però només s’utilitzarà per tirar els daus. Això ens permetrà accedir a l'arbitratge TWI, les col·lisions i altres aspectes importants de la comunicació en sèrie quan tingueu diversos amos i esclaus. També afegirem una sèrie de pantalles de 7 dígits amb botons de pressió que ens permetran apostar per altres tipus de rotllos, però tot això vindrà en futurs tutorials. De moment, només volem que el rodet de daus sigui mestre i que les dues pantalles siguin esclaus. Quan premem el botó, el codi decidirà si es paga un producte natural, si es treuen diners d'un craps o es dediquen a una sèrie de tirades "puntuals" fins a obtenir una victòria o un set-out.

Primer escrivim les rutines dels esclaus. Són senzills, ja que tot el que faran és mirar la línia SDA de la seva adreça, si se'ls crida, llegiran el número nou per mostrar-lo i mostrar-lo. Això és tot! Ni tan sols han de tornar a parlar amb el mestre, ja que el mestre farà un seguiment dels seus totals i farà tots els càlculs de pagament abans d’actualitzar-los. En futurs tutorials, tindrem esclaus que tornaran a escriure al mestre (per exemple, quan tinguem pantalles de 7 dígits amb botons polsadors per a la quantitat d’aposta, hauran de dir-li al mestre quant s’està apostant a cada pantalla i així ho farem dirigiu-los amb una adreça + lectura de trucades amb el mestre en "mode receptor mestre"), però hi arribarem a temps.

De moment, tot s'instigua mitjançant el botó de llançament de daus seguit d'un càlcul o altres botons i, finalment, un missatge a cadascuna de les pantalles amb els seus nous totals. Hi haurà una prova després de cada pagament per determinar si el jugador ha guanyat o ha perdut, és a dir, si l’efectiu del repartidor passa a ser zero després d’una tirada o si l’efectiu del jugador esdevé zero després d’una tirada (ni el repartidor ni el jugador poden arribar a ser negatius, ja que només se’ls permetrà apostar 10 dòlars o el que quedi si és inferior a 10 dòlars).

Així és com funcionarà. Anem a codificar.

Pas 4: Codi de comunicacions mestre

Codi de comunicacions mestre
Codi de comunicacions mestre

Ara podem escriure la rutina de comunicacions del rodet de daus. També és gairebé idèntic al que vam escriure l'última vegada, tret que ens comunicarem amb dos esclaus diferents en lloc d'un sol. Tingueu en compte que per a cadascun dels esclaus fem servir una adreça diferent. Heu de modificar el codi vosaltres mateixos i després provar-lo amb cada adreça i assegurar-vos que funcioni igual que el darrer tutorial, excepte amb cada pantalla independent.

Jo adjuntaré el codi per a cada component que simplement mostri el resultat del rotlle perquè es pugui utilitzar per fer funcionar correctament les pantalles i comprovar el cablejat.

La codificació del joc no introdueix res de nou quant a les ordres del llenguatge ensamblador o els components del microcontrolador AVR i, per tant, no crec que hagi de passar-ho línia per línia. Probablement haureu notat que quan introduïm alguna cosa nova, passo a través de cada línia amb minuciosos detalls fins al punt d’exasperar-vos, si no de dormir-vos. D'altra banda, no ho faré si no hi ha res de nou introduït. Aquest és el cas actual. Per tant, crec que ja esteu preparat per jugar amb el codi, llegir-lo, analitzar-lo, entendre’l, criticar-lo, escarnir-vos i riure-vos del tipus que l’ha escrit. Així que us deixaré seguir endavant i fer-ho. És gairebé segur que trobareu molts llocs on podeu millorar o, si més no, simplificar el que he escrit.

He adjuntat, com de costum, la versió final del codi per a les dues pantalles i el diceroller al següent pas, juntament amb un vídeo de la meva prova.

Pas 5: codi final i vídeo

He adjuntat el vídeo i els 3 programes. Notareu que podeu arreglar l’aposta i l’efectiu inicial del distribuïdor i del jugador a la part superior del programa amb declaracions.equ.

Al proper tutorial afegirem la possibilitat d'apostar per diferents coses que faran que el joc sigui més emocionant. L’interessant dels Craps moderns és que teniu multitud de maneres diferents d’apostar i intentar maximitzar les vostres probabilitats. De fet, Craps és el joc de probabilitats més alt del Casino. … SI sabeu jugar-lo. En canvi, si no saps jugar, es converteix en un dels jocs de probabilitats més baixos.

Un cop tinguem més coses per apostar, augmentaré la quantitat total de diners del joc.

Hauria de ser divertit!

Ens veiem a la propera!

Recomanat: