Sunteți pe pagina 1din 18

INSTITUTO TECNOLÓGICO Y DE ESTUDIOS SUPERIORES DE MONTERREY

Campus Estado de México


Laboratorio de Sistemas Digitales

Controlador de un carro a control remoto

Desarrollado por:

Alejandro Alemán Castilla 451471


Erik Riveroll Fuster 444187

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

Este controlador consta de un sistema mínimo


(8051), una etapa de potencia y una etapa de
El sistema mínimo.
El programa controlador
El sistema utilizado en este proyecto es un Características
sistema mínimo en configuración de "loader", El programa fue desarrollado en
el sistema consta de: lenguaje ensamblador y permite al
sistema para realizar las siguientes
• Microcontrolador 8031A tareas:
• Eprom 27C256 es decir, 32K
• RAM 62256 , memoria de 32K Recepción de comandos.
• LCD 491 Interpretación de comandos.
• MAX232 Adaptador para transmisión Almacenamiento de la trayectoria.
serial. Reproducción de lo almacenado.
• Controlador de teclado 74C922 Despliegue en el LCD.
• Puerto serial. Despliegue en la computadora.
Funcionamiento

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

Subrutina de 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.

Subrutina de movimiento del carro

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

Subrutina de tiempo de movimiento

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.

Subrutina para borrar LCD

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

Subrutina para desplegar movimiento en el LCD y pantalla.

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

Subrutina de despliegue en pantalla

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

Subrutina de modo de control

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

C ONEXIONES Y M ANEJO además de no reconocer el código ASCII de


las flechas de control, interviene en la
Conexión transmisión serial del programa controlador e
El sistema mínimo se conecta a una fuente de introduce cadenas de espacios en blanco, todo
alimentación de 5V. Se conecta la etapa de esto se traduce en un mal funcionamiento del
potencia al puerto 1 del circuito.
sistema y el control
remoto a su vez a la etapa Manejo
de potencia. El control Una vez obtenida la
remoto se alimenta con conexión serial
una pila de 9V y el carro podemos empezar a
se alimenta con un banco manejar el carro
de 4 baterías de 1.5V mediante el uso de las
cada una. flechas de adelante,
atrás, izquierda y
Se carga el programa derecha para generar
controlador al loader movimiento o presionar
mediante el puerto serial la tecla "W" para
utilizando el SIEV31, una vez cargado el indicar al carro que se detenga por un
programa e iniciado (mediante la instrucción instante. Una vez concluida nuestra
g 2000), cerramos el SIEV31 mediante la trayectoria podemos presionar la tecla R del
tecla F1, pero no desconectamos el loader, teclado de la computadora para hacer que el
una vez hecho esto abrimos hyperterminal de sistema repita la trayectoria grabada.
Windows y establecemos una conexión a También es posible borrar uno a uno el
través del puerto serial a un baudrate de 9600 último comando presionando la letra "E".
sin paridad. Esto se hace debido a que el
SIEV31 tiene un error: este programa,
TXTRA y lo enviamos por puerto serial utilizando
Hyperterminal, el carro se moverá de la
Este programa esta hecho en C++ y su siguiente forma:
objetivo es convertir un archivo con texto a
un archivo con el formato R&A. ADELANTE
ADELANTE
El formato R&A ESPERANDO
ATRAS
Sus siglas responden a los apellidos de los DERECHA
autores y se basa en secuencias de las letras IZQUIERDA
A,B,C,D y W que especifican la acción que
ejecutará el carro: Para evitar crear el archivo utilizando las
letras A,B,C,D,W podemos hacer uno con las
A= Adelante palabras completas (ADELANTE, ATRAS,
B= Atrás IZQUIERDA, DERECHA, ESPERANDO)
C= Derecha en mayúsculas y con un cambio de línea entre
D= Izquierda cada una ("enter") y utilizar el programa
W=Esperando TXTRA para que convierta ese archivo en
uno con el formato R&A llamado "ruta.r&a".
Creación de una trayectoria pregrabada
Para enviar una trayectoria al sistema Una vez obtenido el archivo podemos
podemos crear un archivo que contenga una enviarlo al sistema para su ejecución.
secuencia de las letras anteriormente citadas,
por ejemplo: El código fuente de este programa se muestra
a continuación:
Si creamos un archivo con la siguiente
secuencia de letras:

AAWBCD
/* Programa que convierte un archivo de texto en formato R&A */

/* Inclusión de las librerías necesarias */


#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <dir.h>
#include <conio.h>

int main(void)
{

/* Limpia la pantalla y realiza la presentación del programa */


clrscr();
cout<<endl<<endl;
cout<<endl<<"TXTRA 1.0"<<endl<<endl;
cout<<endl<<"ITESM-CEM Laboratorio de Sistemas Digitales";
cout<<endl<<"Programado por Alejandro Alemán y Erik Riveroll";
cout<<endl<<"Copyright, 1999"<<endl<<endl;
cout<<endl<<"Programa para convertir formato TXT a formato R&A"<<endl<<endl;

/* 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";

/* Pide el nombre del archivo fuente */


cout<<"Dame el nombre del archivo fuente: ";
cin>>fuente;
fname=fuente;

/* Checa si es posible abrir el archivo fuente (in) y crear el archivo destino


(out), si no es posible manda un mensaje de error y termina el programa */
if ((in = fopen(fname, "rt"))
== NULL)
{
fprintf(stderr, "No se puede abrir el archivo.\n");
getch();
return 1;
}

if ((out = fopen("ruta.r&a", "wt"))


== NULL)
{
fprintf(stderr, "No se puede crear el archivo destino.\n");
getch();
return 1;
}

/* Si es posible abrir el archivo fuente y crear el destino, empieza el proceso


de codificación */
cout<<endl<<endl<<"El contenido del archivo "<<fname<<" es: "<<endl;

/* Busca el inicio del archivo fuente */


fseek(in, 0,SEEK_SET);
/* Empieza la codificación */
while(!feof(in))
{

/* 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);
}

/* Verifica si el número obtenido corresponde al de "ADELANTE" */


if (dato==202)
{
cout<<"ADELANTE"<<endl;

/* Escribe en el archivo destino la letra A */


fwrite(a, strlen(a), 1, out);

/* Busca el cambio de línea (10) o el fin del archivo (-1) */


enter=0;
while(enter!=10)
{
enter=fgetc(in);
if(enter==-1)
{
enter=10;
}
}
}

/* Verifica si el número obtenido corresponde al de "ATRAS" */


if (dato==231)
{
cout<<"ATRAS"<<endl;

/* Escribe en el archivo destino la letra B */


fwrite(b, strlen(b), 1, out);

/* Busca el cambio de línea (10) o el fin del archivo (-1) */


enter=0;
while(enter!=10)
{
enter=fgetc(in);
if(enter==-1)
{
enter=10;
}
}
}

/* Verifica si el número obtenido corresponde al de "IZQUIERDA" */

if (dato==244)
{
cout<<"IZQUIERDA"<<endl;

/* Escribe en el archivo destino la letra D */


fwrite(d, strlen(d), 1, out);
/* Busca el cambio de línea (10) o el fin del archivo (-1) */
enter=0;
while(enter!=10)
{
enter=fgetc(in);
if(enter==-1)
{
enter=10;
}
}
}

/* Verifica si el número obtenido corresponde al de "DERECHA" */


if (dato==219)
{
cout<<"DERECHA"<<endl;

/* Escribe en el archivo destino la letra C */


fwrite(c, strlen(c), 1, out);
enter=0;

/* Busca el cambio de línea (10) o el fin del archivo (-1) */


while(enter!=10)
{
enter=fgetc(in);
if(enter==-1)
{
enter=10;
}
}
}

/* verifica si el número obtenido corresponde al de "ESPERANDO" */


if (dato==232)
{
cout<<"ESPERANDO"<<endl;

/* Escribe en el archivo destino la letra W */


fwrite(w, strlen(w), 1, out);
enter=0;

/* Busca el cambio de línea (10) o el fin del archivo (-1) */


while(enter!=10)
{
enter=fgetc(in);
if(enter==-1)
{
enter=10;
}
}
}
}

/* Cierra los archivos fuente y destino */


fclose(in);
fclose(out);

/* 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.

• Después de solucionar el problema con • Esta última etapa de nuestro diseño se


el retardo decidimos establecer una base complicó debido a la complejidad del
de tiempo de medio segundo para el programa, sin embargo todo salió como
muestreo de instrucciones recibidas de la lo planeado y estábamos listos para
computadora. Cada vez que se probar el carro.
oprimiera una tecla el microcontrolador
mantendría la señal correspondiente en • Probamos el carro al aire libre y
el puerto 1 durante medio segundo. demostramos que funciona, se puede
• Como ya contábamos con una base de manejar libremente el carro y después
tiempo, eliminamos la opción de la tecla pedirle que repita la trayectoria.
Q, puesto que ya no era necesaria.
• Agregamos al programa la capacidad de Quinta semana
mandar la dirección a la que se dirigía el
carro (adelante, atrás, izquierda, Esta semana fue de evaluación del avance del
derecha), directamente al LCD. proyecto, por lo que no hubo un avance
• En esta semana comenzamos con el significativo, pues estuvimos observando los
proceso de almacenamiento de datos (a proyectos de los demás equipos y
partir de la dirección 2300H). Cada vez presentando el nuestro.
que el programa recibe un dato válido,
despliega en el LCD lo que significa, lo Sexta semana
almacena y envía la instrucción
correspondiente al puerto 1. • En esta semana desarrollamos el
• El almacenamiento y la lectura de datos programa para poder desplegar en la
funciona de la siguiente manera: pantalla de la computadora la trayectoria
del proyecto, es decir, despliega un
a) Al momento de recibir una mensaje con la dirección que el carro está
instrucción, ésta es grabada a partir siguiendo en ese momento, pero al ir
de la dirección 2300H de la RAM desplegando cada uno, se puede observar
externa. La localidad de memoria la trayectoria del proyecto. Para este
siguiente es borrada (00H). punto tuvimos ciertos problemas con el
b) Al momento de acabar de grabar la programa que teníamos, pues no permitía
ruta se oprime la tecla R de la la transmisión serial dado que todo
computadora y el microcontrolador nuestro control se realizaba en la
entra en una subrutina de lectura, éste interrupción del puerto serial y no
lee cada dato a partir de la dirección realizaba una "interrupción serial dentro
2300H y realiza la subrutina de de sí misma". Para resolver el problema
control de movimiento del carro, se desarrolló otro programa donde se
deteniéndose si encuentra que el dato pudiera realizar una recepción mucho
que va a mandar es 00H. más rápida dentro de la interrupción y
c) Si se sigue grabando después de la liberarla rápidamente. Una vez
lectura de datos, el programa funcionando el programa, decidimos unir
almacenará la ruta a partir de la ambos programas para fusionar ambas
última dirección de memoria funciones.
utilizada, por lo que si se ejecuta
"Repetición" (tecla R), el • En el programa fusionado establecimos 2
microcontrolador mandará la comandos de control "T" que indica
trayectoria indicada desde el posibilidad de recibir un archivo de texto
y que su peculiaridad es que no realiza la
trayectoria hasta que se presiona la tecla modificación a este tipo de tecnología.
"R", y el comando "I" que es para una Además, este proyecto tiene la posibilidad de
respuesta inmediata a la indicación de aplicarse en la industria, pues si se requiere
movimiento con las flechas. realizar movimientos predeterminados (rutas)
invariables, donde no se tenga posibilidad de
• Nuevamente decidimos modificar el "tráfico", este sistema puede responder
programa, para tener también la adecuadamente a cualquier trayectoria
posibilidad de detener el carro por asignada de este tipo.
algunos instantes en su recorrido, este
comando se ejecuta presionando la tecla C ONCLUSIONES
"W".
Creemos que lo más importante de este
• En esta semana también modificamos el proyecto es el hecho de que logramos
programa para que pudiera desplegar la implementar por completo todos los objetivos
trayectoria escrita en la pantalla de la inicialmente planteados, incluso al grado de
computadora, este proceso se lleva a cabo agregar un buen número de detalles extras al
sin utilizar la interrupción serial. sistema.

• Se mejoró la estética de la etapa de Consideramos además, que este proyecto nos


potencia eliminando el protoboard y dio la oportunidad de integrar realmente
fijándola en una tablilla con soldadura. nuestros conocimientos en el área de los
Sistemas Digitales en una aplicación práctica
Septima semana y útil.

• Realización de pruebas finales. Para agregarle los detalles antes


• Programación en C++ de programas mencionados, tuvimos la suerte de poder
accesorios. Este programa consiste en utilizar conocimientos de Computación
leer un archivo *.txt que contenga las haciendo una integración mayor de
instrucciones: "ADELANTE", conocimientos en un mismo proyecto.
"ATRAS", "IZQUIERDA",
"DERECHA", "ESPERA". Un aspecto
El programa realizará la importante que
conversión a un formato descubrimos con
*.R&A que se podrá este proyecto es
transmitir al controlador la capacidad del
para realizarse. microcontrolador
• Presentación final. que estamos
utilizando, pues
A PLICACIONES no fue necesaria
una gran
Desde un principio implementación
se mencionó la física de
importancia de los dispositivos para generar esta
juegos electrónicos aplicación, pero fue muy
en la actualidad, y necesario trabajar en la
el desarrollo de programación del controlador.
este proyecto tiene
un enfoque El trabajar en equipo es algo
orientado que deja mucho de provecho
precisamente a una ya que los integrantes del
mismo aprenden a cooperar y
a ayudarse entre ellos y lo más importante, a
confiar en el trabajo de las demás personas.

Creemos que es necesario realizar un


programa monitor que no tenga las
restricciones del SIEV31 en cuanto a
transmisión y recepción serial, al igual que el
reconocimiento de mnemónicos en un
programa, pues le resta a la configuración
"Loader" las grandes ventajas que
implicitamente representa.

B IBLIOGRAFÍA:

MACKENZIE, Scott. The 8051


Microcontroler, 2ª edición. Ed. Prentice Hall,
USA, 1995

Manual del Microcontrolador 8051

Apuntes de Microprocesadores y Periféricos

http://www.national.com

http://www.ti.com

http://www.fairchildsemi.com

S-ar putea să vă placă și