21
Laboratorio de Sistemas Digitales Departamento de Tecnología Electrónica ETS de Ingenieros de Telecomunicación Universidad de Málaga Robot MegaMonkey (tm) Aprendizaje y recorrido de un laberinto mediante microcontrolador 68HC11 (microbot Tritt) Luis F. GIMILIO BARBOZA ([email protected]) Carlos GARCÍA ARGOS ([email protected]) Andrés ÁLVAREZ MUÑIZ ([email protected]) Yaiza BAILÉN CAMPAÑA Tercero B

Robot MegaMonkey (tm)€¦ · robot correspondiente a la práctica de este año de la asignatura Laboratorio de Sistemas Digitales, consistente en el manejo de un microbot. Este microbot,

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Robot MegaMonkey (tm)€¦ · robot correspondiente a la práctica de este año de la asignatura Laboratorio de Sistemas Digitales, consistente en el manejo de un microbot. Este microbot,

Laboratorio de Sistemas Digitales Departamento de Tecnología Electrónica ETS de Ingenieros de Telecomunicación Universidad de Málaga

Robot MegaMonkey (tm)

Aprendizaje y recorrido de un laberinto mediante microcontrolador 68HC11 (microbot Tritt)

Luis F. GIMILIO BARBOZA ([email protected])

Carlos GARCÍA ARGOS

([email protected])

Andrés ÁLVAREZ MUÑIZ ([email protected])

Yaiza BAILÉN CAMPAÑA

Tercero B

Page 2: Robot MegaMonkey (tm)€¦ · robot correspondiente a la práctica de este año de la asignatura Laboratorio de Sistemas Digitales, consistente en el manejo de un microbot. Este microbot,

Laboratorio de Sistemas Digitales ETSIT Málaga (Superior)

Robot MegaMonkey (tm) Práctica de 68HC11 página 2

Índice 1. Presentación y objetivos ............................................... página 3 2. Diseño del robot............................................................ página 5 3. Plan de pruebas ............................................................. página 16 4. Conclusiones ................................................................. página 19 5. Bibliografía ................................................................... página 20

Page 3: Robot MegaMonkey (tm)€¦ · robot correspondiente a la práctica de este año de la asignatura Laboratorio de Sistemas Digitales, consistente en el manejo de un microbot. Este microbot,

ETS de Ingenieros de Telecomunicación http://www.telecos-malaga.com

Robot MegaMonkey (tm) Práctica de 68HC11 página 3

1 . P r e s e n t a c i ó n y o b j e t i v o s Esta memoria tiene como fin resumir todo el proceso de diseño y puesta en funcionamiento del robot correspondiente a la práctica de este año de la asignatura Laboratorio de Sistemas Digitales, consistente en el manejo de un microbot. Este microbot, el modelo Tritt de Microbótica, deberá ser capaz de resolver un laberinto en el menor tiempo posible, para poder así participar en la prueba de laberinto a realizar en el período de exámenes. Para ello, la estrategia escogida supone un recorrido previo por el laberinto, en el que el robot explorará todos los caminos posibles hasta encontrar la salida, almacenando entonces el camino correcto en memoria, y quedando dispuesto a recorrerlo posteriormente de forma exacta. La elección de este método se basa en buscar la solución más óptima, pues conseguimos emplear una cantidad ínfima de medios (cuatro sensores de bajas prestaciones, y cinta aislante negra), pero ofreciendo unas altas posibilidades de conseguir una salida rápida del laberinto, todo ello aprovechando las distintas memorias incorporadas en el microcontrolador. A continuación presentaremos los dos algoritmos empleados para la resolución del laberinto: el de aprendizaje y el de reproducción. Algoritmo de aprendizaje

El diagrama de flujo de este algoritmo es el siguiente:

Inicio

Conf. inicial

Avanzar

¿cruce?

¿fuera?

¿recto?

¿error?

contar caminos

tomar cruce

actualiz. direcc.

meter en pila

¿0 caminos?

sacar de pila

sigue error dec. camino

meter en pila

ajustar

¿curva?

girar

actualiz. direcc.

media vuelta

activar error

actualiz. direcc.

no

no

no

no

no

no

Page 4: Robot MegaMonkey (tm)€¦ · robot correspondiente a la práctica de este año de la asignatura Laboratorio de Sistemas Digitales, consistente en el manejo de un microbot. Este microbot,

Laboratorio de Sistemas Digitales ETSIT Málaga (Superior)

Robot MegaMonkey (tm) Práctica de 68HC11 página 4

Las características principales del algoritmo consisten en el tratamiento de cruces, pues el resto es bastante simple: el robot avanza continuamente, toma las curvas que sean necesarias, y corrige las desviaciones para mantenerse siempre en la línea negra. Cuando se detecta un cruce, se cuenta el número de caminos posibles que tiene, se realiza el giro correspondiente, y se introduce en la pila el giro realizado, junto con el número de caminos que había. Si el robot se sale completamente de una línea negra, lo que indica que está fuera del circuito, entenderá que la decisión tomada en el último cruce fue incorrecta, y activará un flag de error. Cuando regrese al último cruce que tomó, dado que el flag estará activo, se comprobará si quedan caminos por recorrer, observando cuál fue el último valor introducido en la pila. En el caso de que queden caminos, se decrementará dicho valor en una unidad, introduciéndolo de nuevo en la pila. Y si el camino que originó la media vuelta era el último de los posibles, se dejará activo el flag de error, para seguir con la misma rutina en el próximo cruce. Este algoritmo permite aprender el primer camino que lleve a la salida del laberinto. Así, la única forma de variar el resultado consiste en la decisión a tomar en cada cruce. Para ello, hemos preparado dos códigos distintos, con la única diferencia entre ambos del sentido que se toma por defecto en un cruce a la hora de aprenderlo. De esta forma, podemos explorar el laberinto de forma exhaustiva, hasta encontrar la salida, mediante las reglas de mano derecha o mano izquierda, en función del camino que consideremos más corto cuando observemos el laberinto.

