Tabla de contenido:
- Paso 1: ¡Craps
- Paso 2: Visualización de efectivo del distribuidor
- Paso 3: esquema del programa
- Paso 4: Código maestro de comunicaciones
- Paso 5: Código final y video
Video: Tutorial de ensamblador AVR 11: 5 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:40
¡Bienvenido al Tutorial 11!
En este breve tutorial, finalmente vamos a construir la primera parte de nuestro proyecto final.
Lo primero que debe hacer es ir al último paso de este tutorial y ver el video. Entonces vuelve aquí. [haciendo una pausa mientras haces eso….] Está bien. Ahora proceda.
Si aún no lo has adivinado, ¡estamos creando un juego de Craps! Por supuesto, el hecho de que esté construyendo un juego de dados no significa que tengas que hacerlo. Espero que sea evidente. En cualquier caso, es útil usar microcontroladores para controlar pantallas segmentadas, etc., y para comunicarse entre sí, eso es principalmente lo que estamos haciendo aquí. Puedes escribir código para usarlos como quieras. Por ahora, los voy a codificar para jugar a los dados, aunque puede que luego decida reutilizar las pantallas segmentadas para hacer otra cosa.
La razón por la que estoy construyendo esto es porque estoy pensando que eventualmente podría querer una mesa de dados Vegas de tamaño completo en mi "cueva de hombres" en el sótano de mi casa. Sin embargo, ninguno de mis amigos tiene la menor idea de cómo repartir, anotar o pagar las apuestas y tiradas de craps. ¡Así que pensé que sería genial que la mesa hiciera todo el trabajo del crupier por nosotros! Cuando colocamos una apuesta en la mesa, también podemos presionar un pequeño botón al lado del cuadrado en el que están nuestras fichas para mostrar cuánto se coloca allí, luego el microcontrolador puede calcular el pago de ese cuadrado después de la tirada de dados y mostrarlo. Sin embargo, todavía no estoy muy seguro de cómo organizaré este aspecto. Un pensamiento que tuve fue que a cada persona se le pedirá que haga todas sus apuestas por turno para que el controlador registre dónde está el dinero de cada persona antes de registrar al siguiente jugador y así sucesivamente. Luego, después de la tirada, la computadora puede mostrar los pagos en cada casilla y también puede mantener un "efectivo total" para cada jugador.
Para una de las imágenes de portada de este tutorial, tuve que usar una imagen mía sacando 5 ases en la mesa de póquer en Las Vegas este verano. Jejeje Complaceme.
Aquí hay un enlace a la colección completa de mis tutoriales de ensamblador AVR:
Paso 1: ¡Craps
En este tutorial solo construiremos la parte más simple del juego de Craps final. Esto se llama "La Línea de Pase" y puede apostar por ella. Puede aprender todo lo que necesita saber sobre la parte de "línea de pase" del juego viendo el breve video instructivo de 2 minutos que adjunto a este paso.
Construiremos otra pantalla de 4 dígitos que realizará un seguimiento del efectivo del distribuidor de la misma manera que nuestra pantalla actual de 4 dígitos realiza un seguimiento del efectivo del jugador. El distribuidor comenzará con $ 20 y el jugador comenzará con $ 20 (el dinero total posible en el juego es $ 9999, el máximo de nuestras pantallas de 4 dígitos, pero solo necesitaremos $ 20 para esta primera pieza del juego o de lo contrario sería tedioso en extremo y difícil de ganar o perder en una cantidad de tiempo decente). Si el jugador toma todo el dinero del crupier, el jugador gana. Si el jugador pierde todo su dinero, el crupier gana.
¿Cómo se gana o se pierde dinero? Bueno, aquellos de ustedes que han jugado Craps, visto gente "tirando dados" en la calle, o visto jugar contra el casino en Las Vegas, ya lo sabrán. Para el resto de ustedes, permítanme darles una breve descripción de la parte de "línea de pase" del juego que estaremos codificando hoy.
Los dados se han jugado durante cientos de años, desde la época de las cruzadas. Fue jugado por tropas en las trincheras de la Segunda Guerra Mundial, se jugó en las calles, se jugó en casinos y salas de juego. Comenzó con solo la línea de pase y todas las otras cosas se agregaron más tarde. Seguiremos esta misma progresión.
La forma en que funciona la línea de paso es la siguiente. Haces una apuesta y luego lanzas los dados. El primer rollo se llama "rollo de salida". Si obtiene un 2 (ojos de serpiente), un 3 (as deuce) o un 12 (box cars) en la tirada de salida, pierde su apuesta y se llama "craps". Si sacas un 7 (un natural) o un 11 (un yo, o un yo-leven), ganas. Si saca cualquier otro número, este número se convierte en su "punto". Una vez que se establece un "punto", continúa tirando los dados con el objetivo de alcanzar el punto nuevamente antes de sacar un 7. Si obtiene su punto antes de que salga un 7, gana el mismo dinero. Entonces, una apuesta de un dólar le gana un dólar del crupier. Si obtiene un 7 antes de que salga su punto, esto se llama "siete fuera" y pierde su apuesta con el crupier.
Después de eso empiezas de nuevo. Haga una apuesta en la línea de pase y tire los dados, 7 u 11 victorias, 2, 3 o 12 pérdidas.
Hay muchos más tipos de apuestas, "no pasar", "pasar las probabilidades", "no pasar las probabilidades", "apostar", "no apostar", "campo", "cuerno", " caminos difíciles ", etc., etc. Puede encontrar detalles aquí:
en.wikipedia.org/wiki/Craps
Como dije anteriormente, por ahora, solo codificaremos la parte de la línea de pase del juego, que es todo lo que tenían en el día en que los niños lanzaban dados contra la pared por el dinero del almuerzo de los demás, así que aquí es donde comenzaremos..
Sin embargo, antes de comenzar a codificar cosas, construyamos la pantalla de efectivo del distribuidor. Para esto, quiero usar una de las pantallas más grandes de 4 dígitos que puede obtener de Sparkfun o de cualquier otro lugar. De ahora en adelante no voy a enumerar los materiales de estos tutoriales. Si realmente ha estado construyendo todo junto conmigo, entonces ya sabe dónde conseguir los materiales y cuáles son. No tiene sentido para mí enumerarlos o cuánto cuestan.
Así que tomemos uno de nuestros tableros de creación de prototipos, una pantalla grande de 4 dígitos, otro ATmega328p para controlar esa pantalla, y construyamos como lo hicimos con el rodillo de dados y la pantalla del jugador antes. También adjuntaremos encabezados para alimentación, programación y comunicaciones TWI como los demás.
Paso 2: Visualización de efectivo del distribuidor
Construimos la pantalla del crupier de la misma manera que lo hicimos con la pantalla de 4 dígitos del jugador en el último tutorial. Las únicas diferencias son que es más grande y tiene menos pines, por lo que lo organizaremos y cablearemos de manera diferente.
Adjunto una imagen del cableado de esta pantalla. Puede ver que es más grande y tiene menos pines que nuestra pantalla playercash. La imagen es de la página Sparkfun donde obtuve la pantalla y muestra qué pines son de alimentación para cada dígito y qué pines controlan cada uno de los segmentos en un dígito.
Como de costumbre, debe comenzar conectando la pantalla a su placa de prototipos y probar cada segmento para asegurarse de que comprende cómo está cableado. Luego, debe conectarlo a los pines de un microcontrolador AVR en su placa de pruebas y ejecutarlo desde allí hasta que tengamos todo nuestro código funcionando en este tutorial. Finalmente, al final, debes construir la placa externa y soldarla. Luego, cuando pruebe el producto final, sabrá que cualquier problema proviene de su trabajo de soldadura y corte y no del código. Además, no olvide el conocido axioma de la carpintería "medir dos veces y cortar una vez", o en el caso de hacer placas de circuito: "cortar dos veces, soldar una vez". Como puede ver en la imagen, finalmente me derrumbé y compré el accesorio Dremel perfecto para este tipo de trabajo. Un "Conjunto de puntos de diamante". Me costó 5 dólares, pero eso es mucho menos que el costo de la Terapia de Manejo de la Ira que viene con arruinar mi trabajo de corte demasiadas veces seguidas.
Estoy usando resistencias de 330 ohmios para esta pantalla. Los pines COM pasan a través de la resistencia a GND y la energía va a cualquier segmento que desee mostrar. Voy a usar PC0 a PC3 para los pines COM y PB0, PB1, PB2, PB3, PB4, PD5, PD6 y PD7 para los segmentos.
Aquí está la clave para maximizar sus posibilidades de hacerlo bien:
- trazar el circuito
- cortar el circuito
- revisa tu cableado
- coloque las resistencias, las tapas y el oscilador de cristal
- comprobar las conexiones y el cableado de nuevo
- conecte los cables externos
- adjuntar el microcontrolador
- revisa el cableado de nuevo
- adjuntar la pantalla de 4 dígitos
- verifique cada dígito con un par de cables de la placa de pruebas
- déjelo a un lado y escriba el código, sabiendo que probablemente tendrá que modificar las cosas más adelante y esperando no haber cubierto una conexión que necesita ser cortada.
He mostrado una serie de fotografías de mi trabajo de cableado. Por favor, tenga en cuenta que puede transferir el suyo de la forma que desee. Es muy probable que puedas encontrar un mapa mejor que el mío y deberías usarlo. Nada en estos tutoriales depende de cómo estén conectados sus componentes, siempre que tengan los puertos de salida correctos. Lo cual me recuerda. ¿Observa que ahora hay dos encabezados que van a SDA y dos a SCL? ¿Por qué crees que hicimos eso?
Ahora, como puede ver en el código adjunto al final del tutorial, simplemente corté y pegué el código de la pantalla del reproductor del último tutorial en un nuevo archivo para la pantalla del distribuidor. Luego revisé y cambié la tabla de búsqueda de "segmentos" para que se corresponda con el nuevo mapa de pines y noté que para esta pantalla los pines "com" están conectados a tierra y los pines de los segmentos son de 5V en lugar de al revés como en la otra pantalla. También cambié la inicialización de los puertos para reflejar el nuevo cableado, cambié la dirección de la pantalla del dealercash a 0b1000000 para que el rodillo de dados pueda hablar con él, cambié la subrutina de "ciclo" para que apague el PC0 a los pines "com" de PC3 cuando quiere alimentar un segmento en particular y cambié el "dígito" que se muestra ya que el nuevo cableado tiene los dígitos en el orden opuesto (si lo dejó como estaba e intentó mostrar 1234 habría aparecido como 4321 en su lugar).
Aquí está el nuevo mapa de registro:
(PD7, PD6, PD5, PB4, PB3, PB2, PB1, PB0) = (punto decimal, c, g, b, f, a, e, d)
donde 1 es ON y 0 es OFF.
Ahora pruebe la pantalla configurando primero el valor inicializado de la pantalla en varios números para que cuando se encienda los muestre. Esto le dirá si todo está funcionando correctamente.
Luego modifique el código de diceroller para que use la nueva dirección para el esclavo, conéctelos y ejecútelo. Debería actuar exactamente como lo hicimos en el último tutorial, excepto que las tiradas de dados ahora aparecen en la nueva pantalla.
¡Excelente! Ahora estamos listos para escribir el nuevo código del rodillo de dados para que se comunique tanto con la pantalla del jugador como con la del crupier.
Paso 3: esquema del programa
La forma en que el código funcionará para nuestro juego es que mantendremos el rodillo de dados como maestro y agregaremos la pantalla del crupier como esclavo adicional. El rodillo de dados controlará el juego y enviará los cambios resultantes en efectivo al crupier y el jugador los mostrará después de cada tirada. Por ahora, la apuesta de la línea de pase será de $ 10 cada vez, por lo que no tendremos que complicarnos demasiado todavía con el jugador cambiando su apuesta. Más adelante, una vez que tengamos la mecánica funcionando, agregaremos otro controlador que será un maestro adicional que controlará las apuestas y los pagos y nuestro rodillo de dados seguirá siendo un maestro pero solo se usará para tirar los dados. Esto nos permitirá entrar en arbitrajes TWI, colisiones y otros aspectos importantes de la comunicación en serie cuando tenga múltiples maestros y esclavos. También agregaremos una serie de pantallas individuales de 7 dígitos con botones debajo de ellas que nos permitirán apostar en otros tipos de rollos, pero todo eso vendrá en futuros tutoriales. Por ahora, solo queremos el rodillo de dados como maestro y las dos pantallas como esclavas. Cuando presionamos el botón, el código decidirá si pagar un natural, sacar dinero de un craps o pasar a una serie de tiradas de "puntos" hasta obtener una victoria o un siete.
Primero escribamos las rutinas de los esclavos. Estos son simples en el sentido de que todo lo que harán es mirar la línea SDA para su dirección, si son llamados, leerán el nuevo número para mostrarlo y mostrarlo. ¡Eso es todo! Ni siquiera tienen que responderle al maestro, ya que el maestro hará un seguimiento de sus totales y hará todos los cálculos de pago antes de actualizarlos. En futuros tutoriales tendremos esclavos que le escriban al maestro (por ejemplo, cuando tengamos pantallas de 7 dígitos con botones para presionar el monto de la apuesta, tendrán que decirle al maestro cuánto se está apostando en cada pantalla y así lo haremos direccionarlos con una dirección + llamada de lectura con el maestro en "modo receptor maestro") pero llegaremos a eso a su debido tiempo.
Por ahora, todo es instigado por la pulsación del botón de lanzamiento de dados seguido de un cálculo o pulsaciones adicionales de botones y, finalmente, un mensaje a cada una de las pantallas con sus nuevos totales. Habrá una prueba después de cada pago para determinar si el jugador ha ganado o perdido, en otras palabras, si el efectivo del crupier se vuelve cero después de una tirada, o si el dinero del jugador se vuelve cero después de una tirada (ni el crupier ni el jugador puede volverse negativo ya que solo se les permitirá apostar $ 10 o lo que quede si es menos de $ 10).
Así es como va a funcionar. Empecemos a codificar.
Paso 4: Código maestro de comunicaciones
Ahora podemos escribir la rutina de comunicación del rodillo de dados. También es casi idéntico al que escribimos la última vez, excepto que nos comunicaremos con dos esclavos diferentes en lugar de uno solo. Tenga en cuenta que para cada uno de los esclavos usamos una dirección diferente. Debe modificar el código usted mismo y luego simplemente probarlo con cada dirección y asegurarse de que funcione como el último tutorial, excepto con cada pantalla por separado.
Adjuntaré el código para cada componente que simplemente muestra el resultado del rollo para que pueda usarse para que las pantallas funcionen correctamente y verifique el cableado.
La codificación del juego no presenta nada nuevo en lo que respecta a los comandos en lenguaje ensamblador o los componentes del microcontrolador AVR, por lo que no siento que tenga que revisarlo línea por línea. Probablemente hayas notado que cuando presentamos algo nuevo, repaso cada línea con minuciosos detalles hasta el punto de exasperarte si no te pongo a dormir. Por otro lado, no haré eso si no se introduce nada nuevo. Ese es el caso hoy. Así que creo que ya estás preparado para jugar con el código, leer el código, analizar el código, entender el código, criticar el código, burlarte del código y reírte del tipo que escribió el código. Así que te dejaré seguir adelante y hacer eso. Es casi seguro que encontrarás muchos lugares en los que puedes mejorar o al menos simplificar lo que he escrito.
Como de costumbre, adjunté la versión final del código para las dos pantallas y el diceroller en el siguiente paso junto con un video de mí probando la cosa.
Paso 5: Código final y video
Adjunto el video y los 3 programas. Notará que puede fijar la apuesta y el efectivo inicial del crupier y del jugador en la parte superior del programa con declaraciones.equ.
En el siguiente tutorial agregaremos la posibilidad de apostar en diferentes cosas que harán que el juego sea más emocionante. Lo interesante de los Craps modernos es que tiene una multitud de formas diferentes de apostar y tratar de maximizar sus probabilidades. De hecho, ¡Craps es el juego de probabilidades más alto del Casino! … SI sabes cómo jugarlo. Por otro lado, si no sabes cómo jugar, se convierte en uno de los juegos de probabilidades más bajas.
Una vez que tengamos más cosas en las que apostar nuestro dinero, aumentaré la cantidad total de dinero en el juego.
¡Debería ser divertido!
¡Hasta la próxima!
Recomendado:
Tutorial 1 del ensamblador AVR: 5 pasos
Tutorial 1 de AVR Assembler: He decidido escribir una serie de tutoriales sobre cómo escribir programas en lenguaje ensamblador para el Atmega328p, que es el microcontrolador utilizado en Arduino. Si la gente sigue interesada, seguiré publicando una por semana más o menos hasta que me quede sin
Tutorial de ensamblador AVR 6: 3 pasos
Tutorial 6 de AVR Assembler: ¡Bienvenido al Tutorial 6! El tutorial de hoy será breve en el que desarrollaremos un método simple para comunicar datos entre un atmega328p y otro utilizando dos puertos que los conectan. Luego tomaremos el rodillo de dados del Tutorial 4 y el Registro
Tutorial 8 del ensamblador AVR: 4 pasos
Tutorial 8 de AVR Assembler: ¡Bienvenido al Tutorial 8! En este breve tutorial vamos a desviarnos un poco de la introducción de nuevos aspectos de la programación en lenguaje ensamblador para mostrar cómo mover nuestros componentes de creación de prototipos a otro " impreso " placa de circuito. Los
Tutorial de ensamblador AVR 7:12 pasos
Tutorial 7 de AVR Assembler: ¡Bienvenido al Tutorial 7! Hoy vamos a mostrar primero cómo buscar un teclado y luego mostrar cómo usar los puertos de entrada analógica para comunicarse con el teclado.Haremos esto usando interrupciones y un solo cable como aporte. Conectaremos el teclado para que
Tutorial de ensamblador AVR 9: 7 pasos
Tutorial 9 de AVR Assembler: Bienvenido al Tutorial 9. Hoy mostraremos cómo controlar una pantalla de 7 segmentos y una pantalla de 4 dígitos utilizando nuestro código de lenguaje ensamblador ATmega328P y AVR. En el transcurso de hacer esto, tendremos que desviarnos sobre cómo usar la pila