Informe 3 en Raya

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 22

ESCUELA MILITAR DE INGENIERÍA

“MCAL. ANTONIO JOSE DE SUCRE”


BOLIVIA

MICROPROCESADORES II
Tres en raya

INTEGRANTES : Est. Hugo Andrés Peralta Padilla C9794-2

Tte. Cab. Carlos Antonio Torrico Cuellar A12739-6

SEMESTRE : Séptimo Semestre

CARRERA : Ing. en Sistemas Electrónicos

DOCENTE : Ing. Rolando Andrés Lira Araoz

FECHA : 03 de Abril del 2024

Cochabamba – Bolivia
I. INTRODUCCIÓN.
En el ámbito de la electrónica y la programación de microcontroladores, el diseño y
desarrollo de proyectos prácticos representan una invaluable oportunidad para
aplicar conocimientos teóricos en un contexto real. En este informe, se documenta
el proceso de creación de un juego de tres en raya, también conocido como "Tic
Tac Toe", utilizando el microcontrolador ATmega16. Este proyecto, además de
ejemplificar el funcionamiento de este microcontrolador, integra componentes
electrónicos como leds y pulsadores, ofreciendo una experiencia interactiva y
educativa.

El juego de tres en raya es un clásico pasatiempo que, aunque simple en su


concepto, involucra una serie de estrategias y lógica que lo hacen atractivo tanto
para niños como para adultos. En esta versión del juego, se ha decidido emplear
leds para representar los marcadores del tablero, con 9 leds rojos y 9 leds verdes
que actúan como fichas para cada jugador. Esta elección no solo añade una
dimensión visual al juego, sino que también permite una comprensión más clara de
su estado actual.

La elección del microcontrolador ATmega16 se fundamenta en su versatilidad y


amplia disponibilidad en el mercado. Este microcontrolador, parte de la familia AVR
de Atmel, ofrece un conjunto de características que lo hacen idóneo para proyectos
de este tipo. Su arquitectura de 8 bits, su capacidad de manejar múltiples entradas
y salidas, así como su capacidad de ejecutar instrucciones de manera eficiente, lo
convierten en una opción ideal para implementar un juego interactivo como el tres
en raya.

Por otro lado, los pulsadores se utilizan para permitir que los jugadores seleccionen
las casillas en las que desean colocar sus fichas. Esta interacción física agrega una
dimensión táctil al juego, lo que lo hace más inmersivo y divertido.

A lo largo de este informe, se detallará el proceso de diseño, implementación y


pruebas del proyecto. Se abordarán aspectos como la elección de componentes, el

1 – 21
diseño del circuito, la programación del microcontrolador, así como las dificultades
encontradas y las soluciones propuestas. Además, se presentarán los resultados
obtenidos, incluyendo el funcionamiento del juego, posibles mejoras y aplicaciones
futuras de este proyecto.

II. OBJETIVO.
1. Objetivo general.
Diseñar e implementar un sistema de juego de tres en raya utilizando el
microcontrolador ATmega16, 9 leds rojos, 9 leds verdes y 4 pulsadores, para
que con estos últimos se pueda seleccionar el lugar donde cada jugador
quiere marcar y así interactuar en el ámbito de la electrónica y la
programación de microcontroladores.
2. Objetivo específico.
Investigar y seleccionar los componentes electrónicos adecuados para la
implementación del juego de tres en raya, considerando aspectos como la
disponibilidad, el costo y la compatibilidad con el microcontrolador
ATmega16.
Diseñar el circuito electrónico que permita la interconexión entre el
microcontrolador ATmega16, los leds y los pulsadores, asegurando un
funcionamiento correcto y eficiente del sistema.
Programar el microcontrolador ATmega16 utilizando un lenguaje de
programación adecuado, para controlar la lógica del juego, la detección de
pulsaciones de los botones y el encendido/apagado de los leds
correspondientes.
Implementar la lógica del juego de tres en raya, asegurando su correcto
funcionamiento y cumpliendo con las reglas establecidas para determinar el
ganador o el empate.
Realizar pruebas exhaustivas del sistema implementado para verificar su
funcionamiento, identificar posibles errores o fallas y proponer soluciones
adecuadas.

2 – 21
Documentar detalladamente el proceso de diseño, implementación y pruebas
del proyecto, incluyendo diagramas esquemáticos, código fuente, resultados
obtenidos y conclusiones alcanzadas.

III. DISEÑO.
Para el diseño de un circuito tres en raya se deben considerar varios aspectos a
considerar, estructura, la selección de los componentes, el ensamblado de los
mismos y la programación en el microcontrolador que dé el correcto funcionamiento
del circuito que marcara un tres en raya.
1. Selección de componentes.
Para el presente proyecto se utilizó el siguiente material:
MATERIAL DESCRIPCIÓN CANTIDAD IMAGEN
Es un dispositivo
semiconductor que
emite luz cuando
LEDS una corriente 18 u.
eléctrica pasa a
través de él.
Es un tipo
específico de cable
que se utiliza
CABLE comúnmente en 2 m.
aplicaciones
eléctricas y
electrónicas.