Algoritmo de reproducción El diagrama de flujo es el siguiente:

Inicio

Conf. inicial

Avanzar

¿cruce?

¿fuera?

¿recto?

sacar de pila

ver valor

tomar cruce

actualiz. direcc.

ajustar

¿curva?

girar

actualiz. direcc.

¡FIN!

no

no

no

no

Page 5: Robot MegaMonkey (tm)€¦ · robot correspondiente a la práctica de este año de la asignatura Laboratorio de Sistemas Digitales, consistente en el manejo de un microbot. Este microbot,

ETS de Ingenieros de Telecomunicación http://www.telecos-malaga.com

Robot MegaMonkey (tm) Práctica de 68HC11 página 5

Este algoritmo es mucho más sencillo, pues consiste únicamente en ir recorriendo el laberinto, tomando las curvas y realizando los ajustes que sean necesarios para quedar siempre dentro de la línea negra. En cuanto se detecte un cruce, bastará con mirar el estado de la pila, que refleja el proceso anterior de aprendizaje, y observar cuál fue finalmente la dirección que tomó el robot en su camino a la salida.

Y finalmente, si el robot detecta una salida del circuito, en la forma en que se ha implementado el algoritmo, no hay otra opción de que se trate de la salida del propio laberinto. Así, el robot se detendrá cuando se salga completamente del circuito.

2 . D i s e ñ o d e l r o b o t Dado que la estrategia escogida para la resolución del laberinto fue la de aprendizaje y posterior recorrido del mismo, el diseño del robot se realizó teniendo en cuenta diferentes modos de trabajo en el mismo. Se definieron cuatro estados del robot, de la siguiente forma: Así, el funcionamiento normal del robot consiste en un estado de espera, hasta que se pulsa un botón, que lo coloca en modo aprendizaje, explorando y memorizando el laberinto proporcionado. Una vez aprendido, se deberá volver a pulsar el botón, quedando en modo de espera, y listo para que una nueva pulsación de dicho botón le ordene recorrer el laberinto, en función de los datos almacenados en el proceso de aprendizaje. La tarea de diseño que permite obtener este comportamiento se puede descomponer en dos grandes bloques, correspondientes al diseño del hardware y del software que se empleará en el microbot. Diseño del hardware

Para el diseño del hardware que permita el desplazamiento del robot en el interior del laberinto se barajaron diversas opciones, decidiendo finalmente hacer uso de sensores infrarrojos del modelo CNY 70. Esta solución supone colocar una línea negra a lo largo de todas las calles que formen el laberinto. La desventaja que presenta este sistema es la de tener que colocar dicha línea, pero las ventajas ofrecidas por otro lado son diversas: permite una conducta fiable del robot en el laberinto, un recorrido siempre en la zona central de las calles del mismo, y bastante facilidad a la hora de configurar dichos sensores. La disposición escogida para los sensores se muestra en la figura de la página siguiente.

estado espera 1 modo aprendizaje estado espera 2 modo reproducción

RESET

Page 6: Robot MegaMonkey (tm)€¦ · robot correspondiente a la práctica de este año de la asignatura Laboratorio de Sistemas Digitales, consistente en el manejo de un microbot. Este microbot,

Laboratorio de Sistemas Digitales ETSIT Málaga (Superior)

Robot MegaMonkey (tm)

El número que acompañaconecta. Para poder emrealizar los cálculos cadutilizar para que una inssensores que detecten neg

VAL01 = $03

VAL05 = $87

VAL09 = $83

VAL13 = $06

En cuanto al interruptotarjeta incorpora un pulsaentonces el RESET del sist

Diseño del software La parte central de esta pmicrocontrolador 68HC1robot, y que permite efecdel laberinto. El códigoresumiremos los aspectos Modos de operación Para distinguir entre los memoria etiquetada comoasí su actualización, puesuno es: - $00: modo de espera - $40: modo de explora- $80: modo de espera - $C0: modo de reprod

3 4

1

Práctica de 68HC11

a cada sensor indica la cplear las distintas combia vez, completamos unatrucción BRSET sobre el pro. Incluimos la tabla a co

VAL02 = $02 VA

VAL06 = $84 VA

VAL10 = $07 VA

VAL14 = $81 VA

r mencionado para el camdor conectado a la entradema a la conexión de alim

ráctica lo constituye el pr1. Es este programa el qutuar de forma correcta los fuente se incluye al f más destacados del mism

cuatro modos de operació inter, que tomará los v

basta con sumar $40 para

previo al aprendizaje. ción y aprendizaje del labprevio a la reproducción. ucción del laberinto.

2

página 6

onexión de la tarjeta CT293+ a la que se naciones en el programa sin tener que tabla en la que aparece la máscara a uerto A sea verdadera en función de los ntinuación:

L03 = $01 VAL04 = $00

L07 = $80 VAL08 = $08

L11 = $05 VAL12 = $82

L15 = $85 VAL16 = $86

bio de modo del robot, puesto que la a IRQ, hicimos uso del mismo, limitando entación.

ograma que se carga en la EEPROM del e determina todo el comportamiento del procesos de aprendizaje y reproducción inal de la memoria, y a continuación o.

n del robot, disponemos una variable de alores de $00, $40, $80 o $C0, facilitando cambiar de modo. El significado de cada

erinto.

