Está en la página 1de 19

PROYECTO MICROPROCESADORES – ROBOT MINISUMO 1

Proyecto de Microprocesadores y
ensambladores.
Robot Mini sumo Con Servomotores
Universidad del Valle, Diciembre 2008
CESAR FERNANDO NEIRA PEÑA 0325091, YEISON CASTAÑO 0330471

Primero se explicaran los requerimientos del


Resumen----En este informe se describe el procedimiento proyecto, luego se hará una explicación de cómo se
para cumplir con el objetivo de crear un robot mini sumo que
además tendrá características extras como ser un seguidor de
logro cada objetivo individualmente y por último se
línea y evasor de obstáculos. El robot manejara para su mostrara el resultado tanto software como hardware
movimiento servomotores en dos de sus 3 llantas, para la del robot completo.
detección de obstáculos y medición de distancia un sensor de
ultrasonido referencia SRF02 y para el seguimiento de línea se
contara con dos sensores ópticos CNY70, el control del robot se
hará con un microcontrolador AT89c52 programado en II. REQUERIMIENTOS
lenguaje ensamblador .

EVADIR OBSTACULOS
Palabras clave------Microcontrolador, sensor de distancia,
comunicación serial, servomotores, sensores ópticos, lenguaje El robot será capaz de desplazarse por un área con
ensamblador. obstáculos localizándolos a medida que avanza y evitando
chocarse con ellos.

I. INTRODUCTION SEGUIR LINEA

Seguir una línea de color negro, su forma no tiene que


E N el curso de microprocesadores se abarco el
estudio del lenguaje ensamblador con el cual se
tener una forma predeterminada, el robot seguirá las
diferentes curvas o rectas que tome esta guía a lo largo del
hicieron algunos programas prácticos simulados trayecto.
sobre el 8086, con esta experiencia y los
conocimientos posteriores sobre micro controladores ROBOT MINI SUMO
se implemento en un AT89c52 una aplicación con la
cual se manejara el PWM que controla los Competir contra otro robot, el objetivo es sacar al
contrincante de un círculo con un diámetro definido, esto
servomotores que darán movimiento al robot. implica entre sus tareas el encontrar al otro participante y
Cuenta con un grupo de sensores los cuales según luego ir en búsqueda de empujarlo, teniendo siempre
requerimientos controlaran la dirección de las presente evitar salirse o que lo saquen de área de
rotaciones individuales de las dos llantas con competencia.
tracción con que se cuenta. El ojo del robot que
también ofrecen la posibilidad de medir distancia y
que será el que informa sobre la presencia o no de III. PROCEDIMIENTO
obstáculos es un sensor de ultrasonido que hace uso
del puerto serie, para el seguimiento línea se usaran El robot contara con 3 modos cada uno para cumplir
dos sensores CNY estos también serán los con uno de los requerimientos, se vera a lo largo de la
encargados de evitar que el robot se salga del área explicacion que los modos no estan realmente
de combate en el modo pelea del robot mini sumo. separados ya que cada uno hace uso en menor a
mayor manera de las caracteristicas usadas en los
otros.
PROYECTO MICROPROCESADORES – ROBOT MINISUMO 2

1. MODO EVASION DE OBSTACULOS


En las cuales la dos de adelante tendrán la fuerza y
El siguiente diagrama de flujo (diagrama de flujo darán la dirección teniendo un control individual ya
#1) presenta el funcionamiento de manera general: que cada una cuenta con un servomotor que es
manejado por medio de señales de PWM que se
explicaran más adelante.

La llanta trasera será una rueda libre que solo seguirá


el movimiento de las dos delanteras dando estabilidad
no se tiene ningún control sobre ella.

SERVOMOTORES

Se adquirió un servomotor genérico, que tenia


características del servomotor Futaba referencia S3003,
Es un tipo de motor de c.c especial y la caracteristica
principal que poseen es la de poder posicionarse en
una posicion indicada dentro de un intervalo
normalmente de 180°. Para los requerimientos del
robot (el giro de las llantas) se requiere de un rango
completo 360° para lo cual se tuvo que hacer una
alteracion al motor, quitando las imitantes que le
daban ese pequeño intervalo de trabajo. Este motor es
manejado por medio de un tren de pulsos que le diran
el angulo a buscar de la siguiente manera:

Diagrama de flujo # 1. Modo evasión de obstáculos

Profundizando en las características de este modo se


explicara primero lo referente a las llantas y los
motores asociados a ellas y luego el sensor que se
encarga de verificar la existencia de obstáculos.

ORGANIZACIÓN DE LAS LLANTAS Figura 2.


Se realizo una configuración con 3 llantas (figura 1)
Estas 3 posiciones son las elementales pero con
pulsos intermedios se tendran el resto de los angulos.
Por medio de un potenciometro interno que gira junto
con el motor el servo es capaz de saber su
localizacion en grados y parar cuando llegue a la
posicion pedida, dependiendo del pulso que se le de y
que se encuentre en su rango de operación el avanzara
o retrocedera con mayor o menor velocidad
dependiendo de la posicion actual y la distancia que
lo separa de la pedida, para que el motor mantenga
una posicion y se oponga a cambios externos necesita
Figura 1. de una continua llegada de pulsos de un mismo valor.
PROYECTO MICROPROCESADORES – ROBOT MINISUMO 3

La primera limitante para poder lograr un giro MOVIMIENTO MOTOR 1 MOTOR 2


completo es un tope fisico en los engranajes internos DE ROBOT
de su caja reductora (figura 3), que no deja superar los
Φ > 90 Φ < 90
180° de rotacion, para esto fue necesario abrir el ADELANTE
motor el cual viene en una pequeña caja. ATRÁS Φ < 90 Φ > 90
GIRO
Φ < 90 Φ < 90
IZQUIERDA
GIRO
Φ > 90 Φ > 90
DERECHA
PARADO Φ = 90 Φ = 90

Para proveer la mayor velocidad se enviaran pulsos


referentes a 180° o 0°, se observa que al ir adelante o
atrás las rotaciones de los motores debe estar
invertidas esto por la forma en que se ubicaron los
motores respecto a las llantas, figura 6.

Figura 3. Piñones del servomotor

El segundo problema es una realimentacion que le


indica la posicion actual, para engañar a esta
realimentacion se suprimio el potenciometro que
censaba la posicion (figura 4) al medirlo se encontro Figura 6. Posición de los motore.
que era un poteniometro de 5kΩ este fue cambiado
por un trimmer con el que se ajusto el valor Como se dijo anteriormente los motores son
intermedio del potenciometro asociado a 90°, de esta controlados por un tren de pulsos con diferentes
manera la unica posicion en la que la realimentacion duraciones este control también conocido como
funcionara y le dira que pare sera cuando se le envie modulación por anchura de pulso, PWM (Pulse Width
el pulso para que se hubique en 90°. Modulation), fueron generados con ayuda de los
temporizadores T0 Y T2 del microcontrolador. Cabe
notar que se debió hacer uso del temporizador T2 ya
que el temporizador T1 se utiliza para el manejo de la
comunicación serial entre el sensor y el micro.

PWM
Respecto al manejo de los temporizadores se
manejaron los registros asociados a cada uno, para el
temporizador 0 y 1 se tiene el registro TCON Y
TMOD :
Figura 5. Potenciómetro del servomotor
TCON:
Para otros valores rotara para la derecha (si se le pide
un ángulo mayor a 90°) o la izquierda (si se le pide
ángulo menor) de manera indefinida mientras el pulso
este presente ya que nunca tendrá una referencia para
saber que llego y que tiene que parar. Teniendo este
control sobre la dirección de la rotación ya se puede
manejar el movimiento del robot enviándole a cada De este registro lo único que se utilizara será los bits
llanta el pulso correspondiente al ángulo Φ que dará TR1 Y TR0 que se usan para que los contadores
el movimiento deseado. inicien la cuenta.
PROYECTO MICROPROCESADORES – ROBOT MINISUMO 4

TMOD: flujo #2 se observa la idea:

En este registro se modifica los bits M0 y M1


asociados al timer 0 de manera que se escoja el modo
en el que funcionara:

M1 M0 MODO DE
OPERACIÓN
0 0 MODO 0
0 1 MODO 1
1 0 MODO 2
1 1 MODO 3

Para lograr este PWM también se requiere modificar


el registro TMOD en el cual se escoge el modo en el
cual el temporizador trabajara, se escogió para el
temporizador T0 el modo 1 en el cual trabaja como un
temporizador de 16 bits en el cual se le puede fijar un
inicio en un valor dado en sus registros TH0 y TL0.
Este temporizador producirá uno de los pwm, el otro
será producido por el temporizador T2 este de igual
manera se colocara en el modo para que sea un
temporizador de 16 bits, también cuenta con registros
en los que se carga un valor inicial:
Su registro de control

T2CON:

Para seleccionar el modo de este temporizador se


Diagrama de flujo # 2. Generación PWM
modifican los bits 5, 4, 2 y 0 del T2CON.
Cuando los temporizadores terminan la cuenta
generan una interrupción por temporizador, para que
el micro detecte las interrupciones de los
temporizadores se tienen que habilitar previamente
en el registro IE (interrupts enable).

REGISTRO IE

EA X ET2 ES ET1 EX1 ET0 EXO

Para habilitar las interrupciones de los temporizadores


La forma en que se genera el PWM con cada uno de T0 y T2 basta con poner en 1 el bit EA que es la
los temporizadores es la misma. En el diagrama de activación global y junto con ella habilitar los
PROYECTO MICROPROCESADORES – ROBOT MINISUMO 5

correspondientes ET2 y ET0 que hacen referencia a comunicación serie estándar con niveles TTL a 9600
las interrupciones de los timers 2 y 0 baudios.
correspondientemente, las cuales se activan cada que
los contadores llegan a su cuenta máxima para los
modos que se están usando que es de tipo 16 bits la
cuenta máxima a la que se podrá llegar será FFFFH lo
que equivale a 32,767mseg que es suficiente para
cubrir el ciclo del PWM del servo que es de 20mseg.

SENSOR UTILIZADO

El sensor frontal del robot es de referencia SRF02


(figura 7), el cual es un medidor ultrasónico de Figura No 8. Modo de conexión para comunicación
distancia que emplea un único transductor; es decir serial de SRF02
con un mismo dispositivo realice la transmisión y
recepción de las señales; acepta comunicaciones I2C
y serie, esta segunda fue la elegida ya que el COMUNICACION SERIAL DEL
microcontrolador 89c52 posee puerto serie, la MICRONTROLADOR AT89C52
interface serie del sensor tiene un formato estándar de
a 9600 baudios 1 bit de inicio, 2 de stop y sin paridad. Características del Puerto serie del 89c52
Los niveles de tensión son TTL por lo que se puede
conectar directamente al microcontrolador. Habilidad de comunicación full-dúplex.
Habilidad de comunicación sincrónica y
asíncrona.
Compatible con TTL.
Cuatro modos de operación.
Velocidades de transmisión y recepción
estándares RS-232.

EL 89C52 posee el registro SCON con el cual se


configura la comunicación serial y se muestra en la
figura No 3
Figura 7. Sensor SRF02

CARACTRERISTICAS GENERALES
Finalice
Tensión de alimentación 5Vcc FIGURA No 3. REGISTRO DE CONTROL DEL
Consumo típico de 4mA PUERTO SERIE.
Frecuencia ultrasónica de 40KHz
Control automático de ganancia RI bandera de interrupción de recepción.
Rango de medidas de 15 cm hasta 6 m TI bandera de interrupción de transmisión.
La comunicación serie con la que se controlo este RB8 es el noveno bit recibió en modo 2 y 3
sensor se explica a continuación: TB8 es el noveno bit a transmitir en modo 2 y 3
REN habilitación de la recepción
COMUNICACION SERIE SM2 habilitación del modo multiprocesador
SM0, SM1 especificación del modo de operación
MODO SERIAL DEL SENSOR SRF02
Para el proyecto se trabajo con el puerto serie en
Este modo de interfaz entre el SRF02 y el master es modo 1 el cual posee las siguientes características
seleccionado realizando la conexión de pines que se
muestra en la figura No 2, así se configura una Comunicación Full dúplex.
Asíncrono
PROYECTO MICROPROCESADORES – ROBOT MINISUMO 6

Baudaje programable generado por el


timer1
Compatible con RS-232

El sensor envía la distancia tomada en 16 bits, posee


un rango de medida de 15 cm a 6 mts, pero ya que el
objetivo en el modo esquiva objetos del robot es
detectar objetos cercanos el programa solo tendrá en
cuenta la información del sensor cuando este
devuelva una medida pequeña lo que significara que
hay un obstáculo, la distancia para la cual tomara la
decisión de esquivar se vio limitada a la medida
mínima del sensor que puede variar en algunos
centímetros dependiendo de la temperatura,
realizando pruebas al sensor por separado se
obtuvieron los siguientes valores reales para
diferentes medidas:

DISTANCIA REAL MEDIDA


DEL OBJETO ENTREGADA POR EL
SENSOR
> 18 cm, < 23 cm Tolerancia de + 3cm
> 24 cm, < 100 cm Tolerancia de ± 3cm
> 100 cm, < 550 cm Tolerancia de ± 4cm
< 18 cm Tolerancia de + 15cm
> 550 cm 0 cm
Tabla #1. Pruebas sensor de ultrasonido

De la tabla anterior se obtuvo que la medida mínima


del sensor es aproximadamente de 18 cm, por debajo
de esta medida lo datos serán erróneos y estarán entre
la medida devuelta estará entre 21cm y 33cm por lo
que se decidió que cuando el sensor encuentre una
medida igual o menor a 32 se supondrá que hay un
obstáculo y girara para evitarlo en los casos en que las
medidas sean mayores seguirá hacia adelante, el
código de evasión sigue lo mostrado en el diagrama
de flujo visto al principio de la explicación de este
modo.

Para pedir información al sensor hay que seguir con


unas reglas enviándole una secuencia de comandos
para:

Ajuste del sensor, petición de medida y toma de


resultados, como se ve en el diagrama de flujo #3,
para pasar de un comando a otro se están verificando
las banderas asociadas al envió y transmisión de datos
por el puerto serial del microcontrolador RI y TI. Diagrama de flujo # 3. Comunicación sensor µprocesador

Al terminar la recepción los datos quedan guardados


en dos variables en la memoria interna del
microcontrolador PALTA, y PBAJA:
PROYECTO MICROPROCESADORES – ROBOT MINISUMO 7

Luego de obtener la medida el microcontrolador debe PALTA PBAJA MEDIDA ACCION


realizar una comparación y tomar la decisión SEGUIR
0 0 ∞
adecuada, esto se hizo haciendo una comparación ADELANTE
lógica AND, como se dijo anteriormente la medida SEGUIR
≠0 X > 255 CM
ADELANTE
entregada se encuentra en 16 bits y se quiere que si la
SEGUIR
medida esta por debajo de los 32cm el robot realice 0 ≥ 32 ≥ 32 CM < 600 CM
ADELANTE
un giro, lo que significa lo mismo que si por lo
menos algún de los 6 bits menos significativos esta en 0 < 32 < 32 ESQUIVAR
uno y los 10 mas significativos en cero se cumplirá la Tabla #2. Acciones del motor después de la medida.
comparación, de esta manera la comparación a
realizar será la siguiente: Donde PALTA el el registro de 8 bits donde se
encuentra a parte alta de la medida y PBAJA es el
El registro que tiene la parte alta de la medida se le registro donde se encuentra la parte baja como se
hará una and con FFH así solo en el caso en que los 8 había dicho anteriormente, la X hace referencia a que
bits sean cero la comparación dará como resultado no importa el valor que tome PBAJA en ese caso.
cero,
NOTA: Cabe anotar que cuando el robot toma la
PARTE decisión de girar esta esta condicionada por un
X X X X X X X X
ALTA retardo de esta manera no se queda girando
COMPARAR
1 1 1 1 1 1 1 1 eternamente, este retardo hará que el robot realice tan
CON FFH
solo un giro de aproximadamente 90 grados antes de
volver a mirar si hay un obstáculo y saber si debe
Si alguno de sus bits estuviera en uno significaría que
seguir girando o puede ir adelante.
la medida esta por encima de los 255 centímetros, en
este caso el robot podrá omitir la revisión de la parte
baja y seguir adelante pasando a pedir una nueva
medida, en caso de que la comparación sea cero se
podrían dar dos casos:

Que tengamos una medida por encima de los 6 mts


para esto faltaría ver si la parte baja de la medida
también es cero, o que la medida este por debajo de
los 255 cm, para saberlo se realiza una segunda AND
con la parte baja en este caso la comparación se hará
con el valor E0, de esta manera la comparación solo
cera igual a cero en caso de que se encuentren en cero
los 3 bits más significativos de este registro:

PARTE
X X X X X X X X
ALTA
COMPARAR
1 1 1 0 0 0 0 0
CON C0H

Si la comparación es diferente de cero quiere decir


que el objetivo se encuentra entre los 255cm y los
32cm así que la orden para el robot será seguir
adelante. En caso contrario, si la comparación es
cero, la medida podría ser menor a los 32cm caso en
que el robot hará la maniobra para esquivar, o se
completaría la condición para decir que esta por fuera
de los 6mts si el valor del registro es 0. Las acciones
que tomara el robot al hacer las comparaciones se ven
en la siguiente tabla:
PROYECTO MICROPROCESADORES – ROBOT MINISUMO 8

2. MODO SEGUIMIENTO DE LINEA Se usaron sensores CNY70 que son de tipo óptico
(Figura 9.)
El siguiente diagrama de flujo (diagrama de flujo
#4) presenta el funcionamiento de este modo en
manera general:

Figura 9. CNY70

Tiene un emisor de luz y un receptor internamente el


circuito de prueba sigue el siguiente esquema:

Figura 10. Circuito de Test CNY70.

Estos sensores se alimentan con 5 volts, la superficie


en la cual se seguirá la línea (de color negro) es de
un fondo blanco, con estas características y las
propiedades inversas de estos dos colores de reflejar
la luz en una medida menor (color negro) o mayor
(color blanco), se configuraron los sensores de tal
manera que al encontrar la superficie mas reflactante
(blanca) entregue un nivel alto, el cual el cual le dará
la información necesaria para que el
microcontrolador tome un decisión al respecto, la
configuración que se uso fue es la mostrada en la
figura 11.

Diagrama de flujo # 4. Seguimiento de línea.

La idea en este modo fue tener la línea a seguir en


medio de dos sensores de esta forma cuando el robot
se intente desviar hacia alguna dirección uno de los
sensores ingresara en la línea y este la detectara .
enviando una señal a uno de los puertos del Figura 11. Configuración CNY70
microcontrolador, de esta manera se decidirá que
corrección poner en marcha haciendo girar al robot Debido a que las superficies no son ideales se
hacia el lado contrario al que se detecto la requiere de una calibración, para esto se uso un
desviación. comparador el que ayudo a mejorar la respuesta del
PROYECTO MICROPROCESADORES – ROBOT MINISUMO 9

SNY enviando al puerto del microcontrolador el primera fase que es la búsqueda del contrincante para esto
nivel correspondiente. se envía a los servos la señal correspondiente al
movimiento girar, y se pide al sensor frontal (SRF 02)
como se hizo en el modo esquiva obstáculo informe sobre
la presencia de un objeto en la cercanía (contrincante), pero
en vez de buscar esquivarlo después de encontrado se envía
la orden ir hacia él, cabe anotar que en este modo pelea, la
velocidad de los servomotores al girar es mucho menor que
la que tiene cuando emprende una envestida, esto para
darle tiempo al sensor de ultrasonido de ubicar
correctamente al contrincante y tomar la dirección correcta.

El algoritmo que sigue el robot se resume en el diagrama


de flujo #5:
Figura 12. Posición de los CNY en el carro.

3. MODO PELEA:

Este modo se diseño para realizar competencia de mini


sumos, la competencia se realiza entre dos robots sobre un
área circular de color negro y con el borde blanco como se
muestra en la figura 13:

Figura 13. Área de competencia

Al inicio de la competencia se colocan los adversarios en


direcciones opuestas (figura 14), y deben esperar 5
segundos antes de empezar la búsqueda del enemigo, el
objetivo es sacar al contrincante del campo de batalla Diagrama de flujo #5
evitando salirse o que lo saquen.
Para evitar es salirse por si solo o que el robot haga un
oposición si lo están intentando sacar se utilizo la
característica de los sensores de la parte inferior del robot
os CNY70, con los cuales en caso de detectar los bordes
blancos del área provocaran una interrupción, la cual parara
el programa sin importar la parte que este ejecutando y
atenderá el pedido de la interrupción, teniendo como orden
hacer que el robot avance en la dirección opuesta. Esta
Figura 14. Posición inicial
respuesta a la interrupción durara un pequeño lapso de
tiempo, el cual fue calculado para regresar una distancia
Para cumplir con estos requerimientos se utilizo una
aproximada al radio del campo de batalla, intentando
combinación de las características usadas en los dos modos
quedar en el centro antes de recomenzar la búsqueda del
anteriores, de la siguiente manera:
enemigo nuevamente.
Antes de realizar cualquier acción se hizo un retraso 5
segundos, pasados los cuales el programa entra en la
PROYECTO MICROPROCESADORES – ROBOT MINISUMO 10

La diferencia mas notoria entre el escaneo que realiza el 5. HARDWARE


sensor de ultrasonido en el modo esquiva obstáculo y el
El diseño del circuito donde iría el microcontrolador y a
modo pelea es el de ampliar el rango al que responderá,
donde se conectarían los sensores se hizo con ayuda de la
pasando de buscar objetos en una distancia menor a 32cm a
herramienta software EAGLE (figura 15.1 y 15.2).
buscar objetos (contrincante) en un radio de 64 cm, esto
para cubrir casi en su totalidad el diámetro del campo de
batalla.

4. SIMULACIONES

Las simulaciones de las diferentes partes de código que al


se hicieron con la herramienta software Proteus versión 7.2

El mayor numero de simulaciones fueron las que tenían


que ver con la generación de los PWM. Para simular esta
parte se realizo el esquema sencillo de la figura 14

C1 U1
19 39
XTAL1 P0.0/AD0
38
P0.1/AD1
18p 37
P0.2/AD2
18 36
X1 XTAL2 P0.3/AD3
35
C2 CRYSTAL P0.4/AD4

18p
9
RST
P0.5/AD5
P0.6/AD6
P0.7/AD7
34
33
32
Figura 16. Diagrama esquemático robot mini sumo
21
P2.0/A8 A
22
P2.1/A9
23
P2.2/A10 B
29 24
PSEN P2.3/A11
30 25
ALE P2.4/A12 C
31 26
EA P2.5/A13
27
P2.6/A14 D
28
C3 P2.7/A15
10u 1 10
P1.0/T2 P3.0/RXD
2 11
P1.1/T2EX P3.1/TXD
3 12
P1.2 P3.2/INT0
4 13
P1.3 P3.3/INT1
5 14
P1.4 P3.4/T0
6 15
R1 7
P1.5 P3.5/T1
16
8K2 P1.6 P3.6/WR
8 17
P1.7 P3.7/RD
AT89C52
DBG_TRACE=0

330
10k

Figura 14. Esquema para simulación PWM

Los PWM se están observando es su respectivo puerto de


salida con el osciloscopio del simulador entregando
satisfactoriamente luego de varias depuraciones la Figura 15. Plaqueta robot mini sumo
secuencias de pulsos deseadas, dependiendo de cada caso
Figura 15. Para alimentar el microcontrolador y los sensores los
cuales requerían de un voltaje de 5volts se hizo uso de un
regulador lm7805 dará el voltaje de cinco volts ante una
alimentación mayor a 7 V y resistente hasta un voltaje
cercano a los 20V, Por practicidad y para una buena
duración se alimento son una batería comercial de 9V.
Los servomotores se alimentaron con 6 volts los cuales se
sacaron de una suma de 4 pilas de 1.5 Volts en serie.
Finalmente el robot se muestra en las figuras, 16.1, 16.2,
16.3, 16.4.

Figura 15. Respuesta vista en el osciloscopio del simulador


PROYECTO MICROPROCESADORES – ROBOT MINISUMO 11

Figura 16.3 Robot vista superior.


IMÁGENES ROBOT MINI SUMO

Figura 16.4 Robot vista lateral.

Figura 16.1 Robot vista frontal.


6. SOFTWARE

Se hicieron tres programas por separado cada uno para su


respectivo modo para hacer pruebas individuales sobre el
robot , al final se unieron en uno solo código que es el
siguiente:

JMP ISR_INT_EXT0

ORG 000BH

JMP ISR_INT_CT0

ORG 0013H
Figura 16.2 Robot vista inferior.
JMP ISR_INT_EXT1

ORG 001BH
JMP ISR_INT_CT1

ORG 0023H
JMP ISR_INT_SERIAL

ORG 002BH
JMP ISR_INT_CT2

; DEFINICIÓN DE VARIABLES Y
CONSTANTES

TH_PWM EQU 064H


PROYECTO MICROPROCESADORES – ROBOT MINISUMO 12

TL_PWM EQU 065H AJMP MAIN


TH_PWM_B EQU 066H
TL_PWM_B EQU 067H ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TH1_PWM EQU 068H
TL1_PWM EQU 069H
TH1_PWM_B EQU 070H EVASOR:
TL1_PWM_B EQU 071H
T2CON EQU 0C8H SETB TR0
TH2 EQU 0CDH SETB T2CON.2
TL2 EQU 0CCH MOV TCON,#50H
;activa 2 contadores
; posiciona los registros de manejo de
temporizador 2 MOV IE,#0FAH

RCAP2L EQU 0CAH; ;activa las interrupciones de los timers 0 y 1


RCAP2H EQU 0CBH; MOV TMOD,#21H
T2MOD EQU 0C9H;
Palta EQU 072H ;Modo 1 para CT0 y MODO 2 PARA CT1
Pbaja Equ 073H
EV1 EQU 074H mov T2MOD,#00H
EV2 EQU 075H; CLR T2CON.1
mov T2MOD,#00H
SETB T2CON.2
CLR T2CON.0
CLR T2CON.3
CLR T2CON.4
MAIN: CLR T2CON.5
CLR T2CON.7
; escanea pines de seleccion de modo
CALL Adelante

setb p2.5 ;Cargo los valorres para generar pwm hacia


setb p2.6 adelante.
MOV 32,#00H
MOV C,P2.5 MOV TH0,TH_PWM
CPL C MOV TL0,TL_PWM
MOV 32.0,C MOV TH2,TH1_PWM
MOV C,P2.6 MOV TL2,TL1_PWM
CPL C
MOV 32.1,C SETB P2.0
SETB P2.1
MOV A,32
CJNE A,#00H,PELEA ; rutina de inicialización y medida de sensor

AJMP EVASOR Scan1:

PELEA: MOV TMOD,#21H


;CT0 y CT1temporizadores en modo 2
CJNE A,#01H,SEGLINEA MOV TH1,#0f3h
AJMP PELION ;Valor de recarga para generar
;salto a modo pelea MOV TL1,#0f3h
SEGLINEA: ;9600 baudios con 16 MHZ
MOV TCON,#50H
CJNE A,#03H,Linea2 ;Se habilita el temporizador CT1
PROYECTO MICROPROCESADORES – ROBOT MINISUMO 13

MOV SCON,#40H jb Ri,GUARDA2


;Serial en modo 1. Recepcion deshabilitada ajmp reviso3
MOV PCON,#80H GUARDA2:
;El bit SMOD se coloca en 1 (n=16) CLR TI
MOV R5,SBUF
CLR RI MOV PBAJA,R5
CLR TI CLR RI
CJNE R4,#00H,SCAN1
sensor0: CJNE R5,#00H,siga
jmp scan1
mov SBUF,#00H siga:
;ANL 072H,#0FFH
reviso0: ANL 073H,#0E0H
;MOV R4,PALTA
jb Ti,RECIVA MOV R5,PBAJA
CJNE R5,#00H,SCAN1
ajmp reviso0 AJMP ESQUIVAR
LINEA2:
LJMP LINEA
; si se detecta obstáculo llamo a esquivarla
RECIVA: cual ocasiona q el mini zumo comience a
girar esquivando el obstáculo.
MOV TMOD,#21H ;CT0
y CT1 temporizadores en modo 2 Esquivar:
MOV TH1,#0f3h ;Valor de CALL Giro
recarga para generar MOV TH0,TH_PWM
MOV TL1,#0f3h ;9600 baudios MOV TL0,TL_PWM
con 16 MHZ MOV TH2,TH1_PWM
MOV TCON,#50H ;Se MOV TL2,TL1_PWM
habilita el temporizador CT1
MOV SCON,#40H MOV R2,#03H
;Serial en modo 1. Recepcion CALL Delay
deshabilitada
MOV PCON,#80H ;El CALL Adelante
bit SMOD se coloca en 1 (n=16)
CLR RI MOV TH0,TH_PWM
CLR TI MOV TL0,TL_PWM
MOV SBUF,#54H MOV TH2,TH1_PWM
MOV TL2,TL1_PWM
reviso1:
jb Ti,ENRE ; retorna a escanear
ajmp reviso1
ENRE: AJMP Scan1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SETB REN
reviso2: ; modo seguidor de linea.
jb Ri,GUARDA
ajmp reviso2 LINEA:
GUARDA:
CLR TI ;configuro registros necesarios para modo
MOV R4,SBUF seguidor de línea
CLR RI
MOV PALTA,R4
reviso3: SETB TR0
PROYECTO MICROPROCESADORES – ROBOT MINISUMO 14

SETB T2CON.2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


MOV TCON,#50H
;activa 2 contadores ; modo pelea minizumo
MOV IE,#0FAH
;activa las interrupciones de los timers 0 y 1 PELION:
MOV TMOD,#21H
;Modo 1 para CT0 y MODO 2 PARA CT1
mov T2MOD,#00H ; inicializo el minizumo para modo pelea y
CLR T2CON.1 espero 5 seg.
mov T2MOD,#00H
SETB T2CON.2 MOV R3,#00H
CLR T2CON.0 MOV R2,#32H
CLR T2CON.3 MOV R7,#00h
CLR T2CON.4 CALL DELAY
CLR T2CON.5 SETB TR0
CLR T2CON.7 SETB T2CON.2
MOV TCON,#55H
SETB P2.0 ;activa 2 contadores
SETB P2.1 MOV IE,#0FFH
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;activa las interrupciones de los timers 0 y 1
MOV TMOD,#21H
MOV TCON,#10H ;Modo 1 para CT0 y MODO 2 PARA CT1
MOV IE,#0E2H mov T2MOD,#00H
MOV TMOD,#21H CLR T2CON.1
SETB P2.0 mov T2MOD,#00H
SETB P2.1 SETB T2CON.2
;Carga mis contadores para generar pwm CLR T2CON.0
CLR T2CON.3
CALL ADELANTEL CLR T2CON.4
CLR T2CON.5
MOV TH0,TH_PWM CLR T2CON.7
MOV TL0,TL_PWM SETB P2.0
MOV TH2,TH1_PWM SETB P2.1
MOV TL2,TL1_PWM MOV R7,#00h

Inicio la exploración para encontrar enemigo


Scan3:
JB P3.2,Stop1 CALL GIRO1
JB P3.3,Stop2 MOV TH0,TH_PWM
AJMP Scan3 MOV TL0,TL_PWM
MOV TH2,TH1_PWM
Stop1: MOV TL2,TL1_PWM
clr t2con.2
JB p3.2,Stop1 ; Inicializo y tomo medida de sensor:
setb T2CON.2
AJMP Scan3 AJMP SCAN1p

Stop2:

clr tr0 SCAN0p:


JB p3.3,Stop2 CJNE R6,#0FFH,SCAN1p
setb tr0 MOV R3,#00H
AJMP Scan3
CALL GIRO1
PROYECTO MICROPROCESADORES – ROBOT MINISUMO 15

MOV TH0,TH_PWM CLR RI


MOV TL0,TL_PWM CLR TI
MOV TH2,TH1_PWM MOV SBUF,#54H
MOV TL2,TL1_PWM
reviso1p:
Scan1p:
jb Ti,ENREp

CJNE R7,#02H,SCAN2p ajmp reviso1p


CALL INTERRUPCION
SCAN2p: ENREp:

SETB REN
MOV TMOD,#21H ;CT0 y CT1
temporizadores en modo 2 reviso2p:
MOV TH1,#0f3h ;Valor de
recarga para generar jb Ri,GUARDAp
MOV TL1,#0f3h ;9600 baudios
con 16 MHZ ajmp reviso2p
MOV TCON,#50H ;Se
habilita el temporizador CT1 GUARDAp:
MOV SCON,#40H
;Serial en modo 1. Recepcion CLR TI
deshabilitada MOV R4,SBUF
MOV PCON,#80H ;El CLR RI
bit SMOD se coloca en 1 (n=16) MOV PALTA,R4
CLR RI
CLR TI reviso3p:

sensor0p: jb Ri,GUARDA2p
mov SBUF,#00H ajmp reviso3p

reviso0p:
GUARDA2p:
jb Ti,RECIVAp
CLR TI
ajmp reviso0p
MOV R5,SBUF
MOV PBAJA,R5
RECIVAp:
CLR RI
MOV TMOD,#21H ;CT0 y CT1
temporizadores en modo 2 CJNE R4,#00H,SCAN1p
MOV TH1,#0f3h ;Valor de CJNE R5,#00H,sigap
recarga para generar
MOV TL1,#0f3h ;9600 baudios jmp scan1p
con 16 MHZ
MOV TCON,#50H ;Se sigap:
habilita el temporizador CT1
MOV SCON,#40H MOV 074H,072H
;Serial en modo 1. Recepcion MOV 075H,073H
deshabilitada MOV A,075H
MOV PCON,#80H ;El ORL 074H,A
bit SMOD se coloca en 1 (n=16)
PROYECTO MICROPROCESADORES – ROBOT MINISUMO 16

MOV A,EV1
MOV R2,#05H
CALL DELAY
CJNE A,#00H,SIGA4p
AJMP SCAN0p MOV IE,#0FFH
CLR IE1
CLR IE0
SIGA4p:
ANL 072H,#0FFH MOV R2,#05H
ANL 073H,#0C0H CALL DELAY
CALL GIRO1
MOV R4,PALTA
MOV R5,PBAJA MOV TH0,TH_PWM
; tomo decisión dependiendo de el dato MOV TL0,TL_PWM
entregado en el sensor MOV TH2,TH1_PWM
MOV TL2,TL1_PWM
CJNE R5,#00H,BOBADAp
AJMP SCAN1p
AJMP ATACARp
Finaliza el modo pelea.
BOBADAp: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

LJMP SCAN0p ; En este apartado se guardan las subrutinas q


me generan los diferentes pwm dependiendo
BOBADA2p: de cual sea la necesidad.

LJMP SCAN1p Giro:


ATACARp: MOV TH_PWM,#0FDH
CJNE R3,#00h,BOBADA2p MOV TL_PWM,#0A8H
ATACAR1p: MOV TH_PWM_B,#066H
CALL ADELANTE MOV TL_PWM_B,#018H
MOV TH0,TH_PWM
MOV TL0,TL_PWM
MOV TH2,TH1_PWM MOV TH1_PWM,#0FDH
MOV TL2,TL1_PWM MOV TL1_PWM,#0A8H
mov R3,#0FFh MOV TH1_PWM_B,#066H
AJMP Scan1p MOV TL1_PWM_B,#018H

; si detecto el borde del tatami active RET


interrupciones externas q me envían a esta
subrutina la cual aleja al mini zumo del borde
de la línea Giro1:
MOV TH_PWM,#0F5H
INTERRUPCION: MOV TL_PWM,#073H
MOV TH_PWM_B,#06EH
MOV TL_PWM_B,#4BH
CALL ATRAS

MOV TH0,TH_PWM MOV TH1_PWM,#0F5H


MOV TL0,TL_PWM MOV TH1_PWM,#087H
MOV TH2,TH1_PWM MOV TH1_PWM_B,#06EH
MOV TL2,TL1_PWM MOV TL1_PWM_B,#037H

MOV R7,#00H
PROYECTO MICROPROCESADORES – ROBOT MINISUMO 17

RET DEC R2
CJNE R2,#00,Ciclo
RET
AdelanteL:
MOV TH1_PWM,#0F5H
MOV TL1_PWM,#074H ;************************************
MOV TH1_PWM_B,#06EH ********************
MOV TL1_PWM_B,#04cH ;ISR DE LA INTERRUPCION EXTERNA 0
ISR_INT_EXT0:
MOV TH_PWM,#0F6H MOV R7,#02H
MOV TL_PWM,#13H MOV IE,#0FAH
MOV TH_PWM_B,#06DH RETI
MOV TL_PWM_B,#0ABH
;************************************
RET ********************
;ISR DE LA INTERRUPCION DEL
Adelante: CONTADO TEMPORIZADOR 0
MOV TH1_PWM,#0EEH
MOV TL1_PWM,#008H ISR_INT_CT0:
MOV TH1_PWM_B,#075H
MOV TL1_PWM_B,#0B8H MOV C,P2.0
JC P_BAJA
MOV TH_PWM,#0FDH
MOV TL_PWM,#0A8H MOV TH0,TH_PWM
MOV TH_PWM_B,#066H MOV TL0,TL_PWM
MOV TL_PWM_B,#018H SETB P2.0
MOV R6,#0FFH RETI
RET P_BAJA:
MOV TH0,TH_PWM_B
Atras: MOV TL0,TL_PWM_B
MOV TH_PWM,#0EEH CLR P2.0
MOV TL_PWM,#008H RETI
MOV TH_PWM_B,#075H
MOV TL_PWM_B,#0B8H ;************************************
********************
MOV TH1_PWM,#0FDH ;ISR DE LA INTERRUPCION EXTERNA 1
MOV TL1_PWM,#0A8H
MOV TH1_PWM_B,#066H ISR_INT_EXT1:
MOV TL1_PWM_B,#018H MOV R7,#02H
MOV IE,#0FAH
RET
Delay: RETI
MOV R0,#0FAH
MOV R1,#0C8H ;************************************
********************
Ciclo: ;ISR DE LA INTERRUPCION DEL
CONTADO TEMPORIZADOR 1
DEC R0
nop ISR_INT_CT1:
CJNE R0,#00H,Ciclo
MOV R0,#0FAH RETI
DEC R1
CJNE R1,#00H,Ciclo ;************************************
MOV R1,#0C8H ********************
PROYECTO MICROPROCESADORES – ROBOT MINISUMO 18

;ISR DE LA INTERRUPCION DEL vez se dominada y si se realiza en condiciones


GENERADA POR EL PUERTO SERIAL favorables.

ISR_INT_SERIAL:
RETI Respecto a los sensores ópticos se debe tener
especial cuidado ya que las condiciones del
ambiente como la luz o las superficies que no es
;************************************ una constante pueden alterar la respuesta de los
******************** mismos de un momento a otro, para esto basta con
;ISR DE LA INTERRUPCION DEL una buena calibración dejando un rango aceptable
CONTADO TEMPORIZADOR 2 para evitar que sea demasiado sensible.

ISR_INT_CT2: El realizar el proyecto en lenguaje ensamblador


significo un reto, pero nuevamente quedo claro las
CLR T2CON.7 múltiples ventajas que tiene y la posibilidad de
MOV C,P2.1 realizar cualquier aplicación una vez se tienen
claras las limitaciones tanto del lenguaje como de
JC P_BAJA1
el microcontrolador con el que se esta trabajando.
MOV TH2,TH1_PWM Proyectos como este en el que la eficiencia
MOV TL2,TL1_PWM depende tanto del software como del hardware
SETB P2.1 que se usa, requieren de un cuidado especial ya
RETI que están estrechamente ligados.
P_BAJA1:
MOV TH2,TH1_PWM_B Se cumplieron con los objetivos propuestos, pero
MOV TL2,TL1_PWM_B este proyecto es una base de de proyectos mucho
CLR P2.1 mas grandes ya que se le pueden hacer grandes
modificaciones mejorando sus aspectos ahora
RETI presentes y agregando características extras.

DB
0AAH,0AAH,0AAH,0AAH,0AAH,0 BIBLIOGRAFIA
AAH
Notas de clase, micropocesadores y
ensambladores 2008, Ing. Henry Jiménez
END ;FIN DE TODO EL PROGRAMA Rosero, Universidad Del Valle.

MCS®51 MICROCONTROLLER
FAMILY USER’S MANUAL, INTEL,
CONCLUSIONES febrero 1994, formato pdf.

Manual de ATMEL 89C52.


Se debe tener cuidado a la hora de escoger los
sensores, según los requerimientos, si bien el Ficha técnica sensor SRF02, formato pdf.
sensor SFR02 provee una precisión muy buena en
su rango activo, su característica de ser de data sheet CNY70
ultrasonido puede generar problemas si se emplea
como un sensor para obstáculos móviles, o que data sheet servomotor referencia Futaba
tengan ángulos pronunciados en sus superficies, S3003
siendo en algunos casos invisibles al sensor.
Paginas varias en internet sobre
La manera en que el sensor SFR02 entrega la servomotores.
información puede parecer muy amigable en un
principio, pero el poder sincronizar la
comunicación en este caso por puerto serie, y
manejarla, puede ser un poco complicada a la hora
de implementarla, pero si es muy confiable una
PROYECTO MICROPROCESADORES – ROBOT MINISUMO 19

También podría gustarte