Es un
microcontrolador
de 8 bits fabricado
por Microchip
ATmega16 Technology, 1 u.
conocido por su
versatilidad y
3 – 21
amplia gama de
aplicaciones en
electrónica.
Es un componente
electrónico
utilizado para abrir
PULSADOR o cerrar un circuito 5 u.
eléctrico al ser
presionado
manualmente.
Es una
herramienta
manual diseñada
ALICATE DE para cortar 2 u.
CORTE alambres, cables, y
otros materiales
similares.
Es un componente
pasivo que se
utiliza para limitar o
RESISTENCIAS controlar el flujo de 64 u.
corriente eléctrica
en un circuito.

Proporciona una
salida de corriente
continua de 5
voltios y hasta 2
FUENTE DE amperios de 1 u.
5V, 2A. corriente. Esto
significa que puede
suministrar una

4 – 21
potencia máxima
de 10 vatios
Es un metal blando
y maleable que se
utiliza ampliamente 1 rollo.
ESTAÑO en la industria de la
soldadura.

Es una
herramienta
eléctrica utilizada 2 u.
CAUTIN para realizar
trabajos de
soldadura.

Es una
herramienta
fundamental en 5 u.
PROTOBOARD electrónica y
prototipado de
circuitos.
Es una placa de
circuito impreso
diseñada
específicamente
para alojar
componentes 30 x 25 cm.
electrónicos y
circuitos
PLACA relacionados con
PERFORADA un controlador

5 – 21
lógico
programable.
Es un entorno de
desarrollo
integrado
desarrollado por
LAPTOP CON Microchip
MICROCHIP Technology, una 1 u.
STUDIO empresa conocida
por sus productos
de
microcontroladores
y
semiconductores.

IV. PROCEDIMIENTO.

Se debe diseñar y realizar una simulación en PROTEUS, verificando las


correctas conexiones entre los componentes que se vayan a realizar.

6 – 21
Se debe realizar la programación para que los leds se enciendan al presionar
un pulsador; el primer pulsador realizara el movimiento de los leds rojos,
haciendo que con cada pulso este recorra un espacio, el segundo se utilizara
para realizar la selección del led y este se quede asignado. La misma
hermenéutica se utilizará para los leds verdes. Una vez que alguien gane el
tres en raya, el circuito dejara de seleccionar y se clavara en el momento. El
ultimo pulsador se utilizará para reiniciar el juego.
Realizando todas estas especificaciones, la programación se realizo de la
siguiente manera:

#define F_CPU 16000000


#include <avr/io.h>
#include <util/delay.h>
//BOTONE
#define boton1 PD4
#define boton2 PD5
#define boton3 PD6
#define boton4 PD7
//LEDS ROJOS
#define r1 PA0
#define r2 PA1
#define r3 PA2
#define r4 PA3
#define r5 PA4
#define r6 PA5
#define r7 PA6
#define r8 PA7
#define r9 PC7
//LEDS VERDES
#define v1 PB0
7 – 21
#define v2 PB1
#define v3 PB2
#define v4 PB3
#define v5 PB4
#define v6 PB5
#define v7 PB6
#define v8 PB7
#define v9 PD0

int guardarR[9]={11,11,11,11,11,11,11,11,11};
int contR = 0;

int guardarV[9]={11,11,11,11,11,11,11,11,11};//0-1-...1 (nunca al 11)


int contV = 0;