Page 7: Robot MegaMonkey (tm)€¦ · robot correspondiente a la práctica de este año de la asignatura Laboratorio de Sistemas Digitales, consistente en el manejo de un microbot. Este microbot,

ETS de Ingenieros de Telecomunicación http://www.telecos-malaga.com

Robot MegaMonkey (tm) Práctica de 68HC11 página 7

Así, la rutina de atención a interrupción de IRQ, que será llamada cuando se pulse el interruptor de la tarjeta CT6811, consiste básicamente en sumar $40 al valor de inter. Se tiene en cuenta además que, si el estado actual es de reproducción, una nueva pulsación devuelve el robot al segundo estado de espera (previo a una nueva reproducción). Además, para evitar rebotes en dicho pulsador, se efectúa un bucle software que realiza una espera breve, y permite que se ignoren todos los pulsos espurios dentro de dicho intervalo. Dirección del robot Se utiliza una variable de memoria, etiquetada como direcc, para indicar la dirección a la que apunta el microbot en todo momento. Esta variable, al igual que ocurre con la variable inter, tomará valores de $00, $40, $80 o $C0, permitiendo así avanzar en las coordenadas simplemente sumando o restando un $40. El significado de cada uno es el siguiente: - $00: dirección hacia delante. - $40: dirección hacia la derecha. - $80: dirección hacia atrás. - $C0: dirección hacia la izquierda. Control del puerto A: estado de los sensores Mediante una serie de instrucciones BRSET y BRCLR podemos conocer el estado del robot sobre la línea en todo momento, y tomar entonces la decisión correspondiente a cada caso. De esta forma se detecta si el robot sigue en la línea, o si ha de realizar un ajuste hacia alguno de los lados, de una forma similar al programa de ejemplo del libro de Microbótica, aunque con otros valores en los motores. Por otro lado, en el caso de detectar un cruce, se procede a avanzar el robot un intervalo muy corto de tiempo, y en parte en la dirección correspondiente, para poder comprobar si existe cruce al otro lado del detectado, corrigiendo así los efectos que podría producir el tener el robot desviado en la línea. La disposición de los sensores, en forma de dos delante y dos más atrás, separados el ancho de una línea de laberinto, permite que en el caso de una curva, cruces en T o salida de circuito, la primera situación detectada sea la de “todo-blanco”. En este último caso, la detección de “todo-blanco”, se procede a un breve avance del robot, hasta poder determinar si efectivamente se trata de una situación de fuera del circuito, o si por el contrario se trataba de una curva o de un cruce en T. Los direccionamientos a este puerto A, junto con el registro OPTION, se realizan de forma indexada, para así conseguir un ahorro del espacio del programa en memoria. Subrutina de giro Tanto en el caso de encontrarse el robot ante una curva, como en el caso de algunos cruces, el robot deberá tener la capacidad de realizar el giro. Para ello, se dispone de una subrutina de giro genérica, que efectuará dicha operación en función del valor cargado en el acumulador A de forma previa a su llamada. Esta subrutina consta de los siguientes pasos:

1. Giro en el sentido indicado, hasta dejar atrás la línea negra en que se

encuentra el robot.

Page 8: Robot MegaMonkey (tm)€¦ · robot correspondiente a la práctica de este año de la asignatura Laboratorio de Sistemas Digitales, consistente en el manejo de un microbot. Este microbot,

Laboratorio de Sistemas Digitales ETSIT Málaga (Superior)

Robot MegaMonkey (tm) Práctica de 68HC11 página 8

2. Giro en el sentido indicado, hasta alcanzar la nueva línea negra. 3. Avanzar hacia delante, ajustando desvíos si es necesario, durante un breve intervalo de

tiempo, para dejar atrás así un posible cruce. Rutina de tratamiento de cruces La rutina de tratamiento de cruces es la parte más importante del programa, por tanto en cuanto en ella se realizan todos los aspectos concernientes al manejo de la pila, que desembocarán en la memorización del laberinto. Cuando se detecta un cruce, se comprueba en primer lugar si el flag de error está activo (dando por supuesto que el hecho de estar activo implica inequívocamente modo de aprendizaje). En caso de que no esté activo, se comprueba el modo actual. Si el robot se encuentra en modo aprendizaje, se contará el número de caminos posibles que contenga el cruce, y en el caso de que haya camino al lado correspondiente (izquierda o derecha, en función del programa), se realizará el giro. Si no hay que girar, se avanzará hasta dejar atrás el cruce. Una vez hecho esto, se almacenará en la pila el resultado de sumar el número de caminos restantes con la dirección resultante de haber atravesado el cruce. Esto permite almacenar en un único byte dos datos: la dirección (cuatro bits más significativos) y el número de caminos posibles (cuatro bits menos significativos). De esta forma, si el robot llega a una situación de fuera de circuito, activará el flag de error, y al encontrar el cruce que le hizo llegar a dicho camino sin salida, ejecutará una rutina distinta. Esta rutina supone extraer de la pila el último valor, quedándose únicamente con los cuatro bits menos significativos (el número de caminos posibles), decrementando en una unidad dicho valor. Si el resultado es cero (ya no quedan caminos por probar), el flag de error se mantendrá activo hasta llegar al siguiente cruce. Y si el resultado no es cero, se realizará el giro correspondiente, y se almacenará en la pila el nuevo valor. En el caso de que el robot se encuentre en modo reproducción, se procederá a extraer de la pila el valor correspondiente, quedándose esta vez únicamente con los cuatro bits más significativos (la dirección que toma el robot después del cruce). Restando dicho valor con la dirección actual del robot, se obtendrá un valor que indicará cuál fue el sentido del giro realizado: - $00: seguir hacia delante, dejando atrás el cruce. - $40: girar a la derecha. - $80: (no debería darse) - $C0: girar a la izquierda. Acerca de la implementación de este algoritmo en el programa, hay que destacar el hecho de que se utiliza la misma área de la pila del sistema para almacenar estos datos correspondientes a los cruces. Se ha tomado entonces cuidado de que cualquier subrutina o interrupción empieza y finaliza sin comprometer la integridad de dichos datos. La técnica que hemos empleado para llevar a cabo el direccionamiento indirecto de memoria, mediante el cual se puede acceder a la zona de pila desde dos puntos distintos (el puntero de pila de sistema original, y la variable índice, que sirve de inicio del camino almacenado), consiste en sustituir de forma temporal el contenido del registro puntero de pila con el valor del índice, extraer el dato, y restaurar dicho puntero.

