Página principal

Tesina de seminario


Descargar 0.55 Mb.
Página10/10
Fecha de conversión18.07.2016
Tamaño0.55 Mb.
1   2   3   4   5   6   7   8   9   10

3.5. PROYECTO5: JUEGO DE DADOS SIMULADO EN LCD

3.5.1 OBJETIVO.-


Utilizar las interrupciones por cambio en los pórticos para habilitación de botoneras externas.

Utilización de librería LCD, para mostrar valores aleatorios.


3.5.2 ENUNCIADO


El circuito debe tener dos botoneras externas, para cada jugador, una tercera botonera que será la que da inicio al juego, además, el circuito constara de dos Led, estos indican el turno de cada jugador.

Cuando el jugador uno presiona el botón en su turno se genera un valor aleatorio y este es mostrado en el lcd.

Luego de este se dará paso para que se presione el botón del jugador 2.

Luego de esto será nuevamente el turno del jugador 1, y luego del jugador 2.

Ganara el que al sumar los valores de los dos dados obtenga el mayor puntaje.

3.5.3 ESQUEMA DEL PROYECTO.


Figura 3-22 Esquema del Proyecto


3.5.4 DIAGRAMA DE FLUJO DEL PROYECTO.


Figura 3.23: diagrama de flujo principal proyecto 5



Figura 3.24: Diagrama de flujo de Interrupción PCINT DEL PROYECTO 5



Figura 3.25: diagrama de flujo de subrutina VERIFICADOR() proyecto 5.


3.5.5 CÓDIGO FUENTE.


/*

* QUINTO.c

*

* Created: 04/01/2012 15:08:57



* Author: Micro

*/
#include


#include

#include

#include

#include

#include

#include

#include

#define BOOL char


#define FALSE 0

#define TRUE (!FALSE)

#define NULL 0
#define AUTO 3
#define INDICADOR 3

#define CERRADURA 7


#include "lcd_functions.h"

#include "lcd_driver.h"


#define pLCDREG_test (*(char *)(0xEC))
void GRABAR_DATOS(void);

void CONFIGURAR_PUERTOS(void);


void HABILITAR_PCINT(void);

void LED_JUGADOR1(void);

void LED_JUGADOR2(void);
void VERIFICADOR(void);

char REG_TEMP;

uint8_t INDICE;
char JUG1_DADO1=' ';

char JUG1_DADO2=' ';


char JUG2_DADO1=' ';

char JUG2_DADO2=' ';


char ALEATORIO1;

char ALEATORIO2;

char ALEATORIO3;
char JUGADOR=1; //SI ES JUGADOR 1 ES UNO..

char START;

int main(void)

{

CONFIGURAR_PUERTOS();



LCD_Init();

HABILITAR_PCINT();

sei();

LCD_puts_f(PSTR("INICIO"),1);



_delay_ms(800);

LCD_puts_f(PSTR("JUEGO "),1);

_delay_ms(800);

LCD_puts_f(PSTR(" DE "),1);

_delay_ms(800);

LCD_puts_f(PSTR("DADOS "),1);

_delay_ms(800);

JUGADOR = 1;

INDICE = 0X00;

START = 0;

//LAZO INFINITO

for (;;) {

ALEATORIO1++;

while(START == 1)

{

ALEATORIO2 = ALEATORIO2 + 3;



ALEATORIO3 = ALEATORIO2 + ALEATORIO1;

VERIFICADOR();

if(JUGADOR == 1)

{

//TURNO DEL JUGADOR UNO



//PRENDER LED DEL JUGADOR UNO

LED_JUGADOR1();

}

if(JUGADOR == 2)



{

//TURNO DEL JUGADOR DOS

//PRENSER LED DEL JUGADOR 2

LED_JUGADOR2();

}

}

LCD_puts_f(PSTR("START "),1);



LCD_FlashReset();

//PRENDE Y APAGA EL LED INDICADOR DE FUNCIONAMIENTO ESTABLE

// LED_INDICADOR_FLASH();

}

return 0;



}

void VERIFICADOR(void){

if (JUG2_DADO2 != ' ')

{

_delay_ms(800);



if( (JUG1_DADO1 + JUG1_DADO2 ) == (JUG2_DADO1 + JUG2_DADO2 ) )

LCD_puts_f(PSTR("EMPATE"),1);

else if((JUG1_DADO1 + JUG1_DADO2 ) > (JUG2_DADO1 + JUG2_DADO2 ) )

LCD_puts_f(PSTR("GANA 1"),1);

else LCD_puts_f(PSTR("GANA 2"),1);

LCD_FlashReset();

JUG1_DADO1=' ';

JUG1_DADO2=' ';


JUG2_DADO1=' ';

JUG2_DADO2=' ';

START = 0;

_delay_ms(800);

_delay_ms(800);

_delay_ms(800);

}

}

