Home

Digitales (LSED) - Fernando Nunez Serrano

image

Contents

1. volver a dejar el mismo jugador cambiaJugador if mias 2 amp amp contrario 0 return GANA if contrario 2 amp amp mias 0 return EVITAPERDER if contrario 0 amp amp mias 1 return SIPUEDEGANARESQOUINA resto de los casos return NOPUEDEGANARESQUINA 82 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 AL El Ez WORD com WORD comprobarDiagonalDerecha void retorna importancia de la casilla seg n la diagonal derecha con el siguiente orden de prioridad GANA VITAPERDER nai IPUEDEGANAR NOPUEDEGANAR PUEDEGANARESQUINA NOPUEDEGANARESQUINA probarDiagonalDerecha void WORD mias contrario mias contadorDiagonalDchal cambiaJugador O contrario contadorDiagonalDcha volver a dejar el mismo jugador cambiaJugador if mias 2 amp amp contrario 0 return GANA if contrario 2 amp amp mias 0 return EVITAPERDER if contrario 0 amp amp mias 1 return SIPUEDEGANARESQUINA resto de los casos return NOPUEDEGANARESQUINA Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 AT BOOL insertarFicha WORD fila WORD columna retorna codigo opera
2. BOOL esCeldaVacia WORD fila WORD columna 1 retorna TRUE si es una celda vacia BOOL esCeldaVacia WORD fila WORD columna comprobar que la celda est vacia if tablero fila columna VACIO return TRUE jelse return FALSE 79 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 AS 4i WORD comprobarfila WORD fila WORD columna retorna importancia de la casilla seg n la fila con el siguiente orden de prioridad GANA EVITAPERDER SIPUEDEGANARESQUINA SIPUEDEGANAR NOPUEDEGANARESQUINA NOPUEDEGANAR WORD comprobarFila WORD fila WORD columna WORD mias contrario mias contadorFila fila cambiaJugador contrario contadorFila fila volver a dejar el mismo jugador cambiaJugador if mias 2 amp amp contrario 0 return GANA if contrario 2 amp amp mias 0 return EVITAPERDER if contrario 0 amp amp mias 1 i esEsquina fila columna TRUE return SIPUEDEGANARESQUINA jelse return SIPUEDEGANAR resto de los casos if esEsquina fila columna TRUE return NOPUEDEGANARESQUINA return NOPUEDEGANAR Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 AS
3. i i 2 dato i 1 dato i asm_set_ip1 0 enviaUdp dato 0 puertoDestinoDEBUG poner un breakponit para poder interrumpir void interrumpe void output Habilite la interrupcionirin poner break a esta linea 115 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 long del mensaje ASCII extrae la un 1 long extraerLong char mensaje long dir long valor Int ApJ long factor izar direccion inicial dir 0 1 lt 8 1 for 1 0 valor int mensaje 7 11 factor 1 j 0 j lt i j factor factor 16 for if valor gt 48 amp valor lt 57 es un numero del 0 al valor valor 48 dir valor factor else i es una valor valor 55 dir valor factor 1 y valor gt 41 valor lt 46 letra de la A la F Hh return dir Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 puerto puerto Destino void enviaUdp char mensaje int puertodest char pchar puntero al inicio de la cadena int i pchar mensaje Deshabilitar interrupciones asm_set_ipl 6 pNbuf fec_nif tx_alloc Establecer la longitud del paquete UDP pNbuf gt length longitud mensaje Establecer mensaje dirbasura 8 mensaj
4. UDE NBUF pNbuf char bufferUdpRX MAXMENSAJEUDP buffer de recepci n char pbufferUdpTX puntero al buffer de tx char pbufferUdpRX puntero al buffer de rx PARAR KKK RRA RRA RARA RRA ARK RAR k kK K K RR kK K K K KK kk k kK kK RRA RARA kK k void recibeUdp NIF nif NBUF pNbuf int hdr_offset int longitud char cadena void enviaUdp char mensaje int puertodest void interrumpe void long extraerDireccion char mensaje void accedeMemoria char puntero char tip long extraerLong char mensaje Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 inicial iza el void iniciarUdp void mbar_writeByte MCFS ACCESO_A MEMORTA_LONG DIR_VTMR1 Escribimos la direcci n de cliente UDP IM_PIVR V_BASE la funci n ACCESO_A MEMORIA _LONG DIR_VETHRX Escribimos la direc ci n de la interrupci n EthernetTx ACCESO_A MEMORTA_LONG DIR_VETHTX Ii mbar_wri mbar_wri FA pbufferUdpRX bul 24 Marcamos teLong MCF S Marcamos teLong MCF S nicial nicia la interrupci n la interrupci n izar puntero del fferUdpRX 0 izar timer para el Ethernet IM_ICR3 0x88888E88 ULONG _prep_TOUT1 para TMRO ULONG ULONG tRx de niv
5. Private Sub Command1_Click UDP RemoteHost Me IPDESTINO Text UDP RemotePort 7000 Me PUERTODESTINO Text puerto deSTINO UDP SendData 1 Me ENVIARTABLERO Text End Sub Private Sub Command2_Click UDP RemoteHost Me IPDESTINO Text UDP RemotePort Me PUERTODESTINO Text puerto desTINO UDP SendData 2 Me ENVIARTIEMPO Text End Sub Private Sub Command3_Click UDP RemoteHost Me IPDESTINO Text UDP RemotePort Me PUERTODESTINO Text puerto deSsTINO JUEGO UDP SendData 0 Me ENVIARMENSAJE Text End Sub Private Sub Command4_Click Me RECIBIDO Text End Sub Private Sub Command5_Click UDP RemoteHost Me IPDESTINO Text UDP RemotePort Me PUERTODESTINO Text puerto desTINO UDP SendData 3 Me ENVIARTURNO Text 62 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 End Sub Private Sub Command6_Click UDPDEBUGGER RemoteHost Me IPDESTINO Text UDPDEBUGGER RemotePort Me PUERTODESTINODEBUG UDPDEBUGGER SendData 1 Me VARIABLE Text End Sub Private Sub Command7_Click UDPDEBUGGER RemoteHost Me IPDESTINO Text UDPDEBUGGER RemotePort Me PUERTODESTINODEBUG UDPDEBUGGER SendData Me BLOQUE Text End Sub Private Sub Form_Load Combol Clear Combol AddItem Coldfire Combol AddItem Terminal 3
6. Explora el teclado matricial y devuelve la tecla pulsada BYTE teclado void BYTE tecla BYTE fila columna fila_mask static char teclas NUM_FILAS NUM_COLS 123C 456D 789E AOBE Bucle de exploraci n del teclado while finTurno FALSE Excitamos una columna for columna NUM_COLS 1 columna gt 0 columna set_puertoS EXCIT lt lt columna Se env a la excitaci n de columna retardo RETARDOTECLA Esperamos respuesta de optoacopladores Exploramos las filas en busca de respuesta for fila NUM_COLS 1 fila gt NULO fila fila_mask EXCIT lt lt fila M scara para leer el bit de la fila actual if lee _puertoE fila_mask Si encuentra tecla pulsada while lee _puertoE fila_mask Esperamos a que se suelte retardo RETARDOTECLA Retardo antirrebotes tecla teclas fila columna Devolvemos la tecla pulsada outch tecla eco pantalla output MirAn return tecla Siguiente columna Exploraci n finalizada sin encontrar una tecla pulsada if mensajeUdpRx TRUE mensajeUdpRx FALSE comprobar que tiene el formato correcto if bufferUdpRX 0 return bufferUdpRX 1 while retornamos algo por defecto si t_out return A 70 Memoria del proyecto desarrollado
7. 4i WORD comprobarColumna WORD fila WORD columna retorna importancia de la casilla seg n la columna con el siguiente orden de prioridad GANA EVITAPERDER SIPUEDEGANARESQUINA SIPUEDEGANAR NOPUEDEGANARESQUINA NOPUEDEGANAR WORD comprobarColumna WORD fila WORD columna WORD mias contrario mias contadorColumna columna cambiaJugador contrario contadorColumna columna volver a dejar el mismo jugador cambiaJugador mias 2 amp amp contrario 0 return GANA if contrario 2 amp amp mias 0 return EVITAPERDER if contrario 0 amp amp mias 1 if esEsquina fila columna TRUE return SIPUEDEGANARESQUINA jelse return SIPUEDEGANAR resto de los casos if esEsquina fila columna TRUE return NOPUEDEGANARESQUINA return NOPUEDEGANAR 81 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 IF WORD comprobarDiagonallIzda void retorna importancia de la casilla seg n la diagonal izquierda con el siguiente orden de prioridad GANA EVITAPERDER SIPUEDEGANARESQUINA SIPUEDEGANAR NOPUEDEGANARESQUINA NOPUEDEGANAR WORD comprobarDiagonallIzda void WORD mias contrario mias contadorDiagonallIzda cambiaJugador contrario contadorDiagonallIzda
8. inicio 11 S A A mo a e MA kd Documen HLaborato Cimemoria 4E Tocar n Ex Proyecto Munte DELI Ea 2 aso AA 23 02 34 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 La librer a permite enviar y recibir mensajes UDP por los puertos origen y destino deseados responde a peticiones PING y permite el uso de red mascara de red y puerta de enlace por tanto la plataforma podr a colgarse de cualquier red existente permitiendo a un usuario remoto con conectividad IP interactuar con el coldfire Sin embargo para simplificar las conexiones en el laboratorio la comunicaci n entre el PC y la plataforma se realiza mediante un cable RJ45 cruzado Por ltimo queremos destacar que la librer a UDP se ha realizado de tal forma que pueda ser utilizada para cualquier otro fin distinto al juego 3 en raya Facilita el env o y mensajes UDP de forma sencilla e intuitiva Dispone de m todos de inicializaci n env o y atenci n de rutinas de recepci n De esta forma puede ponerse a disposici n de terceras personas para que puedan utilizar el puerto ethernet de una forma m s eficaz que la ofrecida por el cliente TFTP para futuras aplicaciones 5 5 Implementaci n gr fica de estad sticas de juego Para darle m s funcionalidad al entorno gr fico hemos desarrollado un sistema que permite visualizar gr ficamente el tiempo de juego acumulado de cada uno de los jugad
9. iniciar escucha mensajes 3r EscuchaUdp puertoEscucha3R long recibeUdp3R iniciar escucha mensajesdebugger EscuchaUdp puertoEscuchaDEBUG long recibeUdpDebugger 107 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 Ai Definicion de rutinas de atencion a la interrupci n Es necesario definirlas aunque estan vacias void rutina_intl void void rutina_int2 void void rutina_int3 void void rutina_int4 void void rutina_tout0 void void rutina_toutl void tiempoTurno duracionNotaActual comprobar tout jugada if tiempoTurno gt MAX_TURNO no se puede perder el turno si el primer jugador no ha colocado en el centro if numeroFichas gt 1 finTurno TRUE relanzar melodia fondo despues de partida if suenaGanador FALSE amp suenaPerdedor FALSE amp suenaMelodia FALSE iniciaMelodia actualizar melodia if suenaMelodia TRUE toutMelodia if suenaPerdedor TRUE toutPerdedor if suenaGanador TRUE toutGanador borrar REF en TER1 tambien borra PI en ICR1 mbar_writeShort MCFSIM_TER1 3 poner a 0 cap y ref escribiendo 1 return void rutina_tout2 void void rutina_tout3 void 108 Memoria del proyecto desarrollado en el Laboratorio de Sis
10. output ArAnN OTRA PARTIDA A SI B NO RRA RARA RA Ap f enviaUdp 0 xxx x xxxxxx x OTRA PARTIDA A SI B NO ERKK RRA RRE EN puertoDestino3R fin FALSE eleccion FALSE do switch teclado case B fin TRUE eleccion TRUE break case A eleccion TRUE fin FALSE break default output ArinEleccion Incorrectalrin enviaUdp 0Eleccion Incorrectattt puertoDestino3R jwhile eleccion FALSE while fin FALSE exit 0 finTurno FALSE evitar tout turno no hay tout turno Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 BOOL esMejorJugada WOORD mejorValor WORD jugadaActual devuelve TRUE si jugadaActual tiene mas puntuaci n que la almacenada hasta el momento BOOL esMejorJugada WORD mejorValor WORD jugadaActual if jugadaActual gt mejorValor return TRUE else return FALSE Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 1 WORD buscaMejorOpcion WORD fila WORD columna devuelve la mayor importancia que tiene la celda Se vigila la fila la columna y si es el caso la diagonal asociada a esa posicion Seg n el siguiente criterio de mas
11. uo C4 ci 470pF aL o i A 100nF pue T C 100nF pal A h Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 Finalmente el esquema completo del circuito queda de la siguiente manera R2 El 5 6K 100pF Ai i 100K T R4 10 10 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 4 Descripci n del subsistema Software 4 1 Proceso del programa principal 11 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 1 Subrutina teclado 2 Subrutina enDiagonallzda Variables de Entrada WORD fila WORD columna Variables de Salida BOOL temp Comprueba si la celda est en la diagonal izquierda si es as retorna temp TRUE 3 Subrutina muestraTablero Variables de Entrada void Variables de Salida void Variables globales Muestra el tablero en pantalla y llama a muestraTableroUdp 12 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 4 Subrutina muestraTableroUdp Variables de Entrada void Variables de Salida void Env a el tablero por UDP poniendo antes el c digo de env o 5 Subrutina iniciaTablero Variables de Entrada void Variables de Salida void Variables globales tablero numer
12. Variables globales turnoActual Retorna TRUE si se puede quitar la ficha 25 Subrutina quitarFicha Variables de Entrada WORD fila WORD columna Variables de Salida BOOL Variables globales numeroFichas Quita una ficha del tablero verificando que se quita una ficha del jugador que tiene el turno actual Retorna TRUE si es eliminada correctamente o FALSE si no es eliminada 17 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 26 Subrutina selTipoJuego Variables de Entrada BYTE tecla Variables de Salida void Variables globales BYTE tecla WORD tipoJuego M todo que selecciona tipo de Juego Si tecla A e tipoJuego UNJUGADOR e Imprimimos por pantalla inicio juego contra la m quina e Enviamos por udp Si tecla B e tipoJuego DOSJUGADORES e Imprimimos por pantalla inicio juego entre dos jugadores e Enviamos por udp 27 Subrutina leerCelda Variables de Entrada void Variables de Salida void Variables Globales numFila numColumna finTurno Captura una selecci n de celda e Bucle do while hasta selecci n correcta de celda e Hacemos un switch con 9 case uno para cada tecla del tablero e Si lesCeldaValida nmumFila numColumna finTumo FALSE la celda es incorrecta e Mientras la celda sea incorrecta y no halla acabado el tiempo del turno repetimos la operaci n 28 Subrutina desplazar Variables de Entrada void
13. e True ue rue tipo Visible True valorvariable Visibl e True m memini Visible Tru lan tama o Visible Tru Variablerefresh Visi PARAR Visible True DIRECCION Visible e e ble True True MTIPO Visible True False True Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 End Select End Sub Private Sub mmostrarudp_Click Select Case mmostrarudp Checked Case True mmostrarudp Checked Label1l Visible False Text1 Visible False False Case False mmostrarudp Checked True Label1l Visible True Text1l Visible True End Select End Sub Private Sub mvisgrafica_Click Select Case mvisgrafica Checked Case True mvisgrafica Checked False Me grafica Visible False Case False mvisgrafica Checked True Me grafica Visible True End Select End Sub Private Sub PARAR_Click formato envio peticiones Af TEXTO Aj Me UDPDEBUGGER RemotePort 5000 Me UDPDEBUGGER RemoteHost T92 Bd 20 Me UDPDEBUGGER SendData TEXTO End Sub Private Sub Timerl_Timer If tOut gt Timerl Interval Then tOut tOut Timerl Interval Else tOut 0 Me Timer1 Enabled False Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 End
14. ya que si la ficha est tapando un tres en raya al quitarla y llamar a jugadaAutomatica si no hay ninguna opci n de ganar en otra celda nos devolver EVITARPERDER como mayor importancia y se colocar la ficha en el mismo sitio por lo tanto habr a situaciones en las que la m quina no mueve quitarFicha fila columna importanciaNueva jugadaAutomatica comprobar que se ha insertado en la mismo lugar if tablero fila columna simbolo turnoActual copiarArray tempTablero tablero restaurar tablero return FALSE else copiarArray tempTablero tablero restaurar tablero return TRUE 41 Subrutina jugadaContrario 23 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 Variables de Entrada void Variables de Salida WORD mejolmportancia Variables globales WORD turnoActual 42 Subrutina jugadaAutomaticaDesplaza Variables de Entrada void Variables de Salida WORD importancia Variables globales WORD turnoActual Jugada de la maquina cuando tiene que desplazar Se juega probando desplazar cada ficha de la maquina se almacena la mejor importancia y finalmente se restaura el tablero con el mejor resultado 43 Subrutina ajustaTimerl Variables de Entrada void Variables de Salida void Inicializa la interrupci n del Timerl y arranca el timerl 44 Subrutina ajustaTimero Variables de Entrada WORD trr Variables de Sa
15. GANA EVITARPERDER SIPUEDEGANARESQUINA SI PUEDEGANAR NOPUEDEGANARESQUINA Y NOPUEDEGANAR Para ello contamos en la fila o columna el n mero de de fichas m as y las del contrario subrutinas contadorColumna y contadorFila y vemos la importancia de la siguiente manera if mias 2 amp amp contrario 0 return GANA if contrario 2 amp amp mias 0 return EVITAPERDER if contrario 0 amp amp mias 1 if esEsquina fila columna TRUE return SIPUEDEGANARESQUINA jelse return SIPUEDEGANAR resto de los casos if esEsquina fila columna TRUE return NOPUEDEGANARESQUINA 15 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 22 Subrutinas comprobarDiagonallzda comprobarDiagonalDerecha Variables de Entrada void Variables de Salida WORD importancia Estas dos subrutinas funcionan igual que las anteriores pero en este caso no hace falta pasarle como par metro la fila y la columna 23 Subrutina insertarFicha Variables de Entrada WORD fila WORD columna Variables de Salida BOOL Variables globales turnoActual Retorna TRUE si es insertada correctamente o FALSE si no es insertada 16 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 24 Subrutina quitarFichaValido Variables de Entrada WORD fila WORD columna Variables de Salida BOOL
16. 4 ya que la m quina ganar a y dar a igual lo que pueda hacer el contrario Continuamos mejorando el algoritmo porque nos dimos cuenta que las esquinas eran celdas con mayor importancia puesto que tienen 2 segmentos asociados vertical y horizontal frente al nico que tienen las celdas intermedias del per metro exterior del tablero celdas numero 2 4 6 y 8 que solo tienen horizontal o vertical Hay que tener en cuenta que la casilla central siempre es del jugador 1 y es inamovible Por tanto las esquinas al tener m s segmentos asociados tienen m s posibilidades de obtener victoria De esta forma definimos una nueva clasificaci n de las importancias asociadas a cada jugada Y ES ESQUINA IMPORTANCIA DENOMINACION TIPO DE JUGADA 6 GANA Realizando esta jugada gana la partida 5 EVITA PERDER Evita que el contrario consiga ganar en la siguiente jugada 4 SI PUEDE GANAR Si juega en esta posici n tiene posibilidades de ganar en su siguiente turno ya que tendr a 2 fichas en posici n ganadora y la tercera casilla asociada a esa jugada est libre Adem s la celda es esquina 3 SI PUEDE GANAR Si juega en esta posici n tiene posibilidades de ganar en su siguiente turno ya que tendr a 2 fichas en posici n ganadora y la tercera casilla asociada a esa jugada est libre 2 NO PUEDE Resto de jugadas En principio la m quina no podr GANAR Y ES ganar en el pr ximo turno en los segmentos ESQUINA correspondient
17. 66 166 166 166 666 166 166 166 166 166 444 600 ganador las notas de la melodia del WORD static melodiaPerdedor 4 392 330 262 0 de la melodia del WORD static timeMel perdedor 4 523 659 784 0 ganador las notas de la melodia del perdedor WORD static FACTOR_TMR0 1536 TMR0 2F2C frecs de las notas odiaGanador 4 1300 300 300 1000 duracion de frecs de las notas odiaPerdedor 4 1500 500 500 1000 duracion de decalado total del contador con Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 declaracion de funciones para no tener que ponerlas por orden de llamada BOOL colocarFicha WORD importancia BOOL compruebaVictoria void BOOL desplazar void BOOL esC BOOL esCeldaVacia BOOL esC eldaCentral WORD fila WORD columna WORD fila WORD columna eldaValida WORD fila WORD columna BOOL esEsquina WORD fila WORD columna BOOL esMejorJugada WORD mejorValor WORD jugadaActual BOOL insertarFicha WORD fila WORD columna BOOL quit BOOL qui BOOL vic BOOI vict BOOL vic toriaEnFi arFicha WORD fila WORD columna tarFichaValido WORD fila WORD columna toriaEnCol oriaEnDiagonal void la void umna void BYTE con u K h
18. If mostrar tiempo restante Me tiempo Caption Format tOut 1000 00 0 If tOut lt 5000 Then Me tiempo ForeColor amp HFF amp rojo Me TRESTA BackColor amp HFF amp rojo Else Me tiempo ForeColor amp H0 amp negro Me TRESTA BackColor amp H0 amp negro End If actualizar barra de tiempos Me TRESTA Width 11295 tOut 20000 Me TRESTA Left 2040 11295 Me TRESTA Width ajustar tiempo de juego de cada jugador If tiempoJugadorl gt tiempoJugador2 Then t tiempoJugador1 Else t tiempoJugador2 End If Me grafica Plot Axis VtChAxisIdY ValueScale Maximum 20000 Int t 20000 1 If turnoActual 1 Then tiempoJugador1 tiempoJugadorl Timerl Interval Me grafica Column 1 Me grafica Data tiempoJugador1 Else tiempoJugador2 tiempoJugador2 Timerl Interval Me grafica Column 2 Me grafica Data tiempoJugador2 End If End Sub Private Sub UDP_DataArrival ByVal bytesTotal As Long Dim dato As String On Error Resume Next UDP GetData dato Me Text1l Text Time dato Call mensaje dato End Sub Private Sub UDP_Error ByVal Number As Integer Description As String ByVal Scode As Long ByVal Source As String ByVal HelpFile As String ByVal HelpContext As Long CancelDisplay As Boolean On Error Resume Next 57 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales L
19. WORD buscaMejorOpcion WORD fila WORD columna WORD calculaPeriodo WORD frecuenciaNota WORD comprobarColumna WORD columna WORD fila WORD comprobarDiagonalDerecha void WORD comprobarDiagonallIzda void WORD comprobarFila WORD fila WORD col WORD contadorDiagonalDcha void WORD contadorDiagonalIzda void WORD contadorFila WORD fila WORD JjugadaAutomatica void void jugadaAutomaticaDesplaza void WORD jugadaContrario void BOOL enDiagonalDcha WORD fila WORD columna BOOL enDiagonalIzda WORD fila WORD columna BOOL FichaSeMueve int fila int columna Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 BOOL enDiagonalIzda WORD fila WORD columna comprueba si la celda est en la diagonal izquierda BOOL enDiagonal Izda WORD fila WORD columna BOOL temp FALSE if fila 0 columna 0 temp TRUE if fila 2 columna 2 temp TRUE return temp LE FA BOOL enDiagonalDcha WORD fila WORD columna comprueba si la celda est en la diagonal derecha LE BOOL enDiagonalDcha WORD fila WORD columna BOOL temp FALSE if fila 0 columna 2 temp TRUE if fila 2 columna 0 temp TRUE return temp 69 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 BYTE teclado void
20. a menos GANA EVITAPERDER SIPUEDEGANAR en siguiente turno NOPUEDEGANAR en siguiente turno WORD buscaMejorOpcion WORD fila WORD columna WORD importanciaCasilla NOPUEDEGANAR de la casilla WORD importanciaF NOPUEDEGANAR de su fila WORD importanciaC NOPUEDEGANAR de su columna WORD diagonalIzda NOPUEDEGANAR diagonal IZDA WORD diagonalDcha NOPUEDEGANAR diagonal DCHA calcular importancia de la fila importanciaF comprobarFila fila columna calcular importancia de la columna importanciaC comprobarColumna fila columna comprobar si hay que calcular diagonal izda enDiagonallIzda fila columna diagonalIlzda comprobarDiagonallIzda Dcha f enDiagona l ila col umna diagonalDcha comprobarDiagonalDerecha quedarse con la mejor puntuacion devolver mejor puntuaci n return importanciaCasil quedarse con la mejor diagonal TE comprobar si es mejor Lf esMejorJugada diagonal importanciaCasil l else importanciaCasill a diagonalDcha Izda diagonal a diagonal esMejorJugada importanciaCasil importanciaCasill a la fila Dcha Izda la importanciaF importanciaF comprobar si es mejor If importanciaCasilla la columna la 97 esMejorJugada importanciaCasilla importanciaC a importanciaC
21. antirrebotes tecla teclas fila columna outch tecla eco caracter output r n return tecla Devolvemos la tecla pulsada Siguiente columna Exploraci n finalizada sin encontrar una tecla pulsada Reiniciamos exploraci n Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 1 Metodo que selecciona tipo de Juego devuelve 1 contra la maquina y 2 2 jugadores y 0 si no es seleccion correcta void selTipoJuego BYTE tecla tipoJuego NULO if tecla A tipoJuego UNJUGADOR output r n Juego contra la maquina Comienza ud con fichas X rn if tecla B tipoJuego DOSJUGADORES output r n Juego entre dos jugadores Comienza el jugador X rin return Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 void mostrarMenu void muestra el menu del juego void mostrarMenu void output Elija el tipo de juego desdeado A contra la m quina B entre dos Jugadores selecionar tipo juego do selTipoJuego teclado if tipoJuego 0 output rin Selecci n incorrecta Repita selecci n rin while tipoJuego 0 return Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007
22. del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 2 Diagrama de subsistemas Circuito filtrado y adaptaci n sali j Teclado Re Matricial Monitor Plataforma Terminal Gr fico 3 en raya Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 3 Descripci n del subsistema Hardware Q AURICULARES AMPLIFICADOR FILTRO PASO A DE POTENCIA A BAJO 12 KHz El hardware utilizado en este sistema tiene el objetivo de adaptar la salida de la placa entrenadora de ColdFire a cualquier auricular externo Para ello se realiza en primer lugar una etapa de filtrado en la que se elimina la continua mediante un filtro RC y se elimina los arm nicos de alta frecuencia innecesarios en nuestro sistema A continuaci n se aplica una etapa de amplificaci n tras una previa atenuaci n que nos permita obtener una se al de potencia suficiente sin distorsi n alguna Los m dulos que intervienen ser n detallados a continuaci n 3 1 Filtro RC paso alto de continua Hemos realizado un filtro paso alto mediante la inclusi n de una red RC Si analizamos el circuito por mayas obtenemos operando que la frecuencia de corte es f 1 2 r R C Por lo tanto como nuestro objetivo es eliminar la continua debemos hacer que esta sea lo menor posible para evitar afectar a mi se al Debido a esto escogimos los valores R 100K y C 100uF o
23. el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 5 7 Desarrollo de protocolo de comunicaciones para obtener variables de programa y bloques de memoria en tiempo de ejecuci n mediante m dulo ethernet Por ltimo tras barajar nuevas mejoras se nos ocurri que ya que dispon amos de un canal de comunicaci n de alta velocidad ethernet y un entorno gr fico de alto nivel pod amos realizar algunas tareas de debug desde nuestro PC El micro escuchar a por un puerto distinto al que realiza la interacci n con el juego Los mensajes formateados son interpretados se atiende la petici n y se responde con la respuesta Inicialmente pensamos que pod amos hacernos con el control de la plataforma Podr amos detenerla mediante un STOP y realizar el debug sobre la propia entrenadora pero pronto entendimos que la entrenadora ejecuta un software rundebug que no atiende peticiones del micro de este tipo El micro se parar a pero la entrenadora no se dar a cuenta Por tanto est bamos nicamente limitados a poder visualizar registros y variables Debido a que las variables locales ocupan memoria en tiempo de ejecuci n por como se comporta C solamente podemos acceder a las variables globales que en tiempo de compilaci n tienen asignada una posici n determinada de la memoria Otra opci n del sistema es la de pedir un volcado de un bloque de memoria Para realizar un entorno amigable decidimos ejecutar un xi parse
24. mucho m s tiempo del esperado pero que nos permiti aprender mucho sobre el uso de punteros Logramos escribir una librer a que permit a enviar mensajes UDP Para depurar esta librer a hicimos uso del analizador de red WireShark para poder visualizar los mensajes enviados mostrando la cabecera UDP con todos sus campos como se muestra a continuaci n Ele gdt view Go Capture Analyze Statistis Help WANNA DUXZaA AE 29074 fea Qoiaomx m Eiter Y Expression Clear Apply El Frame 1 65 bytes on wire 65 bytes captured E Ethernet II Src Quantaco_05 5c a0 00 c0 9F 05 5c a0 Dst XaviTech_33 32 01 00 01 38 33 32 01 Internet Protocol Src 192 168 1 36 192 168 1 36 Dst 192 168 0 136 192 168 0 136 version 4 o Header length 20 bytes E Differentiated services Field 0x00 DSCP 0x00 Default ECN 0x00 Total Length 51 Identification 0x063b 1595 Flags 0x00 Fragment offset 0 Time to live 128 Protocol UDP 0x11 Header checksum 0xb182 correct Source 192 168 1 36 192 168 1 36 Destination 192 168 0 136 192 168 0 136 E User Datagram Protocol src Port terabase 4000 Dst Port hbci 3000 Source port terabase 4000 Destination port hbci 3000 Length 31 Che 0x5688 correct d Interactive Simulation 3010 00 33 06 3b 00 00 80 11 bl 82 c0 a8 01 24 c a8 00 88 Of a0 Ob b8 00 1f 56 38 HET TE o 20 4a 55 45 47 4f 20 33 20 454e 20 52 41 59
25. que se pueden obtener del MCF5272 puesto que en l se tratan todos los temas b sicos que caracterizan a dicho controlador 7 Hoja de caracter sticas del LM386 y LM356 8 Memoria LCEL a o 2007 2008 9 Dr Sydney Feit TCP IP Arquitectura protocolos e implementaci n con IPv6 y seguridad IP Ed McGraw Hill e Ha sido nuestro libro de referencia para para dise ar las comunicaciones ethernet y consultar la estructura de los datagramas IP UDP y tramas Ethernet 41 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 9 ANEXO I C digo del programa de la primera sesi n tinc fincl defi defi defi defi defi defi defi def 1 lude m5272lib c ude m5272gpio c def 1 def 1 defi defi defi defi FICHAS1 X fichas con las que juega el jugador uno ne NUM_FILAS 4 teclado matricial ne NUM_COLS 4 teclado matricial ne EXCIT 1 ne RETARDOTECLA 1150 ne UNJUGADOR 1 ne DOSJUGADORES 2 ne NULO O valor de retorno nulo ne MAXFILAS 3 filas tablero ne MAXCOLS 3 columnas tablero ne MAXFICHAS 9 max numero fichas en tablero ne VACIO _ celda tablero vacia ne FALSE 0 ne TRUE 1 e e defi defi de BYTE WORD BYTE FICHAS2 O fichas con las que juega la maquina o player2 ne BARRA XM claraci n de variabl
26. sobre el archivo DEP capturando la informaci n relativa a 3 00030000 00000004 D _MBAR E 00030004 00000004 D _SDRAM la posici n de las variables Cada nombre de variable global definida 00030008 00000004 D SRAM 0003000c 00000004 D _EXT_SRAM en nuestro c digo se introduce en un men desplegable tipo 00030010 00000004 D FLASH it m n n ta 00030014 00000004 D _SDRAM_SIZE combo Cada etiqueta tiene asociada una direcci n de memoria 00030018 00000004 D SRAM_SIZE gt an 0003001c 00000004 D _EXT_SRAM_SIZE Como en el archivo DEP no figura el tama o de la variable el 00030020 00000004 D FLASH_SIZE gt gt 00030024 00000068 D timer propio usuario tiene que especificar si se trata de una variable tipo 0003008c 00000004 d cliente 00030090 00000004 d gateway LONG WORD o BYTE 00030094 00000004 d netmask 00030098 00000004 d servidor 0003009c 00000006 d mac 2ixl 000300a2 00000004 d puertoOrigen wa e 00030036 00000004 d offsetUdp 000300aa 00000001 D tecla 23 15 04 08 000300ac 00000002 D tipoluego 73 18 04 2008 000300ae 00000004 D finTurno E entonro 000300b2 00000004 d puertoDestino3R ethernet D00300b6 00000004 d puertoEscucha3R 000300ba 00000004 d puertoEscuchaDEBUG 000300be 00000004 d TMRO_ON 000300c2 00000004 d TMRO_OFF 000300c6 00000004 d TMR1_CONF 000300ca 00000004 d TMR1_ON 000300ce 00000004 d TRR1_CONF 00030042 00000066 d melodia Nombre de 00030138 00000066 d tiempoMelodia archiv
27. 2008 1 metodo inicial de la platafora ENT void bucleMain void BOOL fin FALSE BOOL eleccion FALSE comprueba que se eligio oAoB do mensaje inicial SUEPUE TANE AA Juego de Tres en Raya RRA RARA RARA RA Ap mostrarMenul iniciaTablero muestraTablero jugarPartidal otra partida output ArAN XXXXXX X ERES UN PASTOR OTRA PARTIDA A SI B NO KARA RA TA NM fin FALSE eleccion FALSE do if teclado B fin TRUE eleccion TRUE else if teclado A output AXrinEleccion Incorrectalrin eleccion TRUE jwhile eleccion FALSE while fin FALSE exit 0 fin bucleMain Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 AT void __init void Descripci n Funci n por defecto de inicializaci n del sistema void _ init void Definici n de rutinas de atenci n a la interrupci n Es necesario definirlas aunque est n vac as void rutina_intl void void rutina_int2 void void rutina_int3 void void rutina_int4 void void rutina_tout0 void void rutina _toutl void void rutina_tout2 void void rutina_tout3 void 47 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nico
28. 301 16998459 18 5530045 39 5211964 90 137 014114 158 676314 167 975301 169 98459 Filtro Sallen Key 12kHz 20 0 45 0 T T 90 3 J 5 3 3 o 4 135 Y la 40 180 60 225 100 1000 10000 100000 Frecuencia Hz Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 3 3 Amplificador de Potencia Para evitar saturar la salida del operacional del filtro anterior hemos equipado al receptor con un amplificador de potencia que sea capaz de generar los niveles requeridos por los auriculares Mediante un potenci metro somos capaces de controlar la ganancia de dicho amplificador aunque por tratarse de ganancia lineal y no logar tmica apenas es apreciable por el o do humano Para la construcci n de este amplificador hemos utilizado el esquema propuesto por el fabricante con el integrado del LM386 con los valores expuestos en el siguiente diagrama 10V Q 220uF 3 4 Filtrado de la alimentaci n Las alimentaciones han sido convenientemente filtradas para evitar perturbaciones en la alimentaci n de los circuitos De este modo cada fuente 10 y 10 Vcc dispone justo a su entrada de un conjunto de 3 condensadores de 100uF electrol tico 1uF poli ster y 5pF cer mico que filtran los ruidos que por sus l neas se pudieran inducir
29. 4 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 comprobar diagonal IZDA if contadorDiagonallzda 3 return TRUE comprobar diagonal DCHA if contadorDiagonalDcha 3 return TRUE 17 Subrutina compruebaVictoria Variables de Entrada void Variables de Salida BOOL Retorna TRUE si el turnoActual ha ganado la partida por fila o por columna o por diagonal y env a por udp tiempo de turno restante 0 18 Subrutina esCeldaCentral Variables de Entrada WORD fila WORD columna Variables de Salida BOOL Retorna TRUE si es la celda central es decir if fila 1 amp amp columna 1 19 Subrutina esCeldaValida Variables de Entrada WORD fila WORD columna Variables de Salida BOOL Comprobar que la celda est en l mites retorna TRUE si es una celda del tablero es decir if fila gt 0 amp amp columna gt 0 amp amp fila lt 3 amp amp columna lt 3 20 Subrutina esCeldaVacia Variables de Entrada WORD fila WORD columna Variables de Salida BOOL Retorna TRUE si es una celda vac a es decir if tablero fila columna VACIO 21 Subrutinas comprobarfila comprobarColumna Variables de Entrada WORD fila WORD columna Variables de Salida WORD importancia Estas dos subrutinas funcionan igual retornan la importancia de la casilla seg n la fila o la columna respectivamente con el siguiente orden de prioridad
30. 67469553 pF Y 167 469553 nF 17 a 0707106781 Adim 8 fo 12000 Hz 9 10 n 2 11 nC 3 34939E 10 F 0 00033494 uF 0 334939106 pF Y 334 939106 nF 12 13 C 1 5E 09 F 0 0015 uF 15 pF 1500 nF 14 K 2 15 m 1 16 R 6252 19664 17 f0 1339 756423 18 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 En el siguiente esquema mostramos el circuito resultante con los datos obtenidos 3 3nF Hec Yin Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 A continuaci n realizamos una simulaci n en Pspice con los siguientes resultados 1 SCHEMATICI bias PSpice bias dat active 1513 a Ele Edt view Simulation Trace Plot Tools Window Help p la bus Bros i SCHEMATICI bias la x l nm QIRA gt i M t y E A 5 A gt t A A F a e ECEE z 1 0KHz 10KHz 1 o P v u16 0U0T Z DB U UV16 0UT 100KHz 1 0MHz Frequency E bias dat act Una vez dise ado y montado el filtro realizamos las medidas en el laboratorio La forma de trabajar es la que aprendimos LCEL Aislamos el filtro del resto de elementos circuitales Conectamos a la entrada una se al sinoidal con una tensi n Vinpp usando el generador de funciones y variamos su frecuencia seg n la medida a realizar A la entra
31. CI N PC 36 5 7 DESARROLLO DE PROTOCOLO DE COMUNICACIONES PARA OBTENER VARIABLES DE PROGRAMA Y BLOQUES DE MEMORIA EN TIEMPO DE EJECUCI N MEDIANTE M DULO ETHERNET 37 6 PRINCIPALES PROBLEMAS ENCONTRADOS 39 7 MANUAL DE USUARIO 40 8 BIBLIOGRAF A 41 9 ANEXO I C DIGO DEL PROGRAMA DE LA PRIMERA SESI N 42 10 ANEXO II C DIGO DEL PROGRAMA DEL PROYECTO FINAL 48 10 1 CODIGO VISUAL BASIC APLICACI N 3 EN RAYA 48 10 2 CODIGO VISUAL BASIC APLICACI N TERMINAL UDP 62 10 3 CODIGO APLICACI N 3 EN RAYA COLDFIRE 3RAYA LIB 64 10 4 CODIGO APLICACI N 3 EN RAYA COLDFIRE 3RAYA LIB 110 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 4 Introducci n El objetivo de la pr ctica a nuestro modo de entender es familiarizarse con un entorno de trabajo basado en el microcontrolador estudiado en la asignatura SEDG enfrentarse a los problemas reales en la programaci n de microcontroladores y solucionar de una manera eficiente los problemas planteados para cumplir con los objetivos marcados en el plazo fijado El objetivo de la pr ctica era el de desarrollar un sistema que fuera capaz de jugar al tres en raya con dos modalidades de juego Contra la m quina y modo 2 jugadores En este apartado lo m s dif cil ha sido implementar un algoritmo eficiente para la jugada autom tica por parte de la m quina Adem s se ped a una implementaci n musical mediante el uso de temporizadores y una adap
32. Dcha 3 return TRUE return FALSE Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 BOOL compruebaVictoria void Ll retorna TRUE si el turnoActual ha ganado la partida Ef BOOL compruebaVictoria void if victoriaEnFila enviaUdp 20 4 puertoDestino3R enviar tiempo de turno restante return TRUE H f victoriaEnColumna enviaUdp 20 puertoDestino3R enviar tiempo de turno restante return TRUE pe f victoriaEnDiagonal enviaUdp 204 puertoDestino3R enviar tiempo de turno restante return TRUE return FALSE BOOL esCeldaCentral WORD fila WORD columna retorna TRUE si es la celda central BOOL esCeldaCentral WORD fila WORD columna if fila 1 amp amp columna 1 return TRUE jelse return FALSE 78 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 1 BOOL esCeldaValida WORD fila WORD columna comprobar que la celda est en limites retorna TRUE si es una celda del tablero Z BOOL esCeldaValida WORD fila WORD columna comprobar que la celda est en limites if fila gt 0 amp amp columna gt 0 amp amp fila lt 3 columna lt 3 return TRUE jelse return FALSE
33. F 27 CC 70 F8 F7 FE 37 CC 31 E4 3B C7 sHgo ips p7118 C Turno del jugador 1 00031810 38 6C B3 EC FL DC 32 71 35 DF 7A 44 43 F8 56 CE 1 1802450 DCaV Turno del jugador 2 00031820 B1 94 F1 DD 73 05 39 1C 11 CE 36 58 77 C4 13 90 B s 9 16xwk c 00031E30 33 OE 33 CC 19 8C 77 CO 2E DD 73 CC 31 DC F3 84 3 31 G si1i AAA AA TIEMPO RESTANTE DE TURNO 08 8 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 6 Principales problemas encontrados Inicialmente nos hemos enfrentado a los t picos problemas normales en la iniciaci n de un nuevo entorno y sobre todo en el uso de C La pr ctica b sica no nos ha supuesto problemas serios A medida que hemos ido implementando mejoras nos hemos enfrentado a problemas de mayor ndole Aprender a manejar las estructuras con punteros que utilizaban las librer as de ethernet no fue tarea f cil Tambi n en la mejora que incluye un entorno de debugging nos hemos enfrentado con problemas de conversi n de tipos manejo de caracteres ASCII y su conversi n para direccionamientos de memoria conversi n hexadecimal a decimal etc En cuanto a problemas puntuales queremos destacar los siguientes Despu s de estar probando una librer a ethernet y ver que no funcionaba vimos que el problema radicaba en el cable RJ45 interno de la plataforma Estaba suelto el terminal que conecta en el circuito que integra el microcontrolador Se nos p
34. Ji cambia una nota de la melodia de Ganador El void cambiaNotaGanador void notaActual duracionTotalNotaActual duracionNotaActual 0 if notaActual gt MAX_TONOS_GANADOR 1 Parar la melodia suenaGanador FALSE ajustaTimer0 0 else ajustaTimer0 calculaPeriodo melodiaGanador notaActual void cambiaNotaPerdedor void LJ cambia una nota de la melodia de Ganador void cambiaNotaPerdedor void notaActual duracionTotalNotaActual duracionNotaActual 0 if notaActual gt MAX_TONOS_PERDEDOR 1 Parar la melodia suenaPerdedor FALSE ajustaTimer0 0 else ajustaTimer0 calculaPeriodo melodiaPerdedor notaActual 106 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 void cambiaNota void Ji cambia una nota de la melodia de fondo void cambiaNota void notaActual duracionTotalNotaActual duracionNotaActual 0 if notaActual gt MAX_TONOS_MELODIA 1 volver al inicio de la melodia notaActual 0 duracionTotalNotaActual 0 reprogramar timer con la nueva tecla ajustaTimer0 calculaPeriodo melodia notaActual void _ init void Funcion por defecto de inicializaci n del sistema Le iniciar udp iniciarUdp
35. LS tablero de partida WORD numeroFichas numero fichas en el tablero WORD numeroFichasMaquina WORD numFila numColumna fila y columna seleccionada WORD turnoActual n de jugador que tiene su turno WORD tiempoTurno n de ms desde inicio del turno BOOL finTurno FALSE flag para interrumpir el proceso normal de un turno Tout20 seg comunes para las 3 melodias WORD notaActual puntero de melodia que marca frecuencia de la nota que se est reproduciendo WORD duracionNotaActual tiempo que la nota lleva reproduciendose ms WORD duracionTotalNotaActual puntero que marca la duraci n total de la nota que debe reproducirse ms flags BOOL suenaPerdedor true se reproduce melodia perdedor BOOL suenaGanador BOOL suenaMelodia true se reproduce melodia fondo BOOL mensajeUdpRx true cuando se ha recibido un mensaje consatantes uego 3raya eticiones juego 3raya uU O vr un peticiones DEBUGGER UDP TRRO MCF_OSC FACTOR_TMRO frec nota en Hz tatic int puertoDestino3R 3000 puerto destino para envio UDP tatic int puertoEscucha3R 4000 puerto en el que escuchamos tatic int puertoEscuchaDEBUG 5000 puerto en el que escuchamos LONG static TMRO_CONF 0x2F2C 2F2C RST 0 CLK 10 FRR 1 ORI 0 OM 1 CE 00PS 2F 47 CONFIGURADO LONG static TMRO_ON 0x2F2D 2F2D
36. Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 IT BOOL colocarFichaOrdenador WORD importancia IF Este m todo busca en todas las celdas vacias del tablero una celda con la importancia que se le ha pasado como Z parametro Si la encuentra inserta la ficha y finaliza Si no encuentra ninguna celda con esa importancia devuelte VA FALSE ES BOOL colocarFicha WORD importancia BOOL insertada FALSE recorro el tablero WORD i j for 1 0 i lt MAXFILAS amp amp linsertada 1 for j 0 j lt MAXCOLS 8 insertada J if tablero i 3 VACIO buscar la maxima importancia para esa celda si es igual a la buscada se inserta la ficha if buscaMejorOpcion i 3j importancia insertarFicha i j insertada TRUE return insertada void copiaArray BYTE array copia el array leerArray en copiarArray void copiarArray BYTE leerArray MAXFILAS MAXCOLS BYTE copiarArray MAXFTILAS MAXCOLS recorro el tablero WORD i j for i 0 i lt MAXFILAS i for j 0 j lt MAXCOLS 3J copiarArray i j leerArray i j return Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 WORD jugadaAutomatica void AL retorna la importancia con
37. ORD j contar las fichas en esa fila for j 0 j lt MAXFILAS j if tablero j columna simbolo turnoActual contador return contador 74 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 WORD contadorFila WORD fila retorna n de fichas del turnoActual en la fila WORD contadorFila WORD fila WORD contador 0 cuenta las fichas del jugador en el segmento a analizar WORD j contar las fichas en esa fila for j 0 j lt MAXCOLS j if tablero fila j simbolo turnoActual contador return contador WORD contadorDiagonallzda void retorna n de fichas del turnoActual en la diagonal izquierda WORD contadorDiagonalIzda void WORD contador 0 cuenta las fichas del jugador en el segmento a analizar if tablero 0 0 simbolo turnoActual contador if tablero 1 1 simbolo turnoActual contador if tablero 21 2 simbolo turnoActual contador return contado 75 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 1 WORD contadorDiagonalDcha void retorna n de fichas del turnoActual en la diagonal derecha WORD contadorDiagonalDcha void WORD contador 0 cuenta las fichas del jugador en el segmento a analiz
38. RST 1 CLK 10 FRR 1 ORI 0 OM 1 CE 00 PS 2F 47 FUNCIONANDO LONG static TMRO_OFF 0x2F2C 2F2C RST 0 CLK 10 FRR 1 ORI 0 OM 1 CE 00 PS 2F 47 PARADO Y CONFIGURADO QI PS 18 24 CONFIGURADO LONG static TMR1_ON 0x181D RST 1 CLK 10 FRR 1 ORI 1 OM 0 CE 00 PS 18 24 FUNCIONANDO LONG static TRR1_CONF 0xA5 A5 165 cuentas de TMR1 EXACTO WORD static FACTORTMR0 1536 decalado total del contador TMRO 2F2C frecs de las notas de la melodia de fondo 65 7 LONG static TMR1_CONF 0x181C RST 0 CLK 10 FRR 1 ORI 1 OM 0 CE 00 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 WORD static melodia MAX_TONOS_MELODIA 784 784 784 1047 1047 1568 0 1568 1760 15 68 1397 1568 0 784 784 184 1047 1047 1568 0 1568 1760 1568 1397 1760 1568 0 1047 1047 1047 1976 1568 1047 1047 1047 1047 0 duracion de cada nota de melodia de fondo WORD static 1047 1047 1976 1568 1047 1047 1047 1976 1760 1976 2093 1047 1047 104 tiempoMelodia MAX_TONOS_MELODIA 166 166 166 333 166 666 166 166 111 83 166 1333 166 1 66 166 166 333 166 666 1 66 166 11 66 166 166 1 83 166 166 444 333 166 166 166 444 222 1 444 222 166 166 1 WORD static melodiaGanador de la melodia del WORD static timeMel
39. SED curso 2007 2008 Resume Next End Sub Private Sub UDPDEBUGGER_DataArrival ByVal bytesTotal As Long Dim dato As String On Error Resume Next UDPDEBUGGER GetData dato Me Textl Text Time S dato Call mensajeDebugger dato End Sub Private Sub variable Click Combo2 ListIndex variable Listindex Combo3 ListIndex variable Listindex Combo4 ListIindex variable Listindex DIRECCION Caption UCase Combo4 Text tipo Caption Combo2 Text Me valorvariable Caption 222272727772 End Sub Private Sub variablerefresh_Click formato envio peticiones lfdirmemtlong dir 8 bytes long 8 bytes TEXTO 1 Me DIRECCION Caption amp 4 Select Case Me MTIPO ListIndex Case 0 byte TEXTO TEXTO amp 00000001 Case 1 word TEXTO TEXTO amp 00000002 Case Else word TEXTO TEXTO amp 00000004 End Select Me UDPDEBUGGER RemotePort 5000 Me UDPDEBUGGER RemoteHost 192 168 1 20 Me UDPDEBUGGER SendData TEXTO End Sub Private Sub X_MouseDown Index As Integer Button As Integer Shift As Integer X As Single Y As Single Dim tecla As String para controlar el movimiento del control tmpX X Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 tmpY Y enviar ficha para mover Select Case Me X Index Top Case 480 Selec
40. SendData TEXTO End Sub Private Sub celda_Click Index As Integer Dim tecla As String tecla Chr Index Asc 0 Me UDP SendData tecla End Sub Private Sub Combol_Change End Sub Private Sub Commandl_KeyPress KeyAscii As Integer 53 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 Me UDP SendData Chr KeyAscii End Sub Private Sub Command2_Click formato envio peticiones lfdirmemtlong dir 8 bytes long 8 bytes TEXTO Aj 5000 192 168 1 20 Me UDPDEBUGGER RemotePort Me UDPDEBUGGER RemoteHost Me UDPDEBUGGER SendData TEXTO End Sub Private Sub Form_KeyDown KeyCode As Integer Shift As Integer Me UDP SendData Chr KeyCode End Sub Private Sub Form_Load Me UDPDEBUGGER RemoteHost 192 168 1 20 UDP RemoteHost 192 168 1 20 UDP Bind 3000 UDPDEBUGGER Bind 5000 incializar tiempo de los turnos tiempoJugadorl 0 tiempoJugador2 0 inicializar datos de la grafica Me grafica Plot Axis VtChAxisIdY ValueScale Auto False CARGAR COMBO TIPOS DE VARIBALES Me MTIPO Addltem Byte Me MTIPO AddlItem Word Me MTIPO Addltem Long Me MTIPO ListIindex 0 End Sub Sub ajustaTimer dato As String tiempo Val Mid dato 2 Len dato 1 If tiempo gt O And tiempo lt 20001 Then tOut tiempo Me Timer1 Enabled True End If E
41. TE tempTablero MAXFILAS MAXCOLS mejorTablero MAXFILAS MAXCOLS BYTE tempNumFichas numeroFichas WORD i j copiarArray tablero tempTablero hacer copia del tablero cambiaJugador jugar simulando ser el jugador para ver si gana recorrer el tablero for i 0 i lt MAXFILAS i for j 0 j lt MAXCOLS j copiarArray tempTablero tablero cada vez jugamos con las posiciones iniciales del turno numeroFichas tempNumFichas probar jugada en todos las celdas donde hay fichas de la maquina if tablero i j simbolo turnoActual quitarFicha i j importanciaNueva jugadaAutomatica if esMejorJugada mejorImportancia importanciaNueva copiarArray tablero mejorTablero mejorImportancia importanciaNueva cambiaJugador jugar simulando ser el jugador para ver si gana copiarArray tempTablero tablero restaurar copia del tablero return mejorlImportancia 102 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 void ajustaTimerl void Al Inicializa la interrupcion del Timerl y arranca el timerl void ajustaTimerl void ajustar TMR1 para 1 ms RST 0 mbar_writeShort MCFSIM_TMR1 TMR1_CONF poner a 0 el valor de la cuenta TCNO 0 cualquier valor pone a 0 mbar_writeShort MCFSIM_TCN I ajustar valor comparacion de la cuenta m
42. Variables de Salida BOOL Variables globales WORD numeroFichasMaquina Comprueba si tiene que desplazar o insertar ficha mirando si hay 3 fichas de la m quina en el tablero 18 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 29 Subrutina jugadaJugador Variables de Entrada void Variables de Salida void Variables globales BOOL finTurno Jugada de un Jugador e Hacemos copia de seguridad del tablero y del n mero de fichas en el tablero e Hacemos un flag fallo que nos avisa si ha habido alg n error insertado o quitando alguna ficha e Bucle do while hasta que se ejecute todo correctamente Si hay que desplazar ficha pedimos selecci n de ficha a mover y llamamos a leerCelda para capturar la selecci n Si no ha acabado el tiempo de nuestro turno y no ha habido error al quitar la ficha fallo FALSE e Mostramos el tablero y pedimos donde poner la ficha e Capturamos la selecci n y actualizamos fallo por si ha habido error al insertar en la celda Si no hay que desplazar ficha porque todav a no est n las seis fichas en el tablero pedimos selecci n de ficha a mover y llamamos a leerCelda para capturar la selecci n y actualizamos el valor de fallo por si ha habido error al insertar en la celda Si ha habido fallo porque hallamos insertado en una celda que no podemos e La jugada es incorrecta y pedimos repetir la jugada e Recuperamos el tablero
43. XCOLS WORD importancia no se usa no se detecta posibl if desplazar almacenar tablero inicial copiarArray tablero tempTablero jugadaAutomaticaDesplaza else importancia jugadaAutomatica le fallo de la maquina hacer copia del tablero return Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 1 void jugarTurno void juega un turno de turnoActual indicando por pantalla quien realiza el movimiento void jugarTurno void tiempoTurno 0 Inicializar tiempo del turno if numeroFichas gt 1 enviaUdp 220000 puertoDestino3R enviar tiempo de turno restante finTurno FALSE inicializar flag switch tipoJuego case 1 1 jugador contra la maquina switch turnoActual case 1 turno del jugador output rin Su turno rn enviaUdp 0Su turnotttt puertoDestino3R jugadaJugador break case 2 Turno de la maquina output r nTurno de la maquina r n enviaUdp 0OTurno de la maquina tti puertoDestino3R jugadaMaquina break break case 2 2 jugadores if turnoActual 1 output r n Turno del jugador lir1n jelse output r n Turno del jugador 21r1n if turnoActual 1 enviaUdp OTurno del jugador 14 puertoDestino3R jelse enviaUdp OTurno del jugador 24 puertoDestino3R jugadaJugador r
44. a del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 void EscuchaUdp int puerto long rutina Escuchar en puerto rutina apunta a la direccion de la rutina de atencion udp_bind_port puerto rutina void recibeUdp3R NIF nif NBUF pNbuf int hdr_offset int finBucle i fin del bucle extraccion datos char pchar puntero al inicio de la cadena udp_frame_hdr udpframe accedieno a la memoria compartida deshabilitar interrupciones asm_set_ipl 6 udpframe udp_frame_hdr peNbuf gt data hdr_offset pchar char udpframe extraer trama UDP de pNbuf ajustar fin del bucle if pNbuf gt length gt MAXMENSAJEUDP finBucle MAXMENSAJEUDE else finBucle pNbuf gt length bucle extraccion de datos for i 0 i lt finBucle 1 bufferUdpRX i pchar il a adir fin de mensaje por si no lo tenia i bufferUdpRX i i bufferUdpRX i marcar flag mensaje recibido mensajeUdpRx TRUE asm_set_ipl 0 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 void recibeUdpDebugger NIF nif NBUF pNbuf int hdr_offset char pchar puntero al inicio de la cadena int finBucle fin del bucle extraccion datos udp_frame_hdr udpframe accedi
45. aquina Comienza ud con fichas X Su turno Turno de la maquina Su turno AAA EA TIEMPO RESTANTE DE TURNO 16 5 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 5 4 Uso del m dulo ethernet e implementaci n de una librer a UDP La nica documentaci n disponible para el uso del m dulo ethernet era una aplicaci n TFTP Encontramos tambi n librer as para el Coldfire de todo tipo de protocolos UDP TCP SNMP DHCP etc pero el software era licenciado y por tanto lo descartamos El servidor TFTP no nos parec a la mejor opci n para nuestro desarrollo No era ni mucho menos la soluci n m s natural pero si en cambio era la de m s f cil implementaci n Nos obligaba a tener que instalar un servidor FTP Solaris Sin embargo por lo que fue descartado fue porque quer amos que el terminal pudiese funcionar como si de una aplicaci n local se tratase sin demoras entre la intervenci n del usuario y la respuesta del coldfire Un usuario puede llegar a generar m ltiples eventos en un lapso de tiempo muy corto Antes de que se produzca un nuevo evento se ha de haber recibido respuesta del anterior Finalmente optamos por desarrollar nuestra propia librer a UDP ramos programadores novatos en C y la aplicaci n TFTP utilizaba complejas estructuras de punteros y datos Fue una tarea muy complicada llegar a entender el funcionamiento de la aplicaci n en la que invertimos
46. ar if tablero 0 2 simbolo turnoActual contador if tablero 1 1 simbolo turnoActual contador if tablero 2 1 0 simbolo turnoActual contador return contador BOOL victoriaEnFila void retorna TRUE si el turnoActual ha ganado por filas EL BOOL victoriaEnFila void WORD i mirar victoria por 3enraya en alguna fila for i 0 i lt MAXFILAS i contar las fichas en esa fila y ver si hay 3 if contadorFila i 3 return TRUE como no se detecto victoria en filas develve FALSE return FALSE 76 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 1 BOOL victoriaEnColumna void retorna TRUE si el turnoActual ha ganado por columnas BOOL victoriaEnColumna void WORD j mirar victoria por 3enraya en alguna columna for j 0 j lt MAXCOLS j contar las fichas en esa columna y ver si hay 3 if contadorColumna 3 3 return TRUE como no se detecto victoria en columnas develve FALSE return FALSE DE BOOL victoriaEnDiagonal void 1 retorna TRUE si el turnoActual ha ganado por diagonales IR BOOL victoriaEnDiagonal void comprobar diagonal IZDA if contadorDiagonallzda 3 return TRUE comprobar diagonal DCHA if contadorDiagonal
47. ar si el jugador en el siguiente turno puede ganar la partida por haber desplazado una ficha que evitaba perder nota dentro del codigo comprobar que aunque es una buena jugada evita que al haber desplazado la ficha el nuevo hueco libre sirva para que gane el jugador retorna importancia de la jugada void jugadaAutomaticaDesplaza void WORD mejorImportancia mejor importancia conseguida hasta el momento WORD importanciaNueva importancia de la ultima jugada WORD temp BYTE tempTablero MAXFILAS MAXCOLS mejorTablero MAXFILAS MAXCOLS BYTE tempNumFichas numeroFichas WORD i j copiarArray tablero tempTablero hacer copia del tablero copiarArray tablero mejorTablero inicializar mejortablero con actual recorrer el tablero mejorImportancia 1 importanciaNueva 1 for i 0 i lt MAXFILAS 1 for j 0 j lt MAXCOLS 3J copiarArray tempTablero tablero cada vez jugamos con las posiciones iniciales del turno numeroFichas tempNumFichas probar jugada en todos las celdas donde hay fichas de la maquina if tablero il j simbolo turnoActual almacenar la ficha que se quita para falsos EVITAPERDER la maquina no moveria en esta caso si no puede ganar if FichaSeMueve 1 3 TRUE quitarFicha i j importanciaNueva jugadaAutomatica 100 Memoria del proyecto desarrollado en el Labora
48. as numeroFichas do fallo FALSE if desplazar output Seleccione la ficha a mover 1rin leerCelda si hay timeout no mostrar resto de mensajes if finTurno FALSE fallo quitarFicha numFila numColumna if fallo output Seleccione donde poner la ficha irin leerCelda si no hay un error insertar ficha fallo insertarFicha numFila numColumna jelse insertar ficha output Seleccione donde poner la ficha r n leerCelda fallo insertarFicha numFila numColumna comprobar si ha habido fallo if fallo if finTurno FALSE output Jugada Incorrecta Repita su jugadalr1n enviaUdp OJugada Incorrecta Repita su jugada t puertoDestino3R dejar el tablero como estaba antes de jugar copiarArray tempTablero tablero numeroFichas tempNumFichas muestraTablero while fallo amp finTurno FALSE if finTurno TRUE output Ha expirado su tiempo Pierde el turno r n enviaUdp 0Ha expirado su tiempo Pierde el turno puertoDestino3R copiarArray tempTablero tablero numeroFichas tempNumFichas return 89 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 void jugadaMaquina void jugada de la Maquina void jugadaMaquina void BYTE tempTablero MAXFILAS MA
49. bar_writeShort MCFSIM_TRR1 TRR1_CONF borrar REF en TER1 tambien borra PI en ICR1 arrancar TMR1 RST 1 mbar_writeLong MCFSIM_ICRI PARA CONSEGUIR PI 0 habilitar interrupciones sti mbar_writeShort MCFSIM_TERI escribiendo 1 configurar interrupciones timerl 3 poner a 0 cap y ref mbar_writeShort MCFSIM_TMR1 TMR1_0ON en ICRI 0x88888B88 103 TIMER1 IPL 3 Y PI 1 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 void ajustaTimerO0 WORD ttr Reprogama el timer para reproducir una nueva nota el timer0 NO INTERRUMPE void ajustaTimer0 WORD trr ajustar nuevo reg de referenica 1 trr 0 nota de frec 0 Parar timer mbar_writeShort MCFSIM_TMRO TMRO_OFEF else parar hasta reajuste del timer y configurarlo bar_writeShort MCFSIM_TMRO TMRO_OFF poner a 0 el valor de la cuenta TCNO bar_writeShort MCFSIM_TCNO 0 cualquier valor pone a 0 ajustar nuevo TRR bar_writeShort MCFSIM_TRRO trr arrancar timer bar_writeShort MCFSIM_TMRO TIMRO_ON 3x3Nx3B gt x3 1 WORD calculaPeriodo WORD frecuenciaNota E Sirve para cacuclar el nuevo periodo del timer0 para fd generar la onda cuadrada AA frecuenciaNota frecuencia del tono de la nota Retorna el valor
50. bteniendo una frecuencia de corte de f 0 016Hz A continuaci n mostramos el circuito equivalente Vin out LS 100pF Ri 100K Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 3 2 Filtro Paso Bajo de arm nicos de alta frecuencia En nuestra placa hemos empleado un filtro Paso Bajo de Sallen Key de segundo orden para eliminar los arm nicos en alta frecuencia generados por la onda cuadrada Por consiguiente el esquema de nuestro filtro es el siguiente Seg n las especificaciones del enunciado de la pr ctica de LCEL Calculamos la funci n de transferencia E En Am Ay Ss S 1 o 00 Si escribimos la f rmula gen rica de la funci n de transferencia de dos polos en t rminos simples operamos e identificamos con la expresi n anterior comprobamos que el circuito tiene 2 polos justo en la frecuencia de corte Adem s tambi n de esta expresi n podemos obtener tanto el valor de Q como el de fo 1 y mn a a 27 4MNRC m gt 1 Siguiendo las indicaciones del enunciado calculamos los valores para el comportamiento deseado El Microsoft Excel Copia de SALLENKEY1 2KHz xls Archivo Edici n Yer Insertar Formato Herramientas Datos Ventana DSASs e z 2 ma gt oral 10 N xs 22ml E o 48 D7 z fe Adim A B C D E F G H y 1 2 FILTRO SALLEN KEY 3 4 5 R 56000 ohrrs 6 C 16747E 10 F 000016747 uF 0 1
51. cion TRUE insertada correctamente y FALSE no insertada ES BOOL insertarFicha WORD fila WORD columna comprobar que el primer jugador inserta en el centro if numeroFichas 0 if lesCeldaCentral fila columna no se ha puesto en el centro siendo la primera ficha return FALSE comprobar que est en dentro de los limites if lesCeldaValida fila columna return FALSE comprobar que la celda est vac a if esCeldaVacia fila columna tablero filal columna simbolo turnoActual numeroFichas if turnoActual 2 numeroF ichasMaquina return TRUE else return FALSE Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 BOOL quitarFichaValido WORD fila WORD columna retorna codigo operacion TRUE se puede quitar la ficha BOOL quitarFichaValido WORD fila WORD columna comprobar que pertence al tablero if esCeldaValida fila columna comprobar que la celda contiene una ficha del jugador if tablero fila columna simbolo turnoActual comprobar que no es la celda central if esCeldaCentral fila columna return TRUE return FALSE BOOL quitarFicha WORD fila WORD columna quita una ficha del tablero verificando que se quita una
52. da conectamos una sonda del osciloscopio y a la salida otra Ajustamos la frecuencia deseada y verificamos que el valor de la entrada no ha variado Medimos la amplitud de salida Atenuacion 20 log Kes dB in Para los c lculos de la fase hacemos uso del modo XY del osciloscopio para representar las figuras de Lissajous Aparece una elipse El corte con el eje y de la elipse centrada es la medida a la proyecci n del m ximo de la elipse sobre este mismo eje es la medida b Mediante la f rmula b Fase aresend Jrad a Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 Para facilitarnos la tarea simplificar los c lculos y disminuir la acumulaci n de errores el registro de las medidas se realiza directamente sobre Excel Una vez finalizada la adquisici n de datos generamos la gr fica correspondiente Puesto que el O no existe en la escala logar tmica aproximamos por 0 01 para poder representar mejor el diagrama de Bode AA 12KHz xls Archivo Edici n Yer Insertar Formato Herramientas Datos Ventana 2 DEH gmo Mz Ai M8 gt ara S ES E 00 8 X 2 2 2 2 145 0 489 0 139 0 0469 0 0 2 79323987 12 2344227 23 1603039 35 5197038 39 0657813 7 1 15 8 5 4 22 1 22 22 24 23 0 32381102 0 689775 157079633 0 75024524 0 37216853 0 20987059 0 17480188 18 5530045 39 5211964 90 429858861 21 3236863 12 0246992 18 5530045 39 5211964 90 137014114 158676314 167975
53. de comparacion del timer TRRO T 1 2f WORD calculaPeriodo WORD frecuenciaNota LONG temp if frecuenciaNota 0 return 0 hay que parar timer else 66 10 6 2 16 48 66 10 6 1536 FACTOR_TMRO temp LONG FACTOR_TMRO LONG frecuenciaNota temp MCF_CLK temp return WORD temp 104 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 void toutMelodia void A Gestiona la melodia de fondo Si debe cambiar de nota llama a cambianota void toutMelodia void if duracionNotaActual gt tiempoMelodia duracionTotalNotaActual cambiaNotal void 1 Ges Si toutPerdedor void tiona la melodia del perdedor debe cambiar de nota o pararse llama a cambiaNotaPerdedor void toutPerdedor void if duracio nNotaActual gt timeMelodiaPerdedor duracionTotalNotaActual cambiaNotaPerdedor void toutGanador void Gestiona la melodia del ganador Si debe cambiar de nota o pararse llama a cambiaNotaGanador void toutGanador void if duracionNotaActual gt timeMelodiaGanador duracionTotalNotaActual cambiaNotaGanador 105 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 void cambiaNotaGanador void E
54. e Mo e al void i nit void void aju void aju void buc void cambiaJ void cambiaJ void cambiaN void cambiaN void cambiaN tadorColumna WORD columna simbolo WORD jugador teclado void staTimer0 WORD trr staTimerl void leMain void ugador ugadorUdp void ota void ot ot void taGanador void taPerdedor void void copiarArray BYTE leerArray MAXFILAS MAXCOLS BYTE copiarArray m MAXFILAS MAXCOLS void iniciaMelodia void void iniciaMelodiaGanador void void iniciaMelodiaPerdedor void void iniciaTablero void void jugadaJugador void void jugadaMaquina void void jugarPartida void void jugarTurno void void leerCelda void void mostrarMenu void void muestraTablero void void rutina_intl void void rutina_int2 void void rutina_int3 void void rutina_int4 void void rutina_tout0 void void rutina _toutl void void rutina_tout2 void void rutina_tout3 void void selT ipoJuego BYTE tecla 67 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 void toutGanador void void toutMelodia void void toutPerdedor void void muestraTableroUdp void
55. e VACIO _ celda tablero vacia define FICHAS1 X fichas con las que juega el jugador uno tdefine FICHAS2 O fichas con las que juega la maquina o player2 tdefine NUMIMPORTANCIAS 6 distintos tipos de importancias mejor jugada automatica define GANA 5 importancia de ganar tdefine EVITAPERDER 4 importancia evitar perder en la proxima tirada tdefine SIPUEDEGANARESQUINA 3 importancia de si poder ganar en proximo turno insertando en una esquina mejor define SIPUEDEGANAR 2 importancia de si poder ganar en proximo turno tdefine NOPUEDEGANARESQUINA 1 importancia de no poder ganar en proximo turno insertando en una esquina mejor fdefine NOPUEDEGANAR 0 importancia de no poder ganar en proximo turno tdefine MAX_TURNO 20000 maximo tiempo ms turno de cada jugador define MAX_TONOS_MELODIA 51 num max de notas de la melodia de fondo con pausa final Hdefine MAX_TONOS_GANADOR 4 num max de notas de la melodia de ganador Hdefine MAX_TONOS_PERDEDOR 4 num max de notas de la melodia de ganador ttdefine FACTOR_TMRO 1536 decalado total del contador con TMRO 2F2C Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 declaraci n de variables BYTE tecla A tecla capturada del teclado WORD tipoJuego 0 1 con la m quina 2 con otro jugador BYTE tablero MAXFILAS MAXCO
56. e implementar dicha conectividad es mediante un cable de red cruzado pines 1 a 3 y 2 a 6 del conector RJ45 El PC deber tener la siguiente direcci n IP en su interfaz de red 192 168 1 36 124 Inicialmente el sistema muestra un mensaje de bienvenida mostrando un men que permite jugar contra la m quina pulsando la tecla A del teclado matricial o del PC o en modo dos jugadores pulsando la tecla B El sistema va informando por pantalla al usuario de la tarea que tiene que realizar y muestra los mensajes de error asociados a las maniobras incorrectas realizadas por este Para poder referirse a una celda o casilla del tablero desde el teclado matricial existe la siguiente relaci n que muestra la tecla asociada a cada celda del tablero dibujada 1 2 3 4 5 6 7 8 9 De esta forma para seleccionar la celda central se deber pulsar 5 Desde el PC se pulsar sobre la celda con el rat n o se arrastrar la ficha que se desee a su destino final Una vez finalizada la partida el sistema pregunta si se desea volver a jugar o finalizar la aplicaci n Desde el PC existen men s adicionales Uno de ellos muestra informaci n estad stica del tiempo de juego y otra despliega un men de depuraci n que permite mostrar variables globales y bloques de memoria Su uso es muy intuitivo Una vez que seleccionamos mostrar depuraci n el programa nos pregunta por la ubicaci n del archivo DEP que deber ser el mismo que el car
57. echa if enDiagonalDcha fila columna diagonalDcha comprobarDiagonalDerecha quedarse con la mejor puntuaci n quedarse con la mejor diagonal if esMejorJugada diagonallzda diagonalDcha importanciaCasilla diagonalDcha else importanciaCasilla diagonallzda comprobar si es mejor la fila if esMejorJugada importanciaCasilla importanciarF importanciaCasilla importanciarF comprobar si es mejor la columna if esMejorJugada importanciaCasilla importanciaC importanciaCasilla importanciaC devolver mejor puntuaci n return importanciaCasilla 37 Subrutina colocarFicha Variables de Entrada WORD importancia Variables de Salida BOOL Este m todo busca en todas las celdas vac as del tablero una celda con la importancia que se le ha pasado como par metro Si la encuentra inserta la ficha y finaliza Si no encuentra ninguna celda con esa importancia devuelve FALSE Para ello creamos una flag booleana BOOL insertada que nos avisa si se ha insertado la ficha en una celda con esa importancia recorremos el tablero con dos for y vemos en las celdas que est n vac as si tienen esa importancia if buscaMejorOpcion i 3j importancia insertarFicha i j insertada TRUE Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 38 Subrutina copiaArray Variables de Entrada BYTE leerArray MAXFILAS MAXCOLS BYTE copiarAr
58. el 6 Ethernet IM_ICRI uso de tTx de nivel 6 0x888888E8 los buffer UDP la red timer_init TIMER_RED TIMER_NETWORK_PERIOD SYSTEM_CLOCK TIMER_NETWORK_LEVEL _prep_ETHRX funci n de atenci n a la _prep_ETHTX aleatorio udp_prime_port uint1 Activar las interrupciones del FEC mbar_writeLong MCFSIM_ICR3 MCF5272_SIM_ICR_ERX_IL FEC_LEVEL Inicializar el dispositivo de red fec_init s fec_nif Poner la direccion MAC en NIF fec_nif hwa 0 mac 0 fec_nif hwa 1 mac 1 fec_nif hwa 2 mac 2 fec_nif hwa 3 mac 3 fec_nif hwa 4 mac 4 fec_nif hwa 5 mac 5 Inicializar buffers de red nbuf_init Inicializar ARP arp_init garp_info nif_bind protocol fec_nif FRAME_ARP void arp_handler void arp_info Inicial izar IP ip_init 8ip_info cliente gateway netmask nif_bind protocol amp fec_ni 6ip_info Inicial udp_init izar UDP Resetear el controlador Ethernet fec_nif reset amp fec_nii fec_nif start fec_nil Util fec_nif hwa 51 6 fec_nif hwa 4 lt lt 8 f FRAME_IP void ip_handler void izar la direccion mac para generar un puerto pseudo Memori
59. el i for i 0 i lt pNbuf gt length 1 pNbuf gt data off setUdp 1 mensajel i Enviar el paquete udp_send fec_nif servidor puertoO0rigen puertodest pNbul Habilitar las interrupciones para poder recibir UDP asm_set_ipl 0 Fh lt se 117 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 puntero apunta al inicio del array de char retorna longitud de la cadena Maxima longitud permitida MAXMENSAJERX int longitud char cadena BOOL fin int contador fin FALSE contador 0 while fin FALSE if cadena contador if cadena contador 1 fin TRUE h if contador gt MAXMENSAJEUDP fin TRUE contador return contador 118
60. emas Electr nicos Digitales LSED curso 2007 2008 AT void mostrarMenu void muestra el menu del juego ES void mostrarMenu void output Elija el tipo de juego desdeado A contra la m quina B entre dos Jugadores enviaUdp 0Elija el tipo de juego desdeado A contra la m quina B entre dos Jugadores 4 puertoDestino3R selecionar tipo juego do selTipoJuego teclado if tipoJuego 0 output rin Selecci n incorrecta Repita selecci n rin enviaUdp OSelecci n incorrecta Repita selecci n puertoDestino3R while tipoJuego 0 return void iniciaMelodia void Arranca el timer0 con la primera nota de la melodia timer0 NO INTERRUMPE void iniciaMelodia void duracionTotalNotaActual 0 puntero notaActual 0 puntero duracionNotaActual 0 tiempo en mseg ajustaTimer0 calculaPeriodo melodia notaActual s s uenaMelodia TRUE uenaGanador FALSE parar resto melodias por si todav a se est n suenaPerdedor FALSE reproduciendo Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 A void iniciaMelodiaGanador void Arranca el timer0 con la primera nota de la melodia timer0 NO INTERRUMPE void iniciaMelodiaGanador void duracionTotalNotaActual 0 puntero notaActual 0 punter
61. en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 void mostrarTablero void Al muestra el tablero void muestraTablero void WORD i j WORD k 0 numero de caracteres de cada linea BYTE mensajel 5 for i 0 i lt MAXFILAS i k 0 for j 0 3 mensaj k mensaj k output men lt MAXCOLS 3 e k tablero i j A saje output r n Mostrar tablero via UDP muestraTableroUdp return 71 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 void muestraTableroUdp void AS Iil envia el tablero por UDP void muestraTableroUdp void As Ine 1 35 char array 12 array 0 1 codigo de envio de tablero recorrer el tablero k 1 for i 0 i lt MAXFILAS i for j 0 j lt MAXCOLS j i array k tablero i k Eads poner fin de la cadena array k k array k enviaUdp amp array 0 puertoDestino3R void iniciaTablero void inicializa el tablero void iniciaTablero vold WORD i j numeroFichas 0 numeroFichasMaquina 0 for i 0 i lt MAXFILAS i for j 0 j lt MAXCOLS j tablero i 3 VACIO return 72 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr n
62. en raya Combol ListIindex 1 End Sub Private Sub UDP_DataArrival ByVal Dim dato As String On Error Resume Next UDP GetData dato Me RECIBIDO Text Me RECIBIDO Text Chr 13 gt dato Me RECIBIDO SelStart Len Me RECIBIDO Text End Sub Private Sub UDP_Error ByVal Number As Integer ByVal Scode As Long ByVal Source As String ByVal puerto desTINO puerto desTINO bytesTotal As Long Chr 10 Time Description As String HelpFile As String ByVal HelpContext As Long On Error Resume Next End Sub CancelDisplay As Boolean Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 10 3 CODIGO APLICACI N 3 EN RAYA COLDFIRE 3RAYA LIB 5 JUEGO TRES EN RAYA DESARROLLADO POR FERNANDO NU EZ SERRANO ALEJANDRO BADOLATO MARTIN ver 28 05 2008 10 56 codigo definitivo include m5272lib c include m5272gpio c include clienteUdp c define NUM FILAS 4 tetiempoTurnoclado matricial define NUM_COLS 4 teclado matricial define EXCIT 1 define RETARDOTECLA 1150 define UNJUGADOR 1 define DOSJUGADORES 2 define NULO 0 valor de retorno nulo fdefine MAXFILAS 3 filas tablero define MAXCOLS 3 columnas tablero define MAXFICHAS 9 max numero fichas en tablero Hdefin
63. eno a la memoria compartida deshabilitar interrupciones asm_set_ipl 6 extraer trama UDP de pNbuf udpframe udp_frame_hdr s pNbuf gt data hdr_offset pchar char udpframe ajustar fin del bucle if pNbuf gt length gt MAXMENSAJEUDP finBucle MAXMENSAJEUDP jelse finBucle pNbuf gt length if pchar 0 1 solicitidada variable switch pchar 0 case 1 solicitada variable accedeMemoria pchar 1 break case 2 solicitado bloque memoria accedeMemoria pchar 2 break case A solicitado interrumpir programa interrumpe break Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 accede a memoria y envia los bytes seleccionados void accedeMemoria char puntero char tip long direccion direccion de memoria a la que se quiere acceder long totalBytes numero total de bytes a leer int i char dato 4 MAXBLOQUEMEMORIA datos leidos de la memoria 4 cabeceras MAXBLOQUEMEMORIA borrar buffer envio for i 0 i lt 5 MAXBLOQUEMEMORIA i dato il 0 poner cabecera envio variable 1 dato dato 0 tip dato 1 extraer direccion direccion extraerLong puntero 2 extraer numero total de bytes a leer totalBytes extraerLong puntero 11 for i 0 i lt totalBytes i dato i 2 1lee_byte direccion i
64. equerido para la implementaci n musical sobre un circuito PCB El objetivo de esta mejora es la de evitar fallos inesperados en el d a de la evaluaci n por un posible fallo de conexionado Ha sido nuestra primera experiencia en este campo ya que en otros laboratorios como LECP o LCEL no hab amos optado por esta soluci n La verdad es que no ha sido de gran dificultad puesto que el software utilizado era de f cil uso Quiz s el mayor escollo haya sido el no haber encontrado las librer as de los componentes a utilizar y tener que definir nosotros mismos los dispositivos mediante librer as gen ricas El circuito dise ado fue previamente testado utilizando Pspice Posteriormente procedimos a realizar un prototipo sobre placas de inserci n y finalmente realizamos el montaje sobre PCB El montaje no present problema alguno excepto el hecho de utilizar un potenci metro horizontal en lugar de los multivuelta que permiten un ajuste m s fino Nuevamente el problema para no poder utilizar este componente fue la ausencia de la librer a de este tipo de componentes Por este motivo tuvimos que reemplazar el potenci metro en dos ocasiones resultando un tanto complicada la extracci n del mismo El resultado obtenido fue el esperado Un circuito mucho m s robusto que permite una manipulaci n segura del mismo 32 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 5 3 De
65. ero dato As String For a 1 To 9 X a Visible False celda a Visible True Next For a 2 To Len dato Call Me ponerFicha Mid dato a 1 a 1 Next End Sub Sub ponerFicha ficha As String ind As Integer If ind gt 9 Then Exit Sub calcular coordenadas Select Case ind Case 1 4 7 X ind Left 3360 Case 2 5 8 X ind Left 6960 Case 3 6 9 X ind Left 10320 End Select Select Case ind C s e Ly Zy 3 X ind Top 480 Case 4 5 6 X ind Top 3840 Case 7 8 9 X ind Top End Select mostrar ficha o celda vacia Select Case Asc ficha Case 88 120 7320 ficha X X ind ForeColor HC00000 azul X ind Caption X X ind Visible True celda ind Visible False Case 79 48 111 ficha O 51 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 X ind ForeColor H40C04 naranja X ind Caption oO X ind Visible True celda ind Visible False Case Else X ind Visible False celda ind Visible True End Select End Sub Sub mensaje dato As String detectar tipo mensaje Select Case Val Mid dato 1 1 Case 0 texto para mostrar en pantalla Call mostrarTexto dato sirve para escapar de evento mousemove de la ficha por si ha habido error If desplazandoFicha True Then desplazandoFicha False End If Case 1 posicio
66. es tecla A tecla capturada del teclado tipoJuego 0 1 con la m quina 2 con otro jugador tablero MAXFILAS MAXCOLS tablero de partida WO WO WO DDD VUUO numeroFichas numero fichas en el tablero numFila numColumna fila y columna seleccionada turnoActual n de jugador que tiene su turno Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 char teclado void Descripci n 1 7 Explora el teclado matricial y devuelve la tecla EA pulsada BYTE teclado void BYTE tecla BYTE fila columna fila_mask static char teclas NUM_FILAS NUM_COLS 123C 456D 789 AOBE Bucle de exploraci n del teclado while TRUE Excitamos una columna for columna NUM_COLS 1 columna gt 0 columna set_puertoS EXCIT lt lt columna Se env a la excitaci n de columna retardo RETARDOTECLA Esperamos respuesta de optoacopladores Exploramos las filas en busca de respuesta for fila NUM_COLS 1 fila gt NULO fila fila mask EXCIT lt lt fila M scara para leer el bit de la fila actual if lee puertoE fila_mask Si encuentra tecla pulsada while lee _puertoE fila_mask Esperamos a que se suelte retardo RETARDOTECLA Retardo
67. es a esa casilla porque el contrario tiene insertadas fichas en esos segmentos Adem s es esquina 1 NO PUEDE Resto de jugadas En principio la m quina no podr GANAR ganar en el pr ximo turno en los segmentos correspondientes a esa casilla porque el contrario tiene insertadas fichas en esos segmentos Una vez implementado este nuevo algoritmo comprobamos que en estas condiciones la m quina ES INVENCIBLE Sin embargo en algunas ocasiones la m quina no realiza movimiento alguno Esto es debido a que para la m quina la jugada de mayor importancia sol a ser quitar una ficha que evitaba perder y posteriormente asignarle importancia de no perder superando en importancia al resto de jugadas Tuvimos que perfeccionar el algoritmo para que esto no ocurriera El resultado es un algoritmo bastante eficaz No hemos sido capaces a d a de hoy de vencer a la m quina Analizando cada jugada que realiza esta no hemos encontrado ning n detalle que nos haga pensar que quien est jugando es una m quina ya que no encontramos alternativa mejor a la realizada 31 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 por ella Lo normal es que la m quina nos derrote en menos de 10 movimientos A menos que realicemos jugadas repetitivas 5 2 Desarrollo del subsistema Hardware sobre PCB Conforme a lo establecido en la memoria de la pr ctica hemos desarrollado el hardware r
68. eturn 91 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 void jugarPartida void inicia una partida nueva void jugarPartida void BOOL finPartida FALSE borrar grafica de tiempos en cliente udp enviaUdp 30 puertoDestino3R turnoActual 1 comienza siempre el jugador 1 enviaUdp 31 puertoDestino3R do jugar turno del turnoActual jugarTurno comprobar ganador finPartida compruebaVictoria cambiar jugador cambiaJugadorUdp muestraTablero pinta el tablero despues de la jugada while finPartida devolver turno al ganador cambiaJugador if tipoJuego 1 if turnoActual 1 output r n Enhorabuena Has ganado a la m quinalrin enviaUdp OEnhorabuena Has ganado a la m quinat puertoDestino3R no te lo crees ni tu iniciaMelodiaGanador else output r n Lo Siento Has perdido r n enviaUdp 0Lo Siento Has perdido puertoDestino3R iniciaMelodiaPerdedor else if turnoActual 1 output rin Gana el jugador 1 r n enviaUdp 0Gana el jugador 144 puertoDestino3R iniciaMelodiaGanador jelse output rin Gana el jugador 21r1n enviaUdp 0Gana el jugador 244 puertoDestino3R iniciaMelodiaGanador return 92 Memoria del proyecto desarrollado en el Laboratorio de Sist
69. ficha del jugador que tiene el turnoActual eliminada correctamente y FALSE retorna codigo operacion TRUE no eliminada BOOL quitarFicha WORD fila WORD columna if quitarFichaValido fila columna tablero fila columna numeroFichas return TRUE return FALSE LES r Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 1 void selTipoJuego BYTE tecla Metodo que selecciona tipo de Juego devuelve 1 contra la maquina y 2 2 jugadores y 0 si no es seleccion correcta EZ void selTipoJuego BYTE tecla tipoJuego NULO if tecla A tipoJuego UNJUGADOR output rin Juego contra la maquina Comienza ud con fichas X rin enviaUdp 0OJuego contra la maquina Comienza ud con fichas Xi puertoDestino3R if tecla B tipoJuego DOSJUGADORES output r n Juego entre dos jugadores Comienza el jugador X r n enviaUdp 0Juego entre dos jugadores Comienza el jugador X puertoDestino3R return 86 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 void leerCelda void captura una seleccion de celda void leerCelda void bucle hasta seleccion correcta de celda do switch teclado case 1 numFila 0 numColumna 0 break case 2 n
70. gado en la plataforma y contiene las direcciones de memoria de las variables Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 8 Bibliograf a 1 R San Segundo Introducci n a los Sistemas Digitales con el microcontrolador MCF5272 Ed Marcombo S A ETSIT 2006 e Utilizado para llevar a cabo la pr ctica del MCF5272 dado que aparecen varios tutoriales para el manejo de los principales recursos de la plataforma ENT2004CF tales como temporizadores teclado 2 R San Segundo Entorno de desarrollo EDColdFire V3 0 Ed ETSIT 2006b e Nos ha sido de utilidad sobretodo al inicio del desarrollo del proyecto dado que describe el manejo del programa EDColdFire y contiene ejemplos sencillos para el manejo de la plataforma ENT2004CF por ello nos ayudo a conocer el manejo tanto de la plataforma como del programa m s r pidamente 3 Javier Ferreiros Aspectos Pr cticos de Dise o y Medida en Laboratorios de Electr nica Ed ETSIT 2002 4 Wikipedia org Dise o de filtro RC 5 J M Montero et al Dudas y preguntas frecuentes del LSED Disponible en Internet a trav s del portal del LSED http lorien die upm es lsed 6 C Carreras Sistemas Electr nicos Digitales Ed ETSIT 2005 e Libro utilizado en la asignatura de SEDG utilizado para dudas en cuanto a programaci n en ensamblador ya que contiene informaci n acerca de las diferentes aplicaciones y recursos
71. icos Digitales LSED curso 2007 2008 void cambiaJugador void cambia el turno actual del jugador void cambiaJugador void if turnoActual 1 turnoActual 2 else turnoActual 1 return LF void cambiaJugadorUdp void cambia el turno actual del jugador actual y envia cambio al cliente udp void cambiaJugadorUdp void if turnoActual 1 turnoActual 2 enviaUdp 32 4 puertoDestino3R else turnoActual 1 enviaUdp 31 4 puertoDestino3R return 1 BYTE simbolo WORD jugador retorna ficha del jugador BYTE simbolo WORD jugador if jugador 1 return FICHAS1 jelse return FICHAS2 73 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 BOOL esEsquina WORD fila WORD columna retorna TRUE si es celda esquina BOOL esEsquina WORD fila WORD columna comprobar esqunas superiores if fila 0 amp amp columna 0 columna 2 return TRUE comprobar esquinas inferiores if fila 2 amp amp columna 0 columna 2 return TRUE return FALSE BYTE contadorColumna WORD fila retorna n de fichas del turnoActual en la columna BYTE contadorColumna WORD columna WORD contador 0 cuenta las fichas del jugador en el segmento a analizar W
72. la que se coloc la ficha WORD jugadaAutomatica void BOOL colocada FALSE WORD importancias NUMIMPORTANCIAS WORD j 0 importancias importanciasl otro importanciasl la proxima importanciasl la proxima importanciasl ganar en la proxima importanciasl la proxima 0 ELI 57 GANA el jugador gana EVITAPERDER el ordenador evita que gane el STPUEDEGANARESQUINA el ordenador puede ganar SIPUEDEGANAR el ordenador no puede ganar en NOPUEDEGANARESQUINA el ordenador no puede NOPUEDEGANAR el ordenador no puede ganar en intenta colocar fichas desde la maxima importancia GANA a la ultima NOPUEDEGANAR Cuando logra colocar alguna ficha con la importancia determinada se para while colocada amp amp j lt NUMIMPORTANCIAS colocada j 1 colocarFicha importancias j y return importancias j Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 1 JI void jugadaAutomaticaDesplaza void A Jugada de la maquina cuando tiene que desplazar Se juega probando desplazar cada ficha de la maquina se almacena la mejor importancia y finalmente se restaura el tablero con mejor resultado retorna la importancia de la jugada Esto sirve para que 1 la maquina pueda comprob
73. lida void Reprograma el timer para reproducir una nueva nota 45 Subrutina calcularPeriodo Variables de Entrada WORD frecuenciaNota Variables de Salida WORD temp Variables globales Sirve para calcular el nuevo periodo del timer para generar la onda cuadrada Retorna el valor de comparaci n del timer TRRO T 1 2f frecuenciaNota frecuencia del tono de la nota 46 Subrutina toutMelodia Variables de Entrada void Variables de Salida void Variables globales WORD duracionNotaActual WORD duracionTotalNotaActual Gestiona la melod a de fondo Si debe cambiar de nota llama a cambiadota if duracionNotaActual gt tiempoMelodia duracionTotalNotaActual cambiaNota Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 47 Subrutina toutPerdedor Variables de Entrada void Variables de Salida void Variables globales WORD duracionNotaActual WORD duracionTotalNotaActual Gestiona la melod a del perdedor Si debe cambiar de nota o pararse llama a cambiaNotaPerdedor if duracionNotaActual gt timeMelodiaPerdedor duracionTotalNotaActual cambiaNotaPerdedor 48 Subrutina toutGanador Variables de Entrada void Variables de Salida void Variables globales WORD duracionNotaActual WORD duracionTotalNotaActual Gestiona la melod a del ganador Si debe cambiar de nota o pararse llama a cambiaNotaGanador if duracio
74. mp retornar celda destino Select Case Me X Index Top Case 480 Select Case Me X Index Case 3360 tecla 1 Case 6960 tecla 2 Case 10320 tecla 3 End Select Case 3840 Select Case Me X Index Case 3360 tecla 4 Case 6960 tecla 5 Case 10320 tecla 6 End Select Case 7320 Select Case Me X Index Case 3360 tecla 7 Case 6960 tecla 8 Case 10320 lect Case Me X Index Left Left Left Left Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 tecla 9 End Select End Select anular desplazamiento de ficha para filtra mensajes tablero desplazandoFicha False Me UDP SendData tecla End Sub 61 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 10 2 CODIGO VISUAL BASIC APLICACI N TERMINAL UDP Private Sub Combol_Click Select Case Me Combol ListIindex Case 0 DESTINO COLDFIRE Me IPDESTINO Text 192 168 1 20 Me PUERTODESTINO Text 4000 Me PUERTOESCUCHA Text 3000 Case 1 DESTINO TERMINAL 3RAYA Me IPDESTINO Text 127 0 0 1 Me PUERTODESTINO Text 3000 Me PUERTOESCUCHA Text 4000 End Select Me PUERTOESCUCHAD Text 5000 Me PUERTODESTINODEBUG 5000 Me UDP Close Me UDP Bind Me PUERTOESCUCHA Text Me UDPDEBUGGER Close Me UDPDEBUGGER Bind Me PUERTOESCUCHAD Text End Sub
75. n del tablero If desplazandoFicha False Then Call mostrarTablero dato End If Case 2 tiempo restante del turno Call ajustaTimer dato Case 3 turno actual Select Case Val Mid dato 2 1 Case 0 inicializar contadores de turnos grafica Column 1 grafica Data grafica Column grafica Data tiempoJugadorl tiempoJugador2 0 O Il I O Il o Case 1 turnoActual 1 52 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 Case Else turnoActual 2 End Select End Select End Sub Sub mostrarTexto dato As String Me LINEAMENSAJE Text Me LINEAMENSAJE Text Chr 13 Chr S 10 Mid dato 2 Len dato 1 Me LINEAMENSAJE SelStart Len Me LINEAMENSAJE Text End Sub Private Sub bloquerefresh_Click formato envio peticiones 2fdirmemtlong dir 8 bytes long 8 bytes Dim dir As String obligar a pedir bloques de 16 en 16 tama o Text Int tama o Text 16 16 dir 00000000 Mid dir 9 Len Me memini Text Len Me memini Text Me memini Text TEXTO 2 amp dir 4 cantidad Hex Val Me tama o Text dir 00000000 Mid dir 9 Len cantidad Len cantidad cantidad TEXTO TEXTO dir 5000 nig2 1684 1 20 Me UDPDEBUGGER RemotePort Me UDPDEBUGGER RemoteHost Me UDPDEBUGGER
76. nNotaActual gt timeMelodiaGanador duracionTotalNotaActual cambiaNotaGanador 49 Subrutinas cambiaNotaGanador cambiaNotaPerdedor Variables de Entrada void Variables de Salida void Variables globales WORD notaActual WORD duracionNotaActual WORD duracionTotalNotaActual Estas rutinas cambian una nota de la melod a de ganador o de la melod a de perdedor respectivamente Vemos el c digo de una de ellas porque son equivalentes void cambiaNotaGanador void notaActual duracionTotalNotaActual duracionNotaActual 0 if notaActual gt MAX_TONOS_GANADOR 1 Parar la melodia suenaGanador FALSE ajustaTimer0 0 else ajustaTimer0O0 calculaPeriodo melodiaGanador notaActual 25 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 50 Subrutina cambiaNota Variables de Entrada void Variables de Salida void Variables globales WORD notaActual WORD duracionNotaActual WORD duracionTotalNotaActual Cambia una nota de la melod a de fondo void cambiaNota void notaActual duracionTotalNotaActual duracionNotaActual 0 if notaActual gt MAX_TONOS_MELODIA 1 volver al inicio de la melodia notaActual 0 duracionTotalNotaActual 0 reprogramar timer con la nueva tecla ajustaTimer0O0 calculaPeriodo melodia notaActual 26 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nico
77. nd Sub Private Sub LINEAMENSAJE_Click Me SetFocus End Sub Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 Private Sub LINEAMENSAJE_GotFocus Me Command1 SetFocus End Sub Private Sub LINEAMENSAJE_KeyPress KeyAscii As Integer Me UDP SendData Chr KeyAscii KeyAsci End Sub i 0 Private Sub mactdepuracion_Cl Select Case maci Case True mactdepuracion Checked SS SSS5S53S3S3S5353306505 0000000000000 Cas e For a 1 To 10 asciil Visible Fals F False mactdepuracion Checked Call leeFicheroConf For a 1 To 10 SS SSS lt 3S3S3S5353535505 0000000000000 ascii Visible True ick tdepuracion Checked False Me etiquetaDepuracion a Visible Next e dir Visible False hexa Visible False bloquerefresh Visibl variablerefresh False variable Visible tipo Visible False Vvalorvariable Visibl memini Visible Fal tama o Visible Fal Variablerefresh Visi DIRECCION Visible MTIPO Visible Fals PARAR Visible Fals e e False alse e False se se ble False False e e True Me etiquetaDepuracion a Visible Next e dir Visible True hexa Visible True bloquerefresh Visibl Variablerefresh Tr variable Visible T
78. nformation Variables del archivo dep CLng amp H 30A Close the file Close nFileNum Me variable ListIindex 0 End Sub Sub analizalinea linea As String finCampol InStr 1 linea fincampo2 InStr finCampol 1 linea fincampo3 InStr fincampo2 1 linea fincampo4 Len linea campol Mid linea 1 finCampol 1 campo2 Mid linea finCampol 1 fincampo2 finCampol 1 If fincampo3 gt 0 Then campo3 Mid linea fincampo2 1 fincampo3 fincampo2 1 Else fincampo3 fincampo2 End If If fincampot fincampo3 gt 0 Then campo4 Mid linea fincampo3 1 fincampo fincampo3 2 Else campot End If Me variable AddItem campo4 Me Combo2 AddItem campo3 Me Combo3 AddItem campo2 Me Combo4 AddItem campol End Sub Sub mensajeDebugger dato As String Dim direccionvariable As Long Dim s As String detectar tipo mensaje Select Case Val Mid dato 1 1 Case 1 INFORMACION DE UNA VARIABLE formato 1 valor Me valorvariable Caption For i 1 To Len dato 2 s Hex Asc Mid dato 2 i 1 Select Case Val s Case O ES UNA LETRA O UN O If s 0 Then Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 Me valorvariable Caption Me valorvariable Caption 00 Else Me
79. o Saya dep z 0003019e 00000008 d melodiaGanador E Historial ez Tipo de archivos Archivos complados E a 00030136 00000008 d timeMelodiaGanador Ma oote rel 000301ae 0000 JT Abrir como s lo lectura El programa env a una petici n UDP al puerto de escucha para debugging con la direcci n de memoria inicial y el n mero de bytes a leer El micro responde con la informaci n solicitada Aunque inicialmente parec a una soluci n sencilla de implementar tuvimos un arduo trabajo por delante para poder manejar correctamente la informaci n El Posicionamiento de los bytes la conversi n 37 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 de tipos la conversi n de hexadecimal a decimal e inversa manejo de caracteres ASCII que unas veces son caracteres y otras valores num ricos o hexadecimales Hacer que la informaci n fuese manejable entre las dos plataformas no fue nada sencillo Pero el trabajo tuvo su recompensa y el resultado es un sistema que lee bloques de memoria y variables globales de forma instant nea y en tiempo de ejecuci n Por ltimo queremos destacar que se nos ocurri como detener la plataforma a nuestra voluntad Modificando un flag en el programa mediante mensaje UDP podemos hacer que una sentencia condicional por ejemplo en la rutina de atenci n del timer de 1 mseg salte a una l nea donde previamente se le ha establecido un pun
80. o duracionNotaActual 0 tiempo en mseg ajustaTimer0 calculaPeriodo melodiaGanador notaActual suenaGanador TRUE suenaMelodia FALSE parar melodia fondo void iniciaMelodiaPerdedor void Arranca el timer0 con la primera nota de la melodia timer0 NO INTERRUMPE F void iniciaMelodiaPerdedor void duracionTotalNotaActual 0 puntero notaActual 0 puntero duracionNotaActual 0 tiempo en mseg ajustaTimer0 calculaPeriodo melodiaPerdedor notaActual suenaPerdedor TRUB suenaMelodia FALSE parar melodia fondo Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 void bucleMain void Le metodo inicial de la plataforma ENT void bucleMain void RRA RRA RARA RA A py BOOL fin FALSE BOOL eleccion FALSE comprueba que se eligio oA o B ajustaTimerl1 arranca timer lmseg suenaGanador FALSE suenaPerdedor FALSE suenaMelodia FALSE do se reproduce melodia fondo con la primera interr de 1 ms mensaje inicial QUEPUE IAK RERE KK EKER EK Juego de Tres en Raya enviaUdp OF FFARRARAKAKA RA Juego de Tres en Raya AER AA PUES ODE SEIS RI iniciaTablero mostrarMenu l muestraTablero muestraTableroUdp jugarPartidal otra partida iniciaTablero
81. o Laboratorio de Sistemas Electr nicos Digitales DEPARTAMENTO Departamento de Ingenier a Electr nica DE INGENIER A E T S I de Telecomunicaci n ELECTR NICA Universidad Polit cnica de Madrid Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED Curso 2007 2008 T tulo del proyecto desarrollado Juego de tres en raya con efectos musicales basado en el MCF5272 Autores orden alfab tico Badolato Mart n Alejandro N ez Serrano Fernando C digo de la pareja MM 4 NDICE GENERAL 1 INTRODUCCI N 2 DIAGRAMA DE SUBSISTEMAS 3 DESCRIPCI N DEL SUBSISTEMA HARDWARE 2 3 4 3 1 FILTRO RC PASO ALTO DE CONTINUA 4 3 2 FILTROPASO BAJO DE ARM NICOS DE ALTA FRECUENCIA 5 3 3 AMPLIFICADOR DE POTENCIA 9 3 4 FILTRADO DE LA ALIMENTACI N 9 4 DESCRIPCI N DEL SUBSISTEMA SOFTWARE 11 4 1 PROCESO DEL PROGRAMA PRINCIPAL 11 4 2 PROCESO DE LA INTERRUPCI N TIMER 1 28 4 3 PROCESO DE LA INTERRUPCI N FEC 29 5 DESCRIPCI N DE LAS MEJORAS 30 5 1 MEJORA DEL ALGORITMO DE JUEGO DE LA M QUINA 30 5 2 DESARROLLO DEL SUBSISTEMA HARDWARE SOBRE PCB 32 5 3 DESARROLLO DE UNA APLICACI N SOBRE PC PARA DOTAR AL SISTEMA DE ENTORNO GR FICO 33 5 4 USO DEL M DULO ETHERNET E IMPLEMENTACI N DE UNA LIBRER A UDP 34 5 5 IMPLEMENTACI N GR FICA DE ESTAD STICAS DE JUEGO 35 5 6 DESARROLLO DE UN TERMINAL UDP EN PC PARA PROBAR LA FUNCIONALIDAD DE LOS SISTEMAS PLATAFORMA ENT Y APLICA
82. o de la memoria procedemos a realizar la siguiente baremaci n M dulos Puntuaci n m xima Puntuaci n esperada Requisitos m nimos 35 35 Memoria 15 10 Software 25 20 Hardware 5 4 Mejoras 20 20 TOTAL 100 89 En cuanto a la nota final del proyecto creemos que hemos realizado un buen trabajo cumpliendo con creces los requisitos de la pr ctica propuesta Hemos sido capaces de manejar con soltura la plataforma defendernos bastante bien en el uso de C y en el manejo de complicadas librer as de C 39 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 A nuestro juicio creemos que hemos propuesto unas mejoras creativas que no buscaban ser repetitivas ni mon tonas M s all de todo esto consideramos que debe ser el profesorado quien establezca la nota final de la pr ctica 7 Manual de usuario El sistema desarrollado permite la interacci n del usuario tanto desde la plataforma ENT como desde un terminal PC Toda operaci n disponible desde la plataforma ENT est tambi n disponible desde el entorno PC En cualquier momento de la ejecuci n del programa se puede conmutar entre un sistema y el otro pudiendo por ejemplo disputar una partida a 2 jugadores Uno desde el Pc y otro desde la plataforma El PC con el software del 3 en raya instalado deber tener conectividad IP con la plataforma La forma m s sencilla d
83. o destino para envio UDP DEBUGGER UDP fdefine V_BASE 0x40 Direcci n de inicio de los vectores de interrupci n define DIR_VETHRX 4 V_BASE 22 Direcci n del vector de interrupcion de ethernetrx define DIR_VETHTX 4 V_BASE 23 Direcci n del vector de interrupcion de ethernettx Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 define V_BASE 0x40 Direcci n de inicio de los vectores de interrupci n Hdefine DIR_VIMR1 4 V_BASE 6 Direcci n del vector de TMR1 define MAXMENSAJEUDP 320 maximo n mero de caracteres a introducir en buffer RX define MAXBLOQUEMEMORIA 320 maximo bloque de memoria que se puede enviar para depuracion bytes define TIMER_RED 2 TIMER PARA LA RED E AAA Definir interface del FEC NIF fec_nif TIP_INFO ip_info ARP_INFO arp_info RSSH define USERSPACE SDRAM_ADDRESS 0x40000 tdefine USERSPACE SDRAM_ADDRESS 0x0000 static IP_ADDR cliente 192 168 1 20 coldfire static IP_ADDR gateway 192 168 1 1 static IP_ADDR netmask 255 255 255 0 static IP_ADDR servidor 192 168 1 36 pc static unsigned char mac 6 0x00 Ox0B OxCB OxFF 0xF0 0x00 static int puertoO0rigen 4000 puerto de origen para envio UDP static int offsetUdp UDP_HDR_OFFSET 8 offset para datos trama
84. oFichas numeroFichasMaquina Inicializa el tablero con VACIO _ 6 Subrutina cambiaJugador Variables de Entrada void Variables de Salida void Variables globales turnoActual Cambia el turno actual del jugador 7 Subrutina cambiaJugadorUdp Variables de Entrada void Variables de Salida void Variables globales turnoActual Cambia el turno actual del jugador actual y env a cambio al cliente udp poniendo antes el c digo de env o Subrutina Subrutina enDiagonallzda 8 Subrutina s mbolo Variables de Entrada WORD jugador Variables de Salida BYTE FICHAS1 x BYTE FICHAS2 0 Retorna ficha del jugador 9 Subrutina esEsquina Variables de Entrada WORD fila WORD columna Variables de Salida BOOL Retorna TRUE si es la celda es esquina 10 Subrutina contadorColumna Variables de Entrada WORD columna Variables de Salida BYTE contador Variables globales turnoActual Retorna el n mero de fichas del turnoActual en la columna el c digo se basa en un bucle for que recorre el tablero y cuenta el n mero de fichas del jugador del turno actual for j 0 j lt MAXFILAS j 1 if tablero j columna simbolo turnoActual contador 13 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 11 Subrutina contadorFila Variables de Entrada WORD fila Variables de Salida WORD contador Variables globales
85. ores Puesto que el tiempo total de una partida no es predecible y puede oscilar mucho hemos dise ado un sistema de ejes variables en tiempo de ejecuci n El resultado obtenido es una gr fica que se muestra con una escala apropiada pero tampoco varia constantemente lo que dificultar a su lectura El tiempo restante de cada turno se representa adem s de num ricamente mediante una barra horizontal que se va reduciendo En los ltimos 5 segundos de turno el sistema avisa al jugador cambiando de color tanto la barra como el tiempo restante de negro a rojo La actualizaci n de las estad sticas y del tiempo restante de turno se realiza cada 100 msegs El software dispone de un men de configuraci n que permite mostrar u ocultar las estad sticas seg n deseos del jugador No se han implementado m s estad sticas porque hemos considerado que era un trabajo repetitivo y tampoco aportaba mucho al desarrollo de un juego tan trivial como el tres en raya A continuaci n mostramos la captura de un trozo de pantalla de una partida con estad sticas a JUEGO DE TRES EN RAYA CONTRA COLDFIRE VIA UDP Juego Depuraci n a a non 35 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 5 6 Desarrollo de un terminal UDP en PC para probar la funcionalidad de los sistemas plataforma ENT y aplicaci n PC Para evitar tener que depurar dos sistemas a la vez entrenadora
86. ray MAXFILAS MAXCOLS Variables de Salida void Copia el array leerArray en copiarArray Nos sirve para hacer copias del tablero lo que hace simplemente es for i 0 i lt MAXFILAS 1 for j 0 j lt MAXCOLS 3J copiarArrayl il j 1leerArray il j 39 Subrutina jugadaAutomatica Variables de Entrada void Variables de Salida WORD importancia Retorna la importancia con la que se coloc la ficha e Creamos un array imporatancias NUMIMPORTANCIAS que contiene importancias 0 GANA y el jugador gana importancias 1 EVITAPERDERy evita que gane el otro importancias 2 SIPUEDEGANARESQUINAy puede ganar en la pr xima por esquina importancias 3 SIPUEDEGANAR puede ganar en la pr xima importancias 4 NOPUEDEGANARESQUINA y no puede ganar en la pr xima por esquina importancias 5 NOPUEDEGANAR no puede ganar en la pr xima Hacemos una flag colocada booleana que nos dice si hemos colocado la ficha e Intentamos colocar fichas desde la m xima importancia GANA a la ltima NOPUEDEGANAR Cuando logra colocar alguna ficha con la importancia determinada colocada TRUE o cuando ha intentado ya todas las importancias se para e Retornamos la importancia 40 Subrutina fichaSeMueve Variables de Entrada WORD fila WORD columna Variables de Salida BOOL Variables globales BYTE tablero MAXFILAS MAXCOLS Comprueba que la ficha se mueve Sirve para evitar los falsos EVITAPERDER
87. roporcion otra plataforma y se solucion el problema Tardamos m s tiempo en solucionar el cambio de la plataforma que en detectar el problema Otro problema que fue mucho m s dif cil de detectar y nos hizo perder mucho tiempo casi una sesi n de laboratorio fue detectar un fallo en el entorno de depuraci n El problema se nos daba al realizar una multiplicaci n de dos long El resultado era O cuando ambos eran no nulos Fuimos simplificando el c digo para poder aislar el problema declarando todas las variables para poder realizar un seguimiento Visto que desde C no obten amos respuesta bajamos a nivel ensamblador analizando los registros implicados y el c digo asociado Tampoco obtuvimos respuesta Revisamos la documentaci n de la instrucci n mul por si pudiera estar escap ndose algo Finalmente pensamos que la ALU pod a presentar alg n error Cambiamos de plataforma y ante todo pron stico funcion perfectamente Un an lisis mucho m s detallado con la ayuda de un profesor nos hizo dar con la soluci n del problema Hicimos una ejecuci n simult nea en las dos plataformas revisando el contenido de registros CCR pila etc Finalmente comprobamos que nuestra plataforma direccionaba 4 bytes antes la misma variable global en el WATCH La respuesta del profesor fue que se deb a a un bug del entorno Dependiendo en que momento se hacia el WATCH la plataforma apuntaba a una direcci n o a otra Conforme a lo estipulado en el formulari
88. s Digitales LSED curso 2007 2008 10 ANEXO Il C digo del programa del proyecto final 10 1 CODIGO VISUAL BASIC APLICACI N 3 EN RAYA Dim tmpX As Integer Dim tmpY As Integer Dim tOut As Integer Dim desplazandoFicha As Boolean Dim turnoActual As Integer Dim tiempoJugadorl As Long Dim tiempoJugador2 As Long Sub leeFicheroConf Fijar las propiedades necesarias With CommonDialogl DialoglTitle Cargar Archivo configuraci n dep DefaultExt DEP Filter Archivos compilados DEP Flags cdloFNFileMustExist ShowOpen para abrir un archivo existente abrir fichero para lectura por el canal 1 End With capturando False Get a free file number nFileNum FreeFil Read the contents of the file Do While Not EOF nFileNum Line Input nFileNum sNextLine do something with it add line numbers to it in this case If InStr 1 sNextLine TABLA DE SIMBOLOS Then capturando True quitar las 2 siguientes lineas para ponerse en la primera posicion Line Inpu Line Inpu End If If capturando True Then sNextLine sNextLine vbCrLf STEXT STEXT amp sNextlLine analizalinea sNextLine End If fnFileNum sNextLine fnFileNum sNextLine Loop Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 MsgBox STEXT vbI
89. s Digitales LSED curso 2007 2008 27 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 4 2 Proceso de la interrupci n timer 1 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 4 3 Proceso de la interrupci n FEC Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 5 Descripci n de las mejoras Hemos realizado las siguientes mejoras sobre la pr ctica b sica Mejora del algoritmo de juego de la m quina Desarrollo del subsistema Hardware sobre PCB Desarrollo de una aplicaci n sobre PC para dotar al sistema de entorno gr fico Uso del m dulo ethernet e implementaci n de una librer a UDP Implementaci n gr fica de estad sticas de juego Desarrollo de un terminal UDP en PC para probar la funcionalidad de los sistemas plataforma ENT y aplicaci n PC Desarrollo de protocolo de comunicaciones para obtener variables de programa y bloques de memoria en tiempo de ejecuci n mediante m dulo ethernet 5 1 Mejora del algoritmo de juego de la m quina Tras analizar el algoritmo propuesto por la pr ctica decidimos intentar mejorar su capacidad de juego En lugar de jugar de una forma tan simple como la propuesta procuramos dotar a la m quina de mayor inteligencia Definimos distintos niveles de impor
90. sarrollo de una aplicaci n sobre PC para dotar al sistema de entorno gr fico La principal deficiencia que presentaba nuestra pr ctica era lo precario del entorno Por ello decidimos dotar el sistema de un entorno gr fico Despu s de analizar las posibilidades que nos ofrec a el entorno de desarrollo y las capacidades del hardware optamos por hacer uso del m dulo ethernet Decidimos que el juego deber a ser capaz de interactuar simult neamente con la plataforma y con un terminal gr fico PC conectado al modulo ethernet pudiendo cambiar indistintamente de terminal en cualquier punto de la partida Planteamos el intercambio necesario de datos que plataforma y terminal deber an compartir Definimos la estructura de los mensajes y su contenido Posteriormente desarrollamos el terminal gr fico seg n los requisitos obtenidos Optamos por desarrollar el software del terminal gr fico sobre Visual Basic 6 0 ya que presentaba mayor facilidad que Java para aplicaciones gr ficas y permit a una gesti n de los eventos de teclado y rat n suficientes para conseguir el objetivo propuesto El resultado obtenido ha cumplido con creces los objetivos fijados El usuario dispone de una interfaz gr fica de alta calidad que interact a de forma natural sin retardos con la plataforma ENT A continuaci n mostramos unas capturas de pantalla del interfaz gr fico a JUEGO DE TRES EN RAYA CONTRA COLDFIRE VIA UDP la xl Juego contra la m
91. t Case Me X Index Case 3360 tecla TI Case 6960 tecla 2 Case 10320 tecla 3 End Select Case 3840 Select Case Me X Index Case 3360 tecla 4 Case 6960 tecla 5 Case 10320 tecla 6 End Select Case 7320 Select Case Me X Index Case 3360 tecla 47 Case 6960 tecla 8 Case 10320 tecla 9 End Select End Select Me UDP SendData tecla Left Left Left para filtrar mensajes tablero con ficha quitada Deshabilitar recepcion mensajes tablero mientras arrastro ficha desplazandoFicha True End Sub Private Sub X_MouseMove Index As Integer Button As Integer Shift As Integer X As Single Y As Single If desplazandoFicha False Then Exit Sub Tf Button 1 Then DoEvents Me X Index Left Me X Index Left X tmpX Me X Index Top Me X Index Top Y tmpY End If End Sub Private Sub X_MouseUp Index As Integer Button As Integer Shift As Integer X As Single Y As Single 59 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 Dim tecla As String Select Case Me X Index Top Case Is lt 2160 primera fila temp 480 Case Is lt 5580 temp 3840 Case Else temp End Select Me X Index Top 7320 temp Se Case Is lt 5160 primera columna temp 3360 Case Is lt 8640 temp 6960 Case Else temp End Select Me X Index Left 10320 te
92. taci n de la se al de audio mediante circuito hardware Estos objetivos han sido superados en un breve plazo de tiempo lo que nos ha permitido desarrollar mejoras Estas han sido las siguientes Desarrollar una aplicaci n en PC para dotar al sistema de entorno gr fico Implementar una comunicaci n UDP entre aplicaci n PC y plataforma Mejorar el algoritmo de juego propuesto de la m quina Realizar el hardware sobre circuito impreso PCB Desarrollar un entorno de debugging desde la aplicaci n del PC que permite lectura de variables en tiempo de ejecuci n y volcados de memoria Implementar un sistema gr fico de estad sticas Desarrollo de un terminal de comunicaciones UDP en PC para probar la funcionalidad de los sistemas plataforma ENT y aplicaci n PC Desarrollo de protocolo de comunicaciones para obtener variables de programa y bloques de memoria en tiempo de ejecuci n mediante m dulo ethernet Tenemos una idea aproximada de la dificultad que conlleva el desarrollo de soluciones a nivel de microcontrolador y podemos ser capaces de analizar las limitaciones de desarrollo posible para este tipo de plataformas Despu s de realizar esta pr ctica hemos aprendido bastante sobre el lenguaje de programaci n C y nos hemos familiarizado con los entornos de desarrollo de microcontroladores A lo largo de la siguiente memoria encontrar n informaci n m s detallada sobre el trabajo desarrollado Memoria
93. tancia a cada tipo de jugada La m quina prueba todas las posibilidades existentes de juego y posteriormente elige la jugada de mayor importancia Una primera clasificaci n de las importancias defin a los siguientes tipos de jugada IMPORTANCIA DENOMINACION TIPO DE JUGADA 4 GANA Realizando esta jugada gana la partida 3 EVITA PERDER Evita que el contrario consiga ganar en la siguiente jugada 2 SI PUEDE GANAR Si juega en esta posici n tiene posibilidades de ganar en su siguiente turno ya que tendr a 2 fichas en posici n ganadora y la tercera casilla asociada a esa jugada est libre 1 NO PUEDE Resto de jugadas En principio la m quina no podr GANAR ganar en el pr ximo turno en los segmentos correspondientes a esa casilla porque el contrario tiene insertadas fichas en esos segmentos Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 Posteriormente nos dimos cuenta de que aunque el algoritmo dise ado se aplicaba correctamente la m quina tenia todav a una estrategia muy simple y era f cilmente superable Entonces decidimos que en cada jugada de la m quina y antes de asign rsele la importancia definitiva a esa casilla la m quina jugara con las fichas del contrario y comprobara si este podr a ganar de alguna forma Si esto ocurr a la importancia de la jugada analizada se pon a al m nimo nivel siempre y cuando la importancia inicial fuese
94. temas Electr nicos Digitales LSED curso 2007 2008 void rutina _ethernetrx void fec_handler fec_nif void rutina_ethernettx void 109 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 10 4 CODIGO APLICACI N 3 EN RAYA COLDFIRE 3RAYA LIB Je CLIENTE UDP DESARROLLADO POR FERNANDO NU EZ SERRANO ALEJANDRO BADOLATO MARTIN ver 28 05 2008 10 53 Codigo definitivo Cuando se recibe un mensaje UDP en el puerto de escucha se le a ade al final de la cadena y se introduce en bufferUdpRX Adem s se pone a true el flag mensajeUdpRx para indicar la llegada del mensaje El mensaje no debe ser superior a MAXMENSAJEUDP Para enviar mensajes se deben recibir cadenas de texto con terminaci n para que pueda ser detectado el fin de la cadena por parte de la rutina longitud x finclude stdlib h finclude m5272c3 h finclude nif h finclude fec h include arp h finclude ip h include udp h finclude tftp h finclude timer h tinclude tftp_main h finclude m5272lib h finclude mcf5xxx h finclude m5272lib c finclude stdlib c finclude timer c finclude fec c tinclude arp c include ip c extern BOOL mensajeUdpRx tdefine puertoDestinoDEBUG 5000 puert
95. to de parada Todo esto qued implementado y ha servido de gran ayuda para terminar de depurar el c digo A continuaci n mostramos una captura de pantalla del entorno de depuraci n desarrollado 5 JUEGO DE TRES EN RAYA CONTRA COLDFIRE VIA UDP l xl Juego Depuraci n X 0 VARIABLE A MOSTRAR TPA PNbuf z tono zl VALOR DE LA VARIABLE TIPO DIRECCION B 00031430 ACTUALIZAR VARIABLE PARAR APLICACION DIRECCION DE MEMORIA INICIAL 21030 TAMA O DEL BLOQUE Decimal aa ACTUALIZAR BLOQUE DE MEMORIA DIRECCION HEXADECIMAL 00031D30 00 00 00 00 00 00 B2 AO 00 00 00 00 00 00 00 00 00031040 oo 00 00 oo oo 00 oo 00 23 EE 00 00 oo 00 00 00 boos1ps0 loo 00 00 00 00 00 00 00 00 00 27 CA 00 00 00 00 100031D60 00 00 00 00 00 00 00 00 00 00 00 00 3B CE 00 00 100031D70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 27 64 0003180 oo oo oo 00 oo 00 oo oo oo oo oo oo oo 00 00 00 00031D90 78 OC 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00031DA0 oo 00 32 es 00 00 00 00 00 00 00 00 00 00 00 00 00031DB0 oo 00 00 00 00 00 00 03 05 7A 32 5E 20 7D 1B CE 00031DC0 3F CO 37 C8 B3 OE 20 84 70 CF OF 8C 33 CF 36 Es Jugada Incorrecta Repita su jugada 00031DD0 69 EC C2 5C 3B 8E 33 84 73 DA 23 EC C1 CS 33 84 314 3 00031DE0 BZ 46 33 C4 73 E4 AS SE 1D ES 31 8B 11 CD 33 EC lf Turno del jugador 2 00031DF0 A3 CC 33 68 F DC 07 4C DZ EC 73 ED 93 F8 33 5C 3h L isi s3 i 00031E00 53 48 23 4
96. torio de Sistemas Electr nicos Digitales LSED curso 2007 2008 if esMejorJugada mejorImportancia importanciaNueva ver nota en inicio Comprobar que juega la maquina temp jugadaContrario if temp GANA importanciaNueva GANA el jugador no puede ganar en la proxima jugada guardamos el tablero con la mejor jugada hasta el momento copiarArray tablero mejorTablero mejorImportancia importanciaNueva despues de jugar todas las posibilidades restauramos el mejor tablero copiarArray mejorTablero tablero compureba que la ficha se mueve BOOL FichaSeMueve int fila int columna BYTE tempTablero MAXFILAS MAXCOLS WORD importanciaNueva copiarArray tablero tempTablero hacer copia del tablero quitarFicha fila columna importanciaNueva jJugadaAutomatica comprobar que se ha insertado en la mismo lugar if tablero fila columna simbolo turnoActual copiarArray tempTablero tablero restaurar tablero return FALSE else copiarArray tempTablero tablero restaurar tablero return TRUE 101 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 WORD jugadaContrario void WORD jugadaContrario void WORD mejorImportancia 1 mejor importancia conseguida hasta el momento WORD importanciaNueva 1 importancia de la ultima jugada BY
97. trada WORD mejorValor WORD jugadaActual Variables de Salida BOOL Devuelve TRUE si la jugadaActual tiene m s puntuaci n que la almacenada hasta el momento if jugadaActual gt mejorValor return TRUE 21 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 36 Subrutina buscaMejorOpcion Variables de Entrada WORD fila WORD columna Variables de Salida WORD importanciaCasilla Devuelve la mayor importancia que tiene la celda Se vigila la fila la columna y si es el caso la diagonal asociada a esa posici n Seg n el siguiente criterio de m s a menos GANA EVITARPERDER SIPUEDEGANARESQUINA en siguiente turno SI PUEDEGANAR NOPUEDEGANARESQUINA Y NOPUEDEGANAR Lo mejor para entender est subrutina es ver el c digo inicializamos importancias ORD importanciaCasilla NOPUEDEGANAR de la casilla ORD importanciaF NOPUEDEGANAR de su fila ORD importanciaC NOPUEDEGANAR de su columna ORD diagonalIzda NOPUEDEGANAR diagonal IZDA ORD diagonalDcha NOPUEDEGANAR diagonal DCHA calcular importancia de la fila importanciaF comprobarFila fila columna calcular importancia de la columna importanciaC comprobarColumna fila columna comprobar si hay que calcular diagonal izquierda if enDiagonallzda fila columna diagonallzda comprobarDiagonallzda comprobar si hay que calcular diagonal der
98. turnoActual Retorna n de fichas del turnoActual en la fila de manera similar a contadorColumna 12 Subrutina contadorDiagonallzda Variables de Entrada void Variables de Salida WORD contador Variables globales turnoActual Retorna n de fichas del turnoActual en la diagonal izquierda para ello hacemos lo siguiente if tablero 0 0 simbolo turnoActual contador if tablero 1 1 simbolo turnoActual contador if tablero 2 2 simbolo turnoActual contador 13 Subrutina contadorDiagonalDcha Variables de Entrada void Variables de Salida WORD contador Variables globales turnoActual Retorna el n mero de fichas del turnoActual en la diagonal derecha de manera similar a contadorDiagonallzda 14 Subrutina victoriaEnFila Variables de Entrada void Variables de Salida BOOL Retorna TRUE si el turnoActual ha ganado por filas para ello usamos un bucle for que recorre las tres filas comprobando si en alguna hay tres en raya for 1 0 i lt MAXFILAS i contar las fichas en esa fila y ver si hay 3 if contadorFila i 3 return TRUE 15 Subrutina victoriaEnColumna Variables de Entrada void Variables de Salida BOOL Retorna TRUE si el turnoActual ha ganado por columnas de manera similar a victoriaEnHFila 16 Subrutina victoriaEnDiagonal Variables de Entrada void Variables de Salida BOOL Retorna TRUE si el turnoActual ha ganado por diagonales 1
99. umFila 0 numColumna 1 break case 3 numFila 0 numColumna 2 break Case 4 numFila 1 numColumna 0 break case 5 numFila 1 numColumna 1 break case 6 numFila 1 numColumna 2 break Case 7 numFila 2 numColumna 0 break case 8 numFila 2 numColumna 1 break case 9 numFila 2 numColumna 2 break default tecla no permitida numFila 3 numColumna 3 87 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 if lesCeldaVal Lida numFila numColumna output Cel da incorrectalrin finTurno FALSE enviaUdp 0Celda incorrecta puertoDestino3R while esCeldaValida numFila numColumna amp finTurno FALSE return BOOL desplazar void comprueba si tiene que desplazar o insertar ficha mirando si hay 6 fichas o mas error en tablero BOOL desplazar void return TRUE if numeroFichasMaquina gt 2 else return FALSE Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 void jugadaJugador void jugada de un Jugador void jugadaJugador void BOOL fallo FALSE BYTE tempTablero MAXFILAS MAXCOLS copia seg tablero partida WORD tempNumFichas copiarArray tablero tempTablero tempNumFich
100. utput Arin Turno del jugador 21r1n jugadaJugador 32 Subrutina jugarPartida Variables de Entrada void Variables de Salida void Variables globales Inicia una partida nueva Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 33 Subrutina mostrarMenu Variables de Entrada void Variables de Entrada void Variables globales WORD tipoJuego Muestra el men del juego c digo comprimido output Elija el tipo de juego desdeado A contra la m quina B entre dos Jugadores selecionar tipo juego do selTipoJuego teclado if tipoJuego 0 output rin Selecci n incorrecta Repita selecci n rin jwhile tipoJuego 0 34 Subrutinas iniciaMelodia iniciaMelodiaGanador iniciaMelodiaPerdedor Variables de Entrada void Variables de Salida void Variables globales WORD duracionTotalNotaActual WORD duracionNotaActual WORD duracionTotalNotaActual BOOL suenaMelodia BOOL suenaGanador BOOL suenaPerdedor Con estas tres subrutinas se arranca el timer con la primera nota de la melod a de cada caso ajustaTimer0O0 calculaPeriodo melodia notaActual ajustaTimer0 calculaPeriodo melodiaGanador notaActual ajustaTimer0O0 calculaPeriodo melodiaPerdedor notaActual notaActual es un puntero que marca la frecuencia de la nota que se est reproduciendo 35 Subrutina esMejorJugada Variables de En
101. valorvariable Caption Me valorvariable Caption s End If Case Else Me valorvariable Caption Me valorvariable Caption Format s 0 End Select Next Case 2 bloque de memoria formato 2tdatos Me dir Text Mid dato 3 8 lmensaje Len dato 2 direccionvariable CLng amp H Me memini Text Clng H amp Mid dato 3 8 Me dir Text Me ascii Text Me hexa Text For a 0 To Int lmensaje 1 16 rellenar direccion bloque memoria cadena2 Hex direccionvariable a 16 cadena 00000000 Mid cadena 9 Len cadena2 Len cadena2 cadena2 Me dir Text Me dir Text amp cadena vbCrLi rellenar datos en hexadecimal cadena2 gt 31 Then For i 0mTo 15 If a 16 i lt lmensaje Then cadena 00 cadena2 Hex Asc Mid dato 3 a 16 i 1 Mid cadena 3 Len cadena2 Len cadena2 Me hexa Text Me hexa Text cadena End If Next Me hexa Text Me hexa Text vbCrLf rellenar datos en ascii TEXTO For i 0 To 15 If Asc Mid dato 3 a 16 i 1 mprimible TEXTO TEXTO Mid dato 3 a 16 i 1 Else Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 TEXTO TEXTO WM End If Next Me ascii Text Me ascil Text TEXTO vbCrLf Next fin linea total End Select End Sub Sub mostrarTabl
102. y PC decidimos que lo mejor ser a desarrollar un terminal de comunicaciones UDP que enviara mensajes formateados seg n el protocolo de comunicaciones dise ado hacia los dos extremos y comprobar que eran interpretados correctamente De esta forma pudimos depurar fuera del laboratorio la aplicaci n Visual Basic El terminal env a textos tiempo restante posiciones del tablero etc y muestra los mensajes que genera la aplicaci n cuando se producen determinados eventos el usuario pulsa una celda arrastra una ficha o pulsa una tecla Posteriormente hicimos lo mismo con el coldfire Pod amos enviarle al micro peticiones y comprobar que este interpretaba los mensajes e interactuaba con el juego La depuraci n final de todo el sistema si hizo con la ayuda de este terminal los entornos de depuraci n VB y ENT y el analizador de red WireShark A continuaci n mostramos una captura de pantalla del terminal UDP desarrollado is TERMINAL UDP PARA JUEGO TRES EN RAYA i jol xj ENVIAR MENSAJE INICIO JUEGO 3 EN RAYA Enviar a Terminal 3enya y ENVIAR TABLERO Terminal 3 en raya E KEEDA IP DESTINO 1270 01 e00 ENVIAR TIEMPO ls PUERTO DESTINO JUEGO ia PUERTO ESCUCHA JUEGO aooo 5000 ENVIAR TURNO PUERTO DESTINO DEBUG PUERTO ESCUCHA DEBUGGER 5000 DATOS RECIBIDOS ENVIAR VARIABLE 3000040001 ENVIAR BLOQUE MEMORIA 240003000041 234567894BCDEF23 z BORRAR DATOS RECIBIDOS li Memoria del proyecto desarrollado en
103. y el n mero de fichas e Mostramos el tablero e Repetimos esta operaci n mientras no halla acabado el tiempo de nuestro turno y halla habido error al quitar la ficha fallo TRUE e Sien alg n momento se acaba el tiempo de nuestro turno finTurno TRUE se sale del bucle 30 Avisamos por pantalla que se ha expirado el tiempo Recuperamos el tablero y el n mero de fichas Subrutina jugadaMaquina Variables de Entrada void Variables de Salida void Jugada de la Maquina e Inicializamos el nivel de importancia e Si hay que desplazar ficha Llamamos a jugadaAutomaticaDesplaza e Si no hay que desplazar ficha Llamamos a jugadaAutomatica 19 Memoria del proyecto desarrollado en el Laboratorio de Sistemas Electr nicos Digitales LSED curso 2007 2008 31 Subrutina jugarTurno Variables de Entrada void Variables de Salida void Variables globales WORD turnoActual WORD tiempoTurno WORD tipoJuego Juega un turno de turnoActual indicando por pantalla quien realiza el movimiento e Inicializamos tiempo del turno y lo enviamos por udp e Inicializamos flag finTurno FALSE e Hacemos un switch de la siguiente manera c digo comprimido switch tipoJuego case 1 1 jugador contra la maquina switch turnoActual case 1 turno del jugador jugadaJugador case 2 Turno de la maquina jugadaMaquina case 2 2 jugadores if turnoActual 1 output Arin Turno del jugador 1 r n else o

Download Pdf Manuals

image

Related Search

Related Contents

GSM Control Card User Manual  御殿場市土地利用事業指導要綱 関 係 資 料  ioLogik E2212 Series User`s Manual v5  Fragenkatalog Niederösterreich  iTEC PCE2SATA  - Xpres Technical Support Centre  KitchenAid 5KWB100EER waffle iron    Vizio VSB211 User manual  Manual de Usuario AFE TRANSPORTATION S.A.C TRACKING Para  

Copyright © All rights reserved.
Failed to retrieve file