Page 9: Robot MegaMonkey (tm)€¦ · robot correspondiente a la práctica de este año de la asignatura Laboratorio de Sistemas Digitales, consistente en el manejo de un microbot. Este microbot,

ETS de Ingenieros de Telecomunicación http://www.telecos-malaga.com

Robot MegaMonkey (tm) Práctica de 68HC11 página 9

Mapa de memoria empleado Hemos utilizado el robot con la memoria que incorpora el microcontrolador 68HC11, sin ningún tipo de ampliación. Esto es así, por razones de eficiencia (realmente no hace falta más memoria para el programa que hemos diseñado), y suponiendo siempre que las dimensiones del laberinto serán limitadas, y permitirán un número máximo de cruces, por lo que la profundidad de la pila será siempre manejable en la memoria volátil del microcontrolador. Con todo, este es un esquema del mapa resultante:

$0000 - $0007 Variables del programa $0008 - $00C3 Área de la pila del sistema $00C4 - $00FF Direcciones de salto de interrupción

... ... $B600 - $B7C0 Programa principal en EEPROM

Se puede observar que, a nivel práctico, quedan disponibles en memoria RAM 187 bytes, que serán usados por la pila. Si cada cruce se almacena en forma de un único byte, y si estimamos un uso de la pila del sistema de un máximo de unos 20 bytes simultáneamente ocupados, la capacidad de aprendizaje del robot será entonces de unos 160 cruces.

Page 10: Robot MegaMonkey (tm)€¦ · robot correspondiente a la práctica de este año de la asignatura Laboratorio de Sistemas Digitales, consistente en el manejo de un microbot. Este microbot,

Laboratorio de Sistemas Digitales ETSIT Málaga (Superior)

Robot MegaMonkey (tm) Práctica de 68HC11 página 10

Código del programa

A continuación incluimos el código del programa que controla el microbot:

* RoBoT MeGaMoNKeY(tm) * Copyright (c) 2001 by Mix'n'Mojo(tm) * * Aprendizaje y recorrido de un laberinto * mediante el microcontrolador 68HC11. * * Versión: 1.31d (full version) * (aprendizaje a derechas) * * Autor Original: Luis F. Gimilio Barboza * * Modificaciones: Carlos García Argos * Luis F. Gimilio Barboza * * What's new: * * - 1.31d (full): ajuste del tiempo de espera para el control * antirrebotes de IRQ. Detección del fin o salida del * laberinto. ¡Listo para el examen! :-) * * - 1.30 (full): primera versión completa, con cierta * simplificación de código, y revisión completa de * los comentarios. * * - 1.28 (beta): ¡primera versión que funciona! Muchísimos * cambios respecto a las versiones anteriores: giros, * cruces totalmente nuevos, corrección de todos los fallos... * * - 1.20 (beta): modificaciones de Carlos: subrutinas de giro * y ajuste nuevas. * * - 1.19 (alfa): modificación del algoritmo original, incluyendo * la presencia de un flag de error al encontrar un camino * sin salida. * * ETS de Ingenieros de Telecomunicación * Universidad de Málaga * --------------------------------------------------------------- * | Parte 1: Directivas al ensamblador | * --------------------------------------------------------------- * Etiquetas del sistema PORTA EQU $1000 ; Puerto A del microcontrolador (absoluto) OPTION EQU $39 ; Registro de config. opciones (relativo) PILA EQU $C3 ; Inicio del área de pila (absoluto) * Etiquetas de opciones INACTIVO1 EQU $00 ; Fase de espera previa al aprendizaje APRENDER EQU $40 ; Fase de aprendizaje del laberinto INACTIVO2 EQU $80 ; Fase de espera previa al recorrido REPRODUCIR EQU $C0 ; Fase de recorrido del laberinto SALTO EQU $40 ; Salto entre fases * Etiquetas de sensores VAL01 EQU $03 ; NOTA: Para ver el significado de estos VAL02 EQU $02 ; valores, ver página 6 de la memoria. VAL03 EQU $01 VAL04 EQU $00 VAL05 EQU $87 VAL06 EQU $84 VAL07 EQU $80 VAL08 EQU $04 VAL09 EQU $83

Page 11: Robot MegaMonkey (tm)€¦ · robot correspondiente a la práctica de este año de la asignatura Laboratorio de Sistemas Digitales, consistente en el manejo de un microbot. Este microbot,

ETS de Ingenieros de Telecomunicación http://www.telecos-malaga.com

Robot MegaMonkey (tm) Práctica de 68HC11 página 11

VAL10 EQU $07 VAL11 EQU $05 VAL12 EQU $82 VAL13 EQU $06 VAL14 EQU $81 VAL15 EQU $85 VAL16 EQU $86 * Etiquetas de posición/movimiento GIRO EQU $40 ; Valor de dirección giro a derechas GIRO180 EQU $80 ; Valor de dirección giro 180º ADELANTE EQU $00 ; Dirección adelante IZQUIERDA EQU $C0 ; Dirección izquierda ATRAS EQU $80 ; Dirección atrás DERECHA EQU $40 ; Dirección derecha * Etiquetas de tiempos T_AJ1 EQU $03 ; Tiempo de giro (Ajuste) T_AJ2 EQU $04 ; Tiempo de comprobación (Ajuste) T_IRQ EQU $0A ; Tiempo antirrebotes IRQ T_ESP EQU $1D00 ; Tiempo de espera (Espera) T_GIRA1 EQU $04 ; Tiempo de giro (bucle mayor) T_GIRA2 EQU $1FFF ; Tiempo de giro (bucle menor) T_AV_CRUCE EQU $0A ; Tiempo para dejar atrás un cruce * Etiquetas de motores/puerto A M_STOP EQU $00 ; Detenido, con el LED apagado M_LED EQU $40 ; Detenido, con el LED encendido M_AVAN EQU $18 ; Ambos motores hacia delante M_IZQ1 EQU $38 ; Izquierda: atrás Derecha: adelante M_IZQ2 EQU $10 ; Izquierda: off Derecha: adelante M_DER1 EQU $58 ; Izquierda: adelante Derecha: atrás M_DER2 EQU $08 ; Izquierda: adelante Derecha: off * --------------------------------------------------------------- * | Parte 2: Configuración inicial | * --------------------------------------------------------------- * Reserva de espacio en memoria RAM ORG $0 direcc RMB 1 ; Dirección a la que apunta el microbot caminos RMB 1 ; Caminos posibles en cada cruce indice RMB 2 ; Indice para el vector de reproducción pila_temp RMB 2 ; Valor temporal de la pila inter RMB 1 ; Estado del programa error RMB 1 ; Para el flag de camino incorrecto * Inicio del programa en eeprom ORG $B600 ; Inicio de la eeprom * Inicialización de la interrupción de IRQ LDAA #$7E ; Carga el código de JUMP en el acumulador A STAA $EE ; Guarda dicho código en la posición $EE LDD #Int_irq ; Carga la dirección de la rutina de atención en D STD $EF ; Almacena dicho valor en la posición $EF * Configuración del sistema LDX #PORTA ; Inicializa registro X al puerto A CLI ; Permite interrupciones

Page 12: Robot MegaMonkey (tm)€¦ · robot correspondiente a la práctica de este año de la asignatura Laboratorio de Sistemas Digitales, consistente en el manejo de un microbot. Este microbot,

Laboratorio de Sistemas Digitales ETSIT Málaga (Superior)

Robot MegaMonkey (tm) Práctica de 68HC11 página 12

* --------------------------------------------------------------- * | Parte 3: Desarrollo del programa | * --------------------------------------------------------------- Inicio LDAA #INACTIVO1 ; Carga el valor inicial STAA inter ; en la posición de memoria inter. LDS #PILA ; Inicializa el stack pointer * ---> Estados 0 y 2: bucle de espera Inactivo LDAA inter ; Carga el modo actual en el registro Y CMPA #APRENDER ; ¿Modo aprendizaje? BEQ Activo BLO Detener ; Modo espera 1 CMPA #REPRODUCIR ; ¿Modo reproducir? BEQ Activo LDAA #M_LED ; Modo espera 2: enciende LED BRA Fin_inactivo Detener LDAA #M_STOP ; Detiene al microbot (modos de espera) Fin_inactivo STAA $0,X BRA Inactivo * ---> Estados 1 y 3: modo aprendizaje y reproducción Activo LDAA #ADELANTE ; Carga en el acumulador la dirección adelante STAA direcc ; y se almacena en la posición de memoria direcc LDY #PILA ; Carga el valor de índice del vector de STY indice ; reproducción, que coincide con la pila. LDAA #M_STOP ; Carga un cero en la posición de memoria STAA error ; error (flag de camino equivocado). Sondeo LDAA inter ; Comprueba si no finaliza el modo CMPA #INACTIVO2 ; de aprendizaje/reproducción. BEQ Inactivo BRCLR $0,X VAL05 TodoBlanco ; Detecta todo blanco BRCLR $0,X VAL15 Corrige_der ; Detecta desviación izquierda BRCLR $0,X VAL16 Corrige_izq ; Detecta desviación derecha BRCLR $0,X VAL06 Avanza ; Detecta línea adelante BRA Cruce ; Y si no, es un cruce TodoBlanco JSR Ajuste ; Avanza un poco (evita errores) BRCLR $0,X VAL05 A_Fuera ; Detecta fuera del circuito BRCLR $0,X VAL09 Curva_der ; Detecta curva a la derecha BRCLR $0,X VAL10 Curva_izq ; Detecta curva a la izquierda BRA Cruce_2 ; En otro caso, es un cruce A_Fuera JMP Fuera Corrige_izq LDAA #M_IZQ2 ; Activa sólo motor derecho BRA Fin_corrige ; (corrección hacia la izquierda) Corrige_der LDAA #M_DER2 ; Activa sólo motor izquierdo BRA Fin_corrige ; (corrección hacia la derecha) Avanza LDAA #M_AVAN ; Activa ambos motores hacia delante Fin_corrige STAA $0,X ; Realiza el cambio en los motores BRA Sondeo Curva_izq LDAA #M_IZQ1 ; Sentido de los motores LDAB #IZQUIERDA ; Sentido del giro BRA Curva Curva_der LDAA #M_DER1 ; Sentido de los motores LDAB #DERECHA ; Sentido del giro

Page 13: Robot MegaMonkey (tm)€¦ · robot correspondiente a la práctica de este año de la asignatura Laboratorio de Sistemas Digitales, consistente en el manejo de un microbot. Este microbot,