void LED_JUGADOR1(void)



{

PORTD = PINB;

PORTB = (1<

_delay_ms(23);

PORTB = (0<

_delay_ms(23);

}
void LED_JUGADOR2(void)

{

PORTD = PINB;



PORTE = (1<

_delay_ms(23);

PORTE = (0<

_delay_ms(23);

}
void GRABAR_DATOS(void)

{

//COMPROBAMOS QUE TECLA SE PRESIONO.



char SELECCION;

ALEATORIO3 = (ALEATORIO3 & 0X07);

if(ALEATORIO3 == 0 ) ALEATORIO3 = 1;

if(ALEATORIO3 == 7 ) ALEATORIO3 = 6;

//VERIFICA SI SE PRECIONO TECLA 1

SELECCION = (~PINB & 0X01);

if(SELECCION == 0x01 && START == 1)

{

if(JUGADOR == 1)



{

//JUGADOR UNO PRESIONO EN SU TURNO

if(JUG1_DADO1==' '){

LCD_puts_f(PSTR(" "),1);

LCD_FlashReset();

JUG1_DADO1 = ALEATORIO3;

LCD_putc(0, JUG1_DADO1 + 49);

}

else



if(JUG1_DADO2==' '){

JUG1_DADO2 = ALEATORIO3;

LCD_putc(1, JUG1_DADO2 + 49);

}

LCD_FlashReset();



JUGADOR = 2;

}

//PORTE = (1<<4);



//INGRESAR_DATO_EN_ARRAY('1');

}

//VERIFICA SI SE PRESIONO TECLA 2



SELECCION = (~PINB & 0X02);

if(SELECCION == 0x02 && START == 1)

{

if(JUGADOR == 2)



{

//JUGADOR DOS PRESIONO EN SU TURNO

if(JUG2_DADO1==' '){

JUG2_DADO1 = ALEATORIO3;

LCD_putc(4, JUG2_DADO1 + 49);

}

else



if(JUG2_DADO2==' '){

JUG2_DADO2 = ALEATORIO3;

LCD_putc(5, JUG2_DADO2 + 49);

LCD_FlashReset();}

}

JUGADOR = 1;



}

//VERIFICA SI SE PRESIONO START ( TECLA3)

SELECCION = (~PINB & 0X04);

if(SELECCION == 0x04)

{
START = 0X01;

}

//VERIFICA SI SE PRESIONO TECLA CENTRAL



SELECCION = (~PINB & 0X10);

if(SELECCION == 0x10)

{

//NINGUNA ACCION



}

}
//PUERTOS B0,B1,B2 COMO ENTRADA PARA TECLAS.

void CONFIGURAR_PUERTOS(void)

{

DDRD = 0XFF;



DDRE = 0XF3;

DDRB = 0X08;

PORTB = 0XF7;
}
//CONFIGURACION DE INTERRUPCIONES, TAMBIEN SE CONFIGURAN LAS BOTONERAS

//DE PORTB0, PORB1, PORB2

void HABILITAR_PCINT(void){

//HABILITACION DE INTERRUPCONES POR CAMBIO EN PORTICOS

EIMSK |= (1<

//HABILITACION INDIVIDUAL DE INTERRUPCION EN CADA BITS.

PCMSK0 |= (1<

//TECLA1, TECLA2, TECLA3, CENTRO, ARRIBA, ABAJO

PCMSK1 |= (1<

}
//INTERRUPCION POR CAMBIO EN LOS PORTICOS PB0

SIGNAL(SIG_PIN_CHANGE0)

{

PORTE = 0x01;//INDICADOR



//REDIRECIONAMOS

GRABAR_DATOS();

}
//INTERRUPCION POR CAMBIO EN LOS PORTICOS PB0

SIGNAL(SIG_PIN_CHANGE1)

{

PORTE = 0x02; //INDICADOR



GRABAR_DATOS();

}

CAPITULO 4


4.-SIMULACION E IMPLEMENTACION

4.1. SIMULACION PROYECTO1: MANIPULACION DE JOYSTICK


En la figura siguiente se observa la circuitería, cableado de los elementos involucrados.

FIGURA 4-1: CIRCUITO TERMINADO DEL PROYECTO1

A continuación la figura nos muestra la pantalla al ejecutar una simulación en nuestro programa Proteus

Figura 4-2: simulación del circuito en el programa Proteus.

La siguiente ilustración o figura es la pantalla de edición de componentes donde nos muestra el componente ATMEGA169, y el archivo hexadecimal que se genera al cargar el código assembler o en lenguaje C.

FIGURA 4-3: EDICION DE COMPONENTE ATMEGA169

En esta otra figura, se muestra otras características de los componentes tales como la velocidad en baudios, la capacidad de bits de los datos a operar.



Figura 4-4: Edicion de componentes características de procesamiento

4.2 SIMULACION PROYECTO2: VARIACIONES DE COLOR DE LED GRB POR MEDIO DE MODULACION PWM


La figura muestra los componentes involucrados en la realización de este proyecto.

Figura 4-5: proyecto dos en Proteus vista esquemática

La figura a continuación se muestra la simulación de los pulsos que se generan utilizando la modulación PWM, cada color es a determinado rango de frecuencia.



Figura 4-6: Simulación del proyecto dos en Proteus

4.3. SIMULACION PROYECTO3: CERRADURA ELECTRONICA


Se muestra en la figura los componentes utilizados para la realización de este proyecto.



Figura 4-7: Vista esquemática en Proteus del proyecto tres

En la siguiente figura se detallan las librerías externas utilizadas para el adecuado funcionamiento del código.



FIGURA 4-8: Librerías Externas agregadas.

En la siguiente figura se muestra la ejecución de la simulación del proyecto realizado.

FIGURA 4-9: Diagrama de Cerradura Electrónica, Clave Correcta.


4.4. SIMULACION PROYECTO4: CONVERTIDOR ANALOGICO DIGITAL


A continuación la figura del proyecto 4 con sus respectivos componentes utilizados, simulado en el programa Proteus.

figura 4-10: diagrama del controlador de temperatura.

A continuación las librerías necesarias agregadas para la ejecución exitosa del código del programa realizado.



Figura 4-11: Simulación, librerías utilizadas

En esta ilustración se muestra la ejecución de la validación de exito del control de temperatura.



Figura 4-12: Simulación del circuito.


4.5. SIMULACION PROYECTO5: SIMULACION DE JUEGO DE DADOS


A continuación la figura del proyecto 5 con sus respectivos componentes utilizados, simulado en el programa Proteus.

Figura 4-13: circuito del Proyecto 5.



Figura 4-14: A la espera de que se presione botón start.



Figura 4-15: dados generados por los dos jugadores. Gana jugador 2.



Figura 4-16: Gana jugador 2.

CONCLUSIONES


  1. Se implementaron 5 proyectos Didácticos mostrando el potencial del AvrBUtterfly, estos proyectos son orientados a mostrar la versatilidad de las Interrupciones Generales de las Microcontroladores ATMEL.

  2. En las Líneas de comandos tanto en lenguaje Asembler como en el Leguaje C se describen la forma en que se habilitan las interrupciones, no se utilizaron todas de las 23 interrupciones que posee el Atmega169. Sin embargo con las aplicadas se deja abierto un camino para expandirse a las demás Interrupciones.

  3. Con el uso del Microcontroladores AVR como nueva tecnología, se expanden las posibilidades de desarrollos más elaborados, y junto con la tecnología de Microchip se tiene más opciones a escoger, para futuros desarrollos. En donde el precio, y más que nada la disponibilidad de los elementos es fundamental para terminar cualquier proyecto.

RECOMENDACIONES

  1. Al inicio se hizo complicado, pues se relaciona la tecnología de Microchip con la ATMEL, cosa que se hizo algo confuso, el Atmega169 tiene muchas más set de Instrucciones, que al inicio las instrucciones diversas del Atmega pueden parecer las mismas, incluso pueden llegar hacer pensar al programador que es un hecho que su código está bien. Sin embargo, el aplicar las Instrucciones en assembler, hay que tener muy en cuenta la dirección de memoria de los Registros a Utilizar, como conclusión en esto les aseguro que primero hay que ver que registro se va a trabajar antes de aplicar cualquier instrucción y no al revés.

  2. Complementando la recomendación descrita anterior, puedo decir que incluso el propio código expuesto en el datasheet del Atmega, NO FUNCIONA, pues al tratar de aplicarlo el compilador muestra errores. Como recomendación hay que darse cuenta que los registros del Atmega169 están en dos bancos, un banco va desde la dirección (0xFF) hasta la dirección (0x60). Por ejemplo en este banco se deben utilizar las Instrucción STS para escribir datos. Sin embargo esta misma instrucción no funciona para el Banco que va desde la Dirección 0x3F (0x5F) al 0x00 (0x20), aquí se debe utilizar la Instrucción OUT.

  3. En los Programas en lenguaje C, para las Instrucciones se utiliza SIGNAL(Vector) sin embargo modernamente se utiliza ISR(vector). igualmente Funciona.

  4. Se utiliza el AvrStuido 4 para el desarrollo y para grabar el AvrButterfly, sin embargo este mismo Proceso de Grabado por medio de RS232, no Funciona en la Versión 5 del AvrStudio, esto se debe a que le falta un complemento el AvrProg, este se baja de internet y debe ser incluido en las Herramientas. Con esto se consigue trabajar bien en el AvrStudio 5.

ANEXOS

BIBLIOGRAFÍA

[1] Quiceno Manrique, Andrés Felipe, Estructura general de un programa en C para sistemas embebidos, http://trucoselectronicayprogramacion.blogspot.com/2010/11/estructura-general-de-un-programa-en-c.html, Fecha de consulta noviembre 2011.

[2] AVR Tutorials, AVR Microcontroller Stack and Stack Pointer,
http://www.avr-tutorials.com/general/avr-microcontroller-stack-operation-and-stack-pointer, fecha de consulta noviembre 2011.

[3] Academic, Gama de color, http://www.esacademic.com/dic.nsf/eswiki/516331 , fecha de consulta noviembre 2011

[4] DISQUS, Interrupciones, http://jmnlab.com/interrupciones/interrupciones.html, fecha de consulta noviembre del 2011

[5] Escuela Superior Politécnica de ALCOY, COMPARATIVA DE

MICROCONTROLADORES ACTUALES,
http://server-die.alc.upv.es/asignaturas/LSED/2002-03/Micros/downloads/trabajo.pdf, fecha de consulta noviembre del 2011

[6] Domínguez Arellano, Rufino, Interrupciones, http://ael.110mb.com/informatica/Int8051.pdf , fecha de consulta diciembre del 2011.

[7] Fundación Wikimedia, Inc, Intel 8051, http://es.wikipedia.org/wiki/Intel_8051 , fecha de consulta diciembre 2011

[8] Frino, Luis, ASPECTOS BASICOS DEL PROGRAMA PROTEUS, http://www.frino.com.ar/proteus.htm , fecha de consulta diciembre 2011

[9] Landen, AVR Butterfly Quick Start User Guide, http://elmicro.com/files/atmel/atavrbfly_quickstart.pdf , fecha de consulta diciembre 2011

[10] Doxygen, Global manipulation of the interrupt flag,


http://www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html , fecha de consulta diciembre 2011

[11] Mikroontroller, ATMEGA128: AD-Wandlung - Interrupt, http://www.mikrocontroller.net/topic/38318 , fecha de consulta diciembre 2011

[12] Pudn, Downloads Codes Google Pudn, http://search.pudn.com/search_read_en.asp?keyword=AVR+adc , consulta diciembre 2011

[13] Pudn, ADC.c, http://read.pudn.com/downloads90/sourcecode/embed/343367/task/task1/ADC.c__.htm , fecha de consulta diciembre 2011

[14] DISQUS, ADC, http://jmnlab.com/adc/adc.html , fecha de consulta diciembre 2011

[15] Pardue, Joe, Butterfly Alternate Pin Uses, http://www.smileymicros.com/download/Butterfly%20Alternate%20Pin%20Uses.pdf?&MMN_position=62:62 , fecha de consulta diciembre 2011

[16] AVR Freaks, Temperature sensor, http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&p=819824 , fecha de consulta diciembre 2011

[17] Schmitt, Günter, Mikrocomputertechnik mit Controllern der Atmel, http://books.google.com.ec/books?id=AI_HVUE0xYEC&pg=PA413&lpg=PA413&dq=ADCO+AVR+LEER&source=bl&ots=Q-NNdjCX5U&sig=f5nsn-LNrhlUrccddH_VSZsJUGQ&hl=es&sa=X&ei=QjEKT5z5FM35ggeEiPGJAg&ved=0CCgQ6AEwAQ#v=onepage&q=ADCO%20AVR%20LEER&f=false , fecha de consulta diciembre 2011





1   2   3   4   5   6   7   8   9   10


La base de datos está protegida por derechos de autor ©espanito.com 2016
enviar mensaje