Informe 3 en Raya
Informe 3 en Raya
Informe 3 en Raya
MICROPROCESADORES II
Tres en raya
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.
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.
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.
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:
int guardarR[9]={11,11,11,11,11,11,11,11,11};
int contR = 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
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
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++;
}
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);
}
}
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;
}
}
_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);
}
}
}
}
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