ETS de Ingenieros de Telecomunicación http://www.telecos-malaga.com

Robot MegaMonkey (tm) Práctica de 68HC11 página 13

Curva JSR Gira ; Realiza el giro de forma completa LDAA #GIRO CBA ; Comprueba si el giro realizado es a la derecha, BEQ Sigue_curva ; y en ese caso se suma 40 a la dirección. NEGA ; En caso contrario, se resta dicho valor. Sigue_curva LDAB direcc ABA ; Suma/resta el valor GIRO a la dirección STAA direcc ; y la almacena. BRA Sondeo Cruce JSR Ajuste ; Avanza, para comprobación Cruce_2 LDAA error ; Comprueba si el flag de error CMPA #$01 ; está activo, pues el tratamiento BEQ Cruce_error ; en ese caso es distinto. LDAA inter ; Comprueba si está en modo de CMPA #REPRODUCIR ; reproducción. BEQ Cruce_rep BRCLR $0,X VAL01 Cruce_T ; Detecta cruce en T BRSET $0,X VAL06 Cruce_X ; Detecta cruce en X BRSET $0,X VAL07 Cruce_izq ; Detecta cruce adelante e izquierda BRSET $0,X VAL08 Cruce_der ; Detecta cruce adelante y derecha JMP Fin_cruce Cruce_error PULB ; Saca el último valor de la pila ANDB #$0F ; Elimina los 4 bits superiores DECB ; Decrementa los 4 bits inferiores BEQ Sigue_error ; Comprueba si quedan caminos LDAA #$00 ; Si todavía quedan, baja el flag STAA error ; de camino equivocado. Sigue_error BRSET $0,X VAL08 Gira_cruce ; Comprueba camino a la derecha STAB caminos ; Almacena los caminos restantes LDAB #$00 BRA Sigue_cruce Cruce_X LDAB #$03 ; Cruce en X: 3 caminos posibles BRA Gira_cruce Cruce_T LDAB #$02 ; Cruce en T: 2 caminos posibles BRA Gira_cruce Cruce_izq LDAB #$02 ; Cruce izq.: 2 caminos posibles STAB caminos LDAB #$00 ; Cruce de frente y a la izquierda, BRA Sigue_cruce ; no hace falta ningún giro. Cruce_der LDAB #02 ; Cruce der.: 2 caminos posibles Gira_cruce STAB caminos ; Guarda el número de caminos LDAA #M_DER1 ; Carga el valor de giro derecha JSR Gira ; Realiza el giro completo LDAB #GIRO ; Carga el valor $40 Sigue_cruce LDAA direcc ; Actualiza la nueva dirección ABA ; sumando el salto pertinente. STAA direcc ; La almacena en memoria BSR Ajuste ; Avanza hasta dejar atrás el cruce LDAA error ; Comprueba si el flag de error CMPA #$01 ; está activo, y en ese caso no BEQ Fin_cruce ; se introduce nada en pila. LDAA direcc ; Direcc. --> 4 bits superiores LDAB caminos ; Caminos --> 4 bits inferiores ABA ; Suma ambos valores PSHA ; Y los almacena en la pila BRA Fin_cruce Cruce_rep STS pila_temp ; Almacena temporalmente el SP LDS indice ; Carga el índice en registro S DES ; Lo decrementa STS indice ; Y actualiza la variable índice PULA ; Saca el valor del índice

Page 14: Robot MegaMonkey (tm)€¦ · robot correspondiente a la práctica de este año de la asignatura Laboratorio de Sistemas Digitales, consistente en el manejo de un microbot. Este microbot,

Laboratorio de Sistemas Digitales ETSIT Málaga (Superior)

Robot MegaMonkey (tm) Práctica de 68HC11 página 14

LDS pila_temp ; Restaura la pila ANDA #$F0 ; Elimina los 4 bits inferiores LDAB direcc ; Carga la dirección en B NEGB ; Y la niega, para obtener el valor ABA ; de la resta en A. CMPA #DERECHA ; Comprueba si es giro a la derecha BEQ Rep_der ; Y en ese caso se realiza el giro CMPA #IZQUIERDA ; Comprueba si es giro a la izquierda BEQ Rep_izq ; Y en ese caso se realiza el giro LDAA #M_AVAN ; En otro caso, avanza hasta dejar STAA $0,X ; atrás el cruce. LDAA #T_AV_CRUCE BSR Espera Fin_cruce JMP Sondeo Rep_der JMP Curva_der Rep_izq JMP Curva_izq * Fuera de la línea Fuera BSR Ajuste ; Sale completamente de la línea BSR Ajuste ; negra, para poder dar un buen giro. LDAA inter ; Comprueba si estamos en CMPA #REPRODUCIR ; modo reproducción. BEQ Fuera_rep ; En ese caso, fin del laberinto LDAA #M_IZQ1 ; Realiza el giro completo JSR Gira ; hacia la izquierda. LDAA direcc ; Carga la dirección en A LDAB #GIRO180 ; Carga el valor del giro completo en B ABA ; Suma ambos valores STAA direcc ; Almacena la nueva dirección en direcc LDAA #$01 ; Activa el flag de camino equivocado STAA error ; y lo almacena en la variable error. BRA Fin_fuera Fuera_rep LDAA #INACTIVO2 ; Carga el estado 2 en el registro A STAA inter ; Almacena el cambio en la memoria Fin_fuera JMP Sondeo * --------------------------------------------------------------- * | Parte 4: Subrutinas | * --------------------------------------------------------------- * Subrutina de ajuste, avanza y gira al llegar a un posible cruce Ajuste LDAA #M_AVAN ; En principio, avance BRCLR $0,X VAL06 Sigue_ajuste ; Si estamos en una linea o fuera BRCLR $0,X VAL08 Ajuste_izq ; Si el de la derecha esta blanco BRCLR $0,X VAL07 Ajuste_der ; O si lo está el de la izquierda BRA Sigue_ajuste Ajuste_izq LDAA #M_IZQ2 ; Gira hacia la izquierda BRA Sigue_ajuste Ajuste_der LDAA #M_DER2 ; Gira hacia la derecha Sigue_ajuste STAA $0,X ; Hace la operación que proceda, LDAA #T_AJ1 ; según el estado de los sensores BSR Espera LDAA #M_AVAN ; Ahora avanza un cierto tiempo STAA $0,X LDAA #T_AJ2 BSR Espera RTS