int main(void)
{
DDRD &= ~(1 << boton1);
DDRD &= ~(1 << boton2);
DDRD &= ~(1 << boton3);
DDRD &= ~(1 << boton4);
PORTD |= (1 << boton1) | (1 << boton2) | (1 << boton3) | (1 << boton4);
//ACTIVA PULL UPS :)

DDRA |= (1 << r1) | (1 << r2) | (1 << r3) | (1 << r4) | (1 << r5) | (1 << r6) | (1
<< r7) | (1 << r8); //LEDS ROJOS COMO SALIDAS
PORTA &= ~((1 << r1) | (1 << r2) | (1 << r3) | (1 << r4) | (1 << r5) | (1 <<
r6) | (1 << r7) | (1 << r8)); //APAGAR LOS LEDS AL INICIO

DDRC |= (1 << r9); //LED 9 ROJO COMO SALIDA

8 – 21
PORTC &= ~(1 << r9);

DDRB |= (1 << v1) | (1 << v2) | (1 << v3) | (1 << v4) | (1 << v5) | (1 << v6) |
(1 << v7) | (1 << v8); //LEDS VERDES COMO SALIDAS
PORTB &= ~((1 << v1) | (1 << v2) | (1 << v3) | (1 << v4) | (1 << v5) | (1 <<
v6) | (1 << v7) | (1 << v8)); //APAGAR LOS LEDS AL INICIO

DDRD |= (1 << v9);


PORTD &= ~(1 << v9);

uint8_t ultimo = r1;


uint8_t ult = v1;

while(1)
{
//BUCLE PARA JUGADOR 1 LEDS ROJOS
if (PIND &(1<<boton1))
{
_delay_ms(50);
while (PIND &(1<<boton1));
if (ultimo == r1)
{
PORTA |= (1<<r1);
PORTC &= ~(1<<PC7);
ultimo = r2;
}
else if (ultimo == r2)
{
PORTA |= (1 << r2);
PORTA &= ~(1<<r1);

9 – 21
ultimo = r3;
}
else if (ultimo == r3)
{
PORTA |= (1 << r3);
PORTA &= ~(1<<r2);
ultimo = r4;
}
else if (ultimo == r4)
{
PORTA |= (1 << r4);
PORTA &= ~(1<<r3);
ultimo = r5;
}
else if (ultimo == r5)
{
PORTA |= (1 << r5);
PORTA &= ~(1<<r4);
ultimo = r6;
}
else if (ultimo == r6)
{
PORTA |= (1 << r6);
PORTA &= ~(1<<r5);
ultimo = r7;
}
else if (ultimo == r7)
{
PORTA |= (1 << r7);

10 – 21
PORTA &= ~(1<<r6);
ultimo = r8;
}
else if (ultimo == r8)
{
PORTA|= (1 << r8);
PORTA &= ~(1<<r7);
ultimo = 10;
}
else if (ultimo == 10)
{
PORTC |= (1 << PC7);
PORTA &= ~(1<<r8);
ultimo = r1;
}
}
//CONTROL DEL BOTON 2 PARA SELECCIONAR UN LED ROJO
if (bit_is_set(PIND,5))
{
_delay_ms(50);
while (bit_is_set(PIND,5)){};
guardarR[contR]=ultimo;
contR++;
}

for (int j=0;j<=8;j++)


{
if (guardarR[j]==r1)
{

11 – 21
PORTC |= (1<<PC7);
}
else if (guardarR[j]==r2)
{
PORTA |= (1<<r1);
}
else if (guardarR[j]==r3)
{
PORTA |= (1<<r2);
}
else if (guardarR[j]==r4)
{
PORTA |= (1<<r3);
}
else if (guardarR[j]==r5)
{
PORTA |= (1<<r4);
}
else if (guardarR[j]==r6)
{
PORTA |= (1<<r5);
}
else if (guardarR[j]==r7)
{
PORTA |= (1<<r6);
}
else if (guardarR[j]==r8)
{
PORTA |= (1<<r7);

12 – 21
}
else if (guardarR[j]==r9)
{
PORTA |= (1<<8);
}
}

//BUCLE PARA JUGADOR 2 LEDS VERDES


if (PIND &(1<<boton3))
{
_delay_ms(50);
while (PIND &(1<<boton3));
if (ult == v1)
{
PORTB |= (1<<v1);
PORTD &= ~(1<<v9);
ult = v2;
}
else if (ult == v2)
{
PORTB |= (1 << v2);
PORTB &= ~(1<<v1);
ult = v3;
}
else if (ult == v3)
{
PORTB |= (1 << v3);
PORTB &= ~(1<<v2);
ult = v4;

13 – 21
}
else if (ult == v4)
{
PORTB |= (1 << v4);
PORTB &= ~(1<<v3);
ult = v5;
}
else if (ult == v5)
{
PORTB |= (1 << v5);
PORTB &= ~(1<<v4);
ult = v6;
}
else if (ult == v6)
{
PORTB |= (1 << v6);
PORTB &= ~(1<<v5);
ult = v7;
}
else if (ult == v7)
{
PORTB |= (1 << v7);
PORTB &= ~(1<<v6);
ult = v8;
}
else if (ult == v8)
{
PORTB |= (1 << v8);
PORTB &= ~(1<<v7);

14 – 21
ult = 10;
}
else if (ult == 10)
{
PORTD |= (1 << v9);
PORTB &= ~(1<<v8);
ult = v1;
}
}

//CONTROL DEL BOTON 4 PARA SELECCIONAR UN LED


VERDE
if (bit_is_set(PIND, 7))
{

_delay_ms(50);
while (bit_is_set(PIND, 7)){};
guardarV[contV]=ult;//=v2
contV++;
}
for (int i=0;i<=8;i++)
{

if (guardarV[i]== v1)
{
PORTD |= (1<<10);

}
else if (guardarV[i] == v2)
{
15 – 21
PORTB |= (1 << v1);

}
else if (guardarV[i] == v3)
{
PORTB |= (1 << v2);

}
else if (guardarV[i] == v4)
{
PORTB |= (1 << v3);

}
else if (guardarV[i] == v5)
{
PORTB |= (1 << v4);

}
else if (guardarV[i] == v6)
{
PORTB |= (1 << v5);

}
else if (guardarV[i] == v7)
{
PORTB |= (1 << v6);

}
else if (guardarV[i] == v8)

16 – 21
{
PORTB |= (1 << v7);

}
else if (guardarV[i] == 10)
{
PORTB |= (1 << v8);
}
}
}
}

