Documente Academic
Documente Profesional
Documente Cultură
Desarrollado por:
Resumen
Nuestro proyecto consiste en aprovechar las memorizar una ruta, establecida por
características de control de un sistema comandos de dirección inmediatos o un
mínimo con un microcontrolador 8031 para archivo de ruta pregrabado.
controlar un coche a control remoto y
I NTRODUCCIÓN control remoto. Es un sistema que permite
controlar al carro mediante una computadora
Una de las principales aplicaciones y grabar la trayectoria que sigue el carro para
de la electrónica y los sistemas de control tiempo después repetirla.
están en los juegos electrónicos, estos
sistemas cada vez son más complejos y
cumplen con una mayor cantidad de C ARACTERÍSTICAS
funciones.
• El sistema mínimo está diseñado en
Además, estos sistemas desarrollados configuración de Loader para que pueda
para juegos infantiles permite un estudio de ser utilizado mediante el programa
posibles aplicaciones en la industria, pues los SIEV31.
mismos dispositivos empleados pueden • El sistema hace posible operar al carro
adaptarse a condiciones industriales para mediante la utilización de las flechas del
funcionar de manera muy similar a como lo teclado de una computadora.
hacen en los juegos. • Es capaz de guardar hasta 2 horas y 10
minutos de trayectoria.
Lo anterior nos hace reflexionar • La trayectoria que repite el carro es
acerca de lo importante que son los juegos desplegada en el LCD del sistema
para la electrónica y nos muestra la mínimo, al mismo tiempo que es enviada
importancia de implementar nuevos sistemas a la computadora para su futuro
para analizar su funcionamiento. almacenamiento.
• El sistema es capaz de recibir de la
computadora una trayectoria grabada en
O BJETIVOS PARTICULARES un archivo de texto (.TXT) y ejecutarla.
• El carro a control remoto consta de dos
a. Analizar el sistema de comunicación motores, uno para adelante y atrás y otro
entre el control remoto y el carro. para derecha e izquierda.
b. Adaptar una etapa de potencia para poder • El control remoto del carro es a base de
controlar al carro a partir de señales switches, cada motor dispone de tres
emitidas por el sistema mínimo. contactos, uno común y otros dos que
c. Integrar una comunicación serial con una especificarán la dirección del motor, esto
computadora para controlar al carro significa que para activar un motor hacia
oprimiendo las flechas de la una dirección hay que juntar la terminal
computadora. común con la terminal correspondiente y
d. Almacenar la ruta indicada por la para que vaya en la dirección contraria
computadora para poder reproducirla. hay que juntar el común con la otra
terminal.
El material que utilizamos para el
desarrollo del proyecto es un carro de control
FUNCIONAMIENTO
remoto, un sistema mínimo, una
computadora, cable serial y los dispositivos
Todo el funcionamiento del sistema se basa
necesarios para la adaptación de la etapa de
en el programa controlador, es decir, nuestro
potencia.
sistema es controlado por software y no por
hardware.
D ESCRIPCIÓN
ORG 2000H
AJMP MAIN
ORG 2023H ;Para evitar problemas con el
LJMP SERIAL Siev31, se reenvía a una nueva
dirección para interrupción serial
ORG 20F9H
SERIAL JNB TI, RECEP ;Determina transmisión o recepción
CLR TI ;Limpia la bandera
CLR A
MOVC A,@A+DPTR ;Despliega el mensaje de “Recepción
JZ INICIA Preparada” para indicar que hay
MOV SBUF,A buena conexión serial.
INC DPTR
RETI
INICIA SETB REN ;Una vez desplegado el mensaje,
MOV DPTR,#$2300 habilita recepción y prepara DPTR
RETI para grabar trayectoria
RECEP CLR RI ;Borra bandera de recepción
MOV A,SBUF
CJNE A,#$45,SIGGG ;Verifica que si se desea borrar o
ACALL BORRA es otro comando.
SJMP SAA
SIGGG CJNE A,#$52,SA ;Analiza el comando para ver si es
SETB PSW.5 lectura (repetición) o escritura
SJMP SAA
SA ACALL MODO
JB PSW.6,TEXT ;Llama a subrutina para establecer
ACALL CARRO modo de control (inmediato/texto).
SJMP SAA ;Modo de control inmediato.
TEXT ACALL GRABAR
SAA RETI ;Modo de control por texto.
ORG 212AH
CARRO CJNE A,#$41,ATRAS ;Si el comando es A,B,C o D indica
ACALL LIMPIA movimiento del carro, esta
JB PSW.5,CON1 subrutina verifica que movimiento
ACALL GRABAR es en específico, después llama a
CON1 MOV R0,#$00 la subrutina “limpia” para borrar
ACALL DISPLAY el LCD, si no está repitiendo la
MOV P1,#$08 trayectoria llama a la función
MOV A,P1 “grabar” y finalmente llama a la
MOV R2,A función “Display” para desplegar el
SJMP PRE comando en el LCD y la pantalla de
ATRAS CJNE A,#$42,IZQ la Computadora. Seguido de esto,
ACALL LIMPIA se envía al puerto 1 el código de
MOV P1,#$04 activación de los switches
JB PSW.5,CON2 correspondientes a ese movimiento.
ACALL GRABAR ;En el comando de adelante y atrás,
CON2 MOV R0,#$09 se graba el registro R0 con el
ACALL DISPLAY valor para poder decidir si algún
MOV A,P1 movimiento posterior a la izquierda
MOV R2,A o derecha se realizará hacia
SJMP PRE adelante o atrás.
IZQ CJNE A,#$44,DER ;En los comandos de izquierda y
ACALL LIMPIA derecha se da un tiempo de retardo
MOV P1,#$02 para activar el switch para
JB PSW.5,CON3 izquierda o derecha y
ACALL GRABAR posteriormente se activa el switch
CON3 MOV R0,#$0F para que avance hacia adelante o
ACALL DISPLAY atrás dando la vuelta, esto se debe
MOV A,P1 a que el control remoto no acepta
MOV R4,#$60 ambos comandos simultaneamente
VU ACALL LARGO (incluso de manera manual).
DJNZ R4,VU El comando “Wait” sólo indica que
SJMP DISP el carro deberá detenerse un
DER CJNE A,#$43,WAIT instante.
ACALL LIMPIA
MOV P1,#$01
JB PSW.5,CON4
ACALL GRABAR
CON4 MOV R0,#$19
ACALL DISPLAY
MOV A,P1
MOV R4,#$60
VU1 ACALL LARGO
DJNZ R4,VU1
SJMP DISP
WAIT CJNE A,#$57,SALE
ACALL LIMPIA
MOV P1,#$00
JB PSW.5,CON5
ACALL GRABAR
CON5 MOV R0,#$21
ACALL DISPLAY
SJMP PRE
DISP ORL A,R2 ;Aquí se envía el comando para
MOV P1,A avanzar cuando se da vuelta.
PRE ACALL CONT ;Llama a subrutina para que se
MOV P1,#$00 avance aprox. 0.2 seg.
SALE RET
ORG 21A8H
CONT MOV R7,#$02 ;Como no se quiere que el carro
SE1 MOV R6,#$00 avance de manera permanente se
SE2 MOV R5,#$00 realiza esta cuenta para que sólo
SE3 DJNZ R5,SE3 se envíe un impulso de avance de un
DJNZ R6,SE2 poco más de 0.2 segundos por
DJNZ R7,SE1 comando.
RET
Subrutina para repetir trayectoria
ORG 21B5H
LEER SETB PSW.5 ;Establece modo lectura (no graba)
MOV DPTR,#$2300 ;Inicio de trayectoria grabada
AQUI MOVX A,@DPTR
JZ FIN ;Revisa por fin de trayectoria
ACALL CARRO ;Conforme lee, envía señal para
INC DPTR mover el carro y busca el sig.
SJMP AQUI Comando en la trayectoria
FIN CLR PSW.5 ;Elimina modo lectura (puede
RET continuar grabando)
Subrutina de grabación
ORG 21C5H
GRABAR MOVX @DPTR,A ;Envía el comando a la siguiente
INC DPTR dirección de la última dirección
MOV A,#$00 utilizada y después graba con 00 la
MOVX @DPTR,A siguiente dirección para indicar
RET fin de trayectoria.
ORG 21D2H
LIMPIA MOV P2,#$60 ;Esta subrutina se emplea para
MOV R1,#$00 borrar el mensaje que tenga
MOV R3,A actualmente el LCD para
MOV A,#$01 posteriormente desplegar el mensaje
MOVX @R1,A de el movimiento que se está
MOV A,R3 efectuando.
ACALL LARGO
RET
ORG 21E0H
DISPLAY MOV A,R0 ;Guarda el valor del registro para
MOV R3,A reutilizarlo en el despliegue en
DISPL MOV P2,#$22 pantalla.
MOVX A,@R0 ;Lee caracter a desplegar
CJNE A,#$01,SIGUE ;Al terminar el mensaje en LCD
MOV A,R3 busca el valor inicial del registro
MOV R0,A y llama a subrutina para despliegue
ACALL COMPU en pantalla.
SJMP ENDD
SIGUE MOV R1,#$01 ;Lazo para desplegar en display,
MOV P2,#$60 considerando retardos para envío de
MOVX @R1,A datos al LCD.
ACALL CORTO
INC R0
SJMP DISPL
ENDD RET
Mensajes desplegados
ORG 2200H
DB 'ADELANTE' ; Estos son cada uno de los
DB 01H mensajes que se despliegan según el
DB 'ATRAS' comando de movimiento. El byte 01,
DB 01H se utiliza como fin de mensaje.
DB 'IZQUIERDA'
DB 01H
DB 'DERECHA'
DB 01H
DB 'DETENIDO'
DB 01H
ORG 2230H
COMPU MOV P2,#$22 ;Se regresa al punto inicial del
MOVX A,@R0 mensaje y se lee el caracter.
MOV SBUF,A ;Se envía el primer caracter
CO0 JNB TI,CO0 ;Retardo hasta que se termine de
COMP1 CLR TI transmitir el caracter y se borra
INC R0 bandera.
MOV P2,#$22 Con un lazo se repite el proceso de
MOVX A,@R0 lectura del caracter a transmitir y
CJNE A,#$01,COMP se comprueba que no se haya
SJMP CFIN terminado el mensaje.
COMP MOV SBUF,A ;Se transmite caracter y se espera
CO4 JNB TI,CO4 a que se termine transmisión para
SJMP COMP1 transmitir el sig. caracter.
CFIN MOV A,#$0A ;Una vez terminados los caracteres,
MOV SBUF,A se envían comandos para generar un
CO1 JNB TI,CO1 “Enter” o “Return” y empezar en la
CLR TI siguiente linea.
MOV A,#$0D
MOV SBUF,A
CO2 JNB TI,CO2
CLR TI
RET
ORG 2270H
MODO CJNE A,#$49,TEXTO ;Según el modo de control deseado,
CLR PSW.6 inmediato o grabación (para enviar
SJMP SALMOD texto) se desactiva o activa la
TEXTO CJNE A,#$54,SALMOD bandera PSW.6 respectivamente.
SETB PSW.6
SALMOD RET
Subrutina de borrado
ORG 2280H
BORRAR MOV A,DPL ;Esta subrutina permite eliminar el
DEC A último caracter escrito dentro de
CJNE A,#$FF,BOR1 la trayectoria del carro.
MOV DPL,A
MOV A,DPH
DEC A
MOV DPH,A
SJMP SALBOR
BOR1 MOV DPL,A
SALBOR MOV A,#$00
MOVX @DPTR,A
RET
Rutina de inicio
ORG 208BH
MAIN MOV TH1,#$FD ;Establece Baud rate = 9600
MOV TL1,#$FD
MOV TMOD,#$20 ;Modo del temporizador
MOV TCON,#$00
MOV IE,#$90 ;Habilita interrupción serial
MOV SCON,#$40 ;Modo de transmisión serial
MOV P1,#$00 ;Limpia puerto 1.
CLR PSW.5 ;Limpia bandera lectura
CLR PSW.6 ;Limpia bandera modo de control
MOV DPTR,#$6000 ;Comienza inicialización del LCD
MOV A,#$3C
MOVX @DPTR,A
ACALL CORTO
MOV A,#$01
MOVX @DPTR,A
ACALL LARGO
MOV A,#$06
MOVX @DPTR,A
ACALL CORTO
MOV A,#$0C
MOVX @DPTR,A
ACALL CORTO
MOV A,#$80
MOVX @DPTR,A
ACALL CORTO ;Termina inicialización LCD
MOV DPTR,#LCD ;Dirección mensaje “Recepción
SETB TR1 preparada”
SETB TI ;Activa trigger 1 e int. serial.
LAZO JNB PSW.5,LAZO ;Espera a modo lectura
MOV IE,#$00 ;Deshabilita interrupciones
ACALL LEER ;Llama subrutina lectura
MOV IE,#$90 ;Rehabilita interrupción serial.
SJMP LAZO
Subrutina de tiempo
ORG 20D4H
CORTO MOV R6,#$13 ;Subrutina para tiempo de retardo
ESP DJNZ R6,ESP corto para envío de datos y
RET comandos al LCD.
Subrutina de tiempo
ORG 20D9H
LARGO MOV R6,#$3 ;Subrutina de retardo largo para
WAIT2 MOV R7,#$00 envío de datos y comandos al LCD.
WAIT1 DJNZ R7,WAIT1
DJNZ R6,WAIT2
RET
Mensaje de confirmación
ORG 20E2H
LCD DB 'RECEPCION PREPARADA' ;Mensaje para confirmar transmisión
DB 0AH serial entre sistema mínimo y
DB 0DH computadora.
DB 00H
END
END
AAWBCD
/* Programa que convierte un archivo de texto en formato R&A */
int main(void)
{
/* Declaración de variables */
FILE *in, *out;
fpos_t filepos;
int j,dato,datos[25],enter;
char *fname,fuente[250];
char a[] = "A";
char b[] = "B";
char c[] = "C";
char d[] = "D";
char w[] = "W";
/* Toma las 3 primeras letras del archivo fuente y suma el valor correspondiente
a cada letra. */
/* Ejemplo: ADE= 65+68+69=202 */
dato=0;
for (j=0;j<=2;j++)
{
dato=dato+fgetc(in);
}
if (dato==244)
{
cout<<"IZQUIERDA"<<endl;
/* Termina el programa */
cout<<endl<<endl<<"Trabajo Finalizado --> ruta.r&a"<<endl<<endl;
getch();
return 0;
}
programa lo obtuvimos del proyecto final
B ITÁCORA DEL PROYECTO de la materia de Microprocesadores y
periféricos, aunque tuvimos que
Primera semana modificarlo al encontrarnos con algunas
irregularidades:
Durante esta semana hicimos las siguientes
actividades: a) El LCD únicamente desplegaba un
• Adquisición del coche a control remoto espacio al momento de apretar la
• Probamos el coche y después procedimos tecla, por lo que no sabíamos
a desarmar el control remoto para ver de exactamente cual era el dato.
qué manera se accionaban los motores b) El programa Siev31, presenta un
del carro. Nuestra primera buena noticia problema de envío constante de una
fue que el sistema de control se basaba en señal al sistema mínimo, para
un conjunto básico de switches. resolver lo anterior, decidimos
utilizar la comunicación serial por
Hyperterminal de Windows para
• El sistema de control consta de dos
tener una comunicación sin envío de
partes, una que mueve los motores de
información no deseada.
atrás y adelante y otra que mueve los de
los lados. Cada uno de estas partes están
Al momento de utilizar
compuestas de 3 contactos, uno de los
Hyperterminal nos dimos cuenta que
cuales es común (tierra) y los otros tienen
las flechas al apretar las flechas se
el voltaje de Vcc (9V). Lo único que se
obtenía: ” [A”, ” [B”, “ [C”, “ [D”, al
tiene que hacer para activar un motor es
apretar arriba, abajo, derecha e
unir el extremo correspondiente al motor
izquierda respectivamente, es decir,
deseado con el contacto común.
recibíamos 3 caracteres con sólo
presionar una tecla. Nuestra solución
• Investigamos también, mediante un vino con el mismo programa, pues
multímetro, la corriente que circula por decidimos utilizar un programa que
estos contactos (43mA). Esto nos únicamente desplegara en el display
serviría para establecer la configuración A, B, C o D, sin considerar todo lo
de la "etapa de potencia" necesaria para demás, incluso así se pudo utilizar el
activar el control remoto. Siev31, pero únicamente con las
letras, no con las flechas.
• Decidimos la manera en la que se iba a
manejar el coche, mediante las flechas de c) Al estar utilizando las flechas para el
adelante-atrás-izquierda-derecha del control, nos dimos cuenta que
teclado de cualquier computadora, por lo apretando 2 teclas simultaneamente
que el siguiente paso fue diseñar un no era posible recibir otra señal
programa para poder ver el código que se distinta, sino que se recibían ambas
genera al oprimir cada tecla. señales, pero si se dejaban apretadas
las teclas, únicamente aparecía la
Segunda semana señal de la última tecla apretada, por
lo tanto, no sería posible controlar los
• Desarrollo del programa para encontrar el 6 movimientos diferentes que tiene el
código ASCII al apretar las flechas carro.
adelante,atras, izquierda, derecha:
El programa empleado para encontrar el Nuestra solución fue modificar
código enviado por las flechas de la nuevamente el programa para utilizar
computadora consistió en recibir de modo los números para controlar los
serial el código y enviarlo al LCD; este movimientos del automóvil, y en esta
misma semana readaptamos el flechas por lo explícitas que son en
programa para su funcionamiento. cuanto al movimiento del carro. La
Este programa únicamente manda las solución para poder tener los 6
señales y sólo las quita hasta que una movimientos es utilizando como
nueva señal modifica los valores que referencia para la dirección (adelante o
hay en el puerto 1 (Este es el puerto atrás) el último dato empleado para
que utilizamos para controlar nuestro manifestar la misma. Es decir si
control remoto). queremos dar vuelta a la derecha hacia
enfrente, es necesario que primero
• Por otra parte, en el aspecto de avancemos hacia enfrente (si antes
implementación física en cuanto a la estabamos avanzando hacia atrás) y
etapa de potencia, decidimos la forma en después enviar la señal de vuelta a la
la que la desarrollaríamos y encontramos derecha. Si la última ocasión que
que un transistor 2N2222 soportaba avanzamos hacia enfrente o hacia atrás
fácilmente la demanda de corriente por es la misma que la que queremos al
parte del control remoto al activar cada momento de indicar una vuelta, sólo es
switch, por lo que sólo tuvimos que necesario presionar la tecla de vuelta.
configurarlo para que actuara como En esta semana logramos implementar
switch, conectando el emisor a la tierra y este programa y funcionó de acuerdo a
el colector con una resistencia a Vcc, como queríamos. Posteriormente vino
pudiendo controlar la base para los un problema con el programa:
estados de corte y saturación. Este Dentro de nuestra programación
proceso lo evaluamos con un transistor, incluimos la letra “Q” para indicarle al
verificando que se pudiera controlar y el carro que se detuviera por completo, y la
resultado fue correcto. El circuito lógica empleada funcionó correctamente
respondió bien al momento de mandarle al igual que los comandos de
la señal para hacer que el carro se movimiento, sin embargo, si después de
moviera. una “Q” decidíamos reiniciar el
movimiento con una vuelta hacia
Tercera semana cualquier lado, el auto se iba hacia
enfrente o atrás (dependiendo del último
• Se implementó completamente la etapa valor) pero no daba la vuelta, después
de potencia para nuestro control, esta nos dimos cuenta que el problema no
consiste en un transistor 2N2222 y 2 estaba en la programación directamente,
resistencias por cada switch (4 switches pues incluso si se daba la misma
en total). El transistor se conectó con una instrucción de modo manual, el carro
resistencia que tiene un valor cercano respondía de la misma manera.
inicial a los 200Ω para tener los 43mA de Buscamos la manera de solucionarlo y
corriente entre el emisor y el colector, la ahí nos surgío otro problema pues al
otra resistencia es de 18KΩ implementar la solución dando un
aproximadamente, conectada a la base. retardo en cada señal, el programa dejó
El colector se conectó a Vcc del switch, de funcionar, cosa que no nos había
el emisor a tierra y la base recibe nuestra sucedido hasta la fecha y por más que
señal de control. Esta etapa se encuentra estuvimos intentando regresar al
ensamblada en protoboard pues programa anterior donde el problema
continuamos haciendo pruebas. estaba en el funcionamiento del carro y
no en el programa, no logramos
• Además durante el fin de semana conseguirlo y nuestro programa tuvo un
encontramos la forma de controlar al error que tendríamos que corregir.
carro con las flechas de la computadora
(nuevamente), insistimos en utilizar las
principio y añadirá las instrucciones
Cuarta semana nuevas.
B IBLIOGRAFÍA:
http://www.national.com
http://www.ti.com
http://www.fairchildsemi.com