Page 15: Robot MegaMonkey (tm)€¦ · robot correspondiente a la práctica de este año de la asignatura Laboratorio de Sistemas Digitales, consistente en el manejo de un microbot. Este microbot,

ETS de Ingenieros de Telecomunicación http://www.telecos-malaga.com

Robot MegaMonkey (tm) Práctica de 68HC11 página 15

* Subrutina de espera Espera LDY #T_ESP ; Carga en Y el valor de la cuenta Bucle_esp DEY ; Realiza la cuenta menor BNE Bucle_esp DECA ; Realiza la cuenta mayor BNE Espera RTS * Subrutinas de giro Gira PSHB ; Almacena el registro B STAA $0,X ; Carga el puerto con el giro Encuentra1 BRCLR $0,X VAL01 Encuentra2 ; Abandona la línea negra actual BRA Encuentra1 Encuentra2 BRSET $0,X VAL01 Sigue_gira ; Busca la siguiente línea negra BRA Encuentra2 Sigue_gira LDAA #M_STOP ; Detiene de forma temporal STAA $0,X ; el robot. LDAB #T_GIRA1 Bucle_gira1 LDY #T_GIRA2 ; Comienza a ajustar el robot a Bucle_gira2 ; la línea negra durante un cierto DEY ; tiempo, para dejar atrás la curva BEQ Fin_gira2 ; o el cruce. BRCLR $0,X VAL02 Gira_izq ; Detecta desviación derecha BRCLR $0,X VAL03 Gira_der ; Detecta desviación izquierda Gira_av LDAA #M_AVAN ; En otro caso, avanza BRA Sigue2 Gira_der LDAA #M_DER2 ; Carga el valor de giro a derecha BRA Sigue2 Gira_izq LDAA #M_IZQ2 ; Carga el valor de giro a izquierda Sigue2 STAA $0,X ; Lo almacena y vuelve al bucle BRA Bucle_gira2 Fin_gira2 DECB ; Controla el bucle mayor BEQ Fin_gira1 BRA Bucle_gira1 Fin_gira1 PULB ; Restaura el valor del ac. B RTS * --------------------------------------------------------------- * | Parte 5: Rutinas de atención a interrupción | * --------------------------------------------------------------- * Rutina de atención de la interrupción de IRQ Int_irq LDAA inter ; Carga el modo actual en el registro A CMPA #REPRODUCIR ; Comprueba si estaba en modo reproducción BEQ Vuelve_2 ; En ese caso, vuelve a dicho modo LDAB #SALTO ; Si no, se suma 40 al modo, pasando al ABA ; modo correspondiente. BRA Fin_irq Vuelve_2 LDAA #INACTIVO2 ; Carga el estado 2 en el registro A Fin_irq STAA inter ; Almacena el cambio en la memoria LDAA #T_IRQ ; Espera un cierto tiempo BSR Espera ; para evitar rebotes. RTI ; Retorno de interrupción END

Page 16: Robot MegaMonkey (tm)€¦ · robot correspondiente a la práctica de este año de la asignatura Laboratorio de Sistemas Digitales, consistente en el manejo de un microbot. Este microbot,

Laboratorio de Sistemas Digitales ETSIT Málaga (Superior)

Robot MegaMonkey (tm) Práctica de 68HC11 página 16

3 . P l a n d e p r u e b a s Para probar el funcionamiento correcto del programa y el robot, se emplearon los siguientes circuitos, implementados todos ellos mediante folios blancos y líneas de cinta aislante negra: Circuito 1

Circuito sencillo, en el que se comprueba la correcta actualización de la variable direcc al realizar una curva, y el tratamiento de cruces en T, y cruces hacia delante e izquierda o derecha (en función de los extremos que se tomen como entrada y como salida). Podemos utilizar hasta 6 laberintos distintos.

Circuito 2

Similar al anterior, aunque esta vez permite mayor diversidad de cruces, incluyendo ya el cruce en X. La profundidad máxima es de dos cruces, y podemos usar hasta 20 laberintos distintos.

Circuito 3

Circuito con profundidad máxima de tres cruces. Además, se realizó de forma que la distancia entre los cruces fuese muy reducida, para así comprobar el correcto funcionamiento de las rutinas de ajuste y giros en casos límite. Podemos utilizar hasta 30 laberintos.

Page 17: Robot MegaMonkey (tm)€¦ · robot correspondiente a la práctica de este año de la asignatura Laboratorio de Sistemas Digitales, consistente en el manejo de un microbot. Este microbot,

ETS de Ingenieros de Telecomunicación http://www.telecos-malaga.com

Robot MegaMonkey (tm) Práctica de 68HC11 página 17

En estos tres circuitos se realizó un estudio del comportamiento del robot, tomando un extremo como entrada y otro como salida del laberinto. Esta operación se realizó para todas y cada una de las entradas y salidas posibles de todos los circuitos. Una de las formas de evaluación consistió en la entrada del robot en un bucle de espera infinito al detectar alguna configuración de sensores o valor en registro determinado, para así poder observar desde el exterior cuándo se actualizaban ciertas variables deseadas. Los resultados fueron evolucionando, a medida que se fueron descubriendo y arreglando los errores en el programa. Finalmente, el robot resuelve sin ningún tipo de error cualquier laberinto basado en los circuitos anteriores. Circuito de pruebas de la Isla Dinky(tm)

Este es un circuito que se dibujó una vez que el robot funcionaba completamente, con tres objetivos: - realizar pruebas con distintos tipos de pilas, - permitir tener un circuito grande sobre el que probar el funcionamiento tras simplificar

el código, - y, en especial, divertirse uno mismo y a sus amigos después de las horas de trabajo

programando, viendo cómo el robot busca y encuentra un tesoro en una isla, ¡guiado por el mono Yoyo!

Se trata, además, de una quiniela personal del grupo, de lo que pensamos puede ser de forma aproximada el laberinto que debamos resolver el día del examen. Como prueba adicional, colocamos una gran cantidad de líneas negras sobre este circuito, llegando a tener una profundidad de hasta 12 cruces, sin que se notase un comportamiento distinto del robot. Comprobamos, al igual que con el Circuito 3, el comportamiento del robot en situaciones de giros muy estrechos, obteniendo resultados satisfactorios.

El dibujo de este circuito se incluye en la página siguiente.

Page 18: Robot MegaMonkey (tm)€¦ · robot correspondiente a la práctica de este año de la asignatura Laboratorio de Sistemas Digitales, consistente en el manejo de un microbot. Este microbot,

Laboratorio de Sistemas Digitales ETSIT Málaga (Superior)

Robot MegaMonkey (tm) Práctica de 68HC11 página 18

Page 19: Robot MegaMonkey (tm)€¦ · robot correspondiente a la práctica de este año de la asignatura Laboratorio de Sistemas Digitales, consistente en el manejo de un microbot. Este microbot,

ETS de Ingenieros de Telecomunicación http://www.telecos-malaga.com

Robot MegaMonkey (tm) Práctica de 68HC11 página 19

4 . C o n c l u s i o n e s “¡Tierra a la vistaaaaaaaaaaaaa!”, “¡Suelten anclas!”, “¡Todos a tierra!”, “¡Yoyo, súbete al robot y busca el tesoro!”... Y es que nunca una práctica de laboratorio había sabido combinar tan bien dos aspectos generalmente opuestos: - una parte de programación pura y dura, en ensamblador, que supone muchas vueltas y

complicaciones para obtener resultados eficientes, y con abundantes dolores de cabeza. - pero una alegría y diversión incomparables cuando uno observa cómo el robot comienza a

girar hacia el lado correcto cuando llega a un cruce, o cuando responde exactamente al comportamiento que tantas horas se ha intentado encontrar.

Sin duda alguna, ésta ha sido una de las prácticas, si no más interesantes, sí más entretenidas de lo que llevamos de carrera. Y quizás le falte a esta memoria cierto rigor en algunos aspectos (mira que llamar a un robot algo así como MegaMonkey...), pero es el resultado secundario de haberle dedicado demasiadas horas a un robot... uno termina por ver banderas pirata donde antes había sólo unos soportes negros... Hemos intentado conseguir un comportamiento eficiente al máximo, ajustando con detalle las diversas rutinas que controlan el movimiento del robot siguiendo la línea, con el objetivo de ganar todo el tiempo posible. En especial, la elección de la estrategia ha respondido a este objetivo de eficiencia: en teoría, se trata de la solución más directa a la salida (si no tenemos en cuenta posteriores técnicas de simplificación de caminos), pues es la propia salida la que se encuentra almacenada en memoria, y con el mínimo presupuesto (poco más que cuatro sensores baratos y las pilas de turno). Y, en fin, lo único que queda ya es esperar a que este pequeño cacharrito funcione bien el día del examen, y no nos deje en mal lugar. Y quién sabe, quizás se lleve el premio... aunque sea al robot más gracioso... !

Los componentes del grupo

Page 20: Robot MegaMonkey (tm)€¦ · robot correspondiente a la práctica de este año de la asignatura Laboratorio de Sistemas Digitales, consistente en el manejo de un microbot. Este microbot,

Laboratorio de Sistemas Digitales ETSIT Málaga (Superior)

Robot MegaMonkey (tm) Práctica de 68HC11 página 20

5 . B i b l i o g r a f í a

Apuntes de Sistemas Digitales Departamento de Tecnología Electrónica Universidad de Málaga M68HC11 Reference Manual Motorola Manual del Tritt Microbótica Secret of Monkey Island (I & II) LucasFilm Games (LucasArts)

Page 21: Robot MegaMonkey (tm)€¦ · robot correspondiente a la práctica de este año de la asignatura Laboratorio de Sistemas Digitales, consistente en el manejo de un microbot. Este microbot,

ETS de Ingenieros de Telecomunicación http://www.telecos-malaga.com

Robot MegaMonkey (tm) Práctica de 68HC11 página 21

Robot MegaMonkey (tm)

Aprendizaje y recorrido de un laberinto mediante microcontrolador 68HC11 (microbot Tritt)

Luis F. GIMILIO BARBOZA ([email protected])

Carlos GARCÍA ARGOS

([email protected])

Andrés ÁLVAREZ MUÑIZ ([email protected])

Yaiza BAILÉN CAMPAÑA

Alumnos de tercer curso de Ingeniería de Telecomunicación (Superior) Grupo B

ETS de Ingenieros de Telecomunicación

Universidad de Málaga