Después de confirmar el correcto funcionamiento de la programación en la


simulación, se procedió a ensamblar el circuito tanto en el protoboard como
en la placa perforada.

17 – 21
Para finalizar se puso de forma estética el circuito y se cargó el programa en
el ATmega16.

18 – 21
V. CONCLUSIONES.
El desarrollo y la implementación del juego de tres en raya utilizando el
microcontrolador ATmega16 ha proporcionado una experiencia enriquecedora
en el ámbito de la electrónica y la programación ya que se pudo diseñar e
implementar periféricos que son controlados con el microcontrolador
mencionado
Se han adquirido conocimientos sobre el manejo de entradas, salidas, e
interrupciones mediante el control de leds y pulsadores, así como la
implementación de algoritmos para la lógica del juego.
Se investigo de gran manera el correcto funcionamiento del microcontrolador
debido a que no avanzaba la secuencia de leds a menos que estén pulsados
el botón 2 y 4, esto paso porque no se consideró una variable que se almaceno

19 – 21
al último valor y al momento de pasar al siguiente. Por lo tanto, el botón 3 y 4
no funcionaban.
Se tuvo un problema, ya que no cerraba el ciclo y no volvía al primer led, esto
porque había una confusión de valores entre las entradas A7 y C7, para que
pueda funcionar se tuvo que colocar el valor C7 como el número “10” para que
identifique la última posición de forma numérica.
Se tuvo que colocar un valor 11 en nuestros vectores porque el mismo nunca
llega a ser pulsado por lo tanto seguirá en un bucle de 0 a 8 o
de nueve valores, esto evitara errores al momento de culminar un ciclo.
La implementación del circuito y la programación del microcontrolador han
requerido la aplicación de conceptos teóricos en un entorno práctico. Se han
desarrollado habilidades en la soldadura de componentes, la depuración de
código y la solución de problemas en tiempo real.
El proyecto ha fomentado la colaboración entre ambos miembros del grupo,
permitiendo la distribución de tareas y la resolución conjunta de desafíos
técnicos. Se han compartido conocimientos y habilidades, promoviendo la
colaboración mutua.
Mediante pruebas exhaustivas, se ha verificado el funcionamiento del sistema
y se han identificado detalles que a la hora de su funcionamiento traía
problemas que posteriormente se solucionó.
Se ha comprobado que el juego de tres en raya cumple con las reglas
establecidas y proporciona una experiencia interactiva satisfactoria para los
usuarios.

VI. RECOMENDACIONES.
Se recomienda revisar y optimizar el código del programa para maximizar la
eficiencia y minimizar el uso de recursos del microcontrolador. Es importante
la simplificación de algoritmos y la implementación de técnicas de
programación eficientes, ya que se usó prácticamente todos los puertos.
Para mejorar la presentación y la seguridad del proyecto, considerar el diseño
y la construcción de un gabinete o carcasa que albergue el circuito y los
componentes de manera ordenada y protegida.

20 – 21
Es importante registrar los detalles del proyecto, incluyendo diagramas,
código, ensamblaje y uso. Esto puede ayudar a modificar errores que
aparezcan.
Es recomendable revisar el datasheet de los componentes e investigar como
se utiliza correctamente ya que podemos tener problemas al ahora de
programar que solamente puede ser por una mala definición de una variable,
esto puede hacer variar el ciclo del circuito.
Es importante la parte de la simulación, ya que en base al mismo podemos
trabajar ya en físico de acuerdo a las necesidades que se requiera.
Se recomienda realizar el circuito con los componentes soldados, debido a
que, si se conecta a un protoboard, una mala conexión puede hacer variar toda
la secuencia del circuito.

VII. BIBLIOGRAFIA.
https://www.alldatasheet.com/datasheetpdf/pdf/78532/ATMEL/ATMEGA16.ht
ml
https://biblus.us.es/bibing/proyectos/abreproy/11141/fichero/PFC%252F3+Mi
crocontroladores.pdf
https://www.youtube.com/watch?v=3zrVvzWEd9c
https://www.youtube.com/watch?v=Hokp8LwkK8k
https://www.instructables.com/Atmel-Microcontroller-Plays-the-Tic-Tac-Toe-
Game/

21 – 21

También podría gustarte

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy