Vous êtes sur la page 1sur 33

Introduccin

El proyecto es una especie de auto de juguete a control remoto. El mismo posee dos
ruedas motorizadas y una tercera rueda para ayudar con la estabilidad y
direccionabilidad del auto. Tanto el auto como el control estn comandados por micro
controladores PIC y la comunicacin entre ellos es mediante mdulos de radio
frecuencia. Con propsitos estticos el auto est provisto de luminarias led en su
carrocera.
Palabras Claves: Auto a control remoto con motores PASO A PASO, controlados con
PICs y mdulos RF.

Introduction
The project is a kind of toy car remote control. The same features two motorized
wheels and a third wheel to help with stability and steerability of the car. Both the car
and the control are commanded by microcontrollers PIC and communication
between them is by radio frequency modules. Aesthetic purposes the car is equipped
with LED lights in yourbody.
Keywords: Remote control toy cars Stepper Motors, controlled PICs and RF modules.

Descripcin
La explicacin ser divida en dos partes: Control y Auto.
Control
Para la realizacin del control se adapto la carcasa de un control de una consola de juego
comercial debindole adaptar dos placas para las botoneras y la placa del control en s.
Los circuitos electrnicos del control se alimentan con una batera de 9V que est ubicada
dentro de l. Como el micro controlador y el mdulo emisor se alimentan con 5V fue necesario
la colocacin en la entrada de un regulador de tensin 7805.
El micro controlador que se utiliz es el PIC 16F628A. Se eligi este micro controlador porque
es el ms bsico (dentro de los cuales se tiene acceso en el mercado) que rene ciertas
Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
1

condiciones: mdulo de comunicacin serie (USART), oscilador interno y una buena cantidad
de entradas/salidas digitales.
El modelo del mdulo emisor RF es RT4 y trabaja a una frecuencia de 433,92 Mhz con
modulacin ASK (compatible con el receptor que utiliza el auto).
A continuacin se observa el circuito esquemtico del control.


Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
2

Como se puede observar la interfaz entre el micro controlador y el mdulo emisor es la salida
serie que tiene este modelo de micro controlador, entonces, dependiendo de qu pulsador sea
el que est pulsado, por software se genera un cdigo, este cdigo es transmitido por la salida
serie a 3000 baudios (3000 bits por segundos, es la misma velocidad con la que recibe el
receptor del auto) entrando este cdigo al modulo emisor donde es modulado en ASK y
enviado por aire. El cdigo enviado tiene una longitud de 8 bits, por ende, el cdigo que se
puede enviar est en el orden de, en decimal, 0 a 255.
La antena es un cable de aproximadamente 17 cm.
Algoritmo del programa del control
1. Configurar puertos
2. Configurar e inicializar transmisin
3. Lectura de pulsadores
a. Se est apretando el botn de las luces?
i. Trama: 15
b. Se est apretando el botn de acelerar?
i. Se est apretando el botn de derecha?
1. Trama: 150
ii. Se est apretando el botn de izquierda?
1. Trama: 121
iii. Solo se est acelerando?
1. Trama: 30
c. Se est apretando el botn de frenar?
i. Se est apretando el botn de derecha?
1. Trama: 254
ii. Se est apretando el botn de izquierda
1. Trama: 203
iii. Solo se est acelerando?
1. Trama: 50
d. Se est apretando el botn derecha?
i. Trama: 83
e. Se est apretando el botn izquierda?
i. Trama: 103
4. Decrementar Reg (inicialmente es 40)
a. Es cero?
i. Trama: 00
5. Enviar trama y volver al punto 3
Se observa que cada 40 datos enviados uno es cero, esto es por cuestiones de ruidos que
afectaban al normal funcionamiento.

Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
3

Auto
La carrocera del auto est hecha de madera, esta tiene una terminacin de pintura a
base de acrlicos de diferentes colores. En esta madera est montada mediante
tornillos la placa controladora del auto, la batera y los led. Las ruedas, tanto las
motorizadas como la que no lo es, van encastradas a esta madera.
Se utilizaron motores paso a paso para ambas ruedas motorizadas.
Para alimentar la placa controladora y los motores se utiliza una batera de 12V-1,3Ah,
esta est ubicada en la madera por debajo de la placa.
En este caso, al igual que en el control, se utiliza un regulador de tensin 7805 en la
entrada de alimentacin ya que el micro controlador y el mdulo receptor se
alimentan con 5V.
El micro controlador que se utiliz en la placa es, al igual que en el control, el PIC
16F628A por las mismas consideraciones (usart, oscilador interno, varias
entradas/salidas). En la entrada serie de este micro se tiene conectado el mdulo
receptor de RF RR3 que trabaja a 433,92 Mhz y modulacin ASK, mismas
caractersticas que el emisor para que sea posible la comunicacin entre ellos.
Para comandar los motores se utiliza medio puerto A (los 4 bits menos significativos)
para un motor (motor izquierda) y medio puerto B (los 4 bits ms significativos) para el
otro motor (motor derecha). Pero como cada pin de los puertos como mximo entrega
una corriente de 25mA es necesaria la utilizacin de una etapa de amplificacin.
Entonces entre los pines de salida del micro y cada cable del motor se conecta un
amplificador uln2803, que est compuesto de 8 darlington y tiene la caracterstica de
ser negador. El comn del motor se conecta al comn de este integrado a 12V.
Los led tambin van conectados a este amplificador de modo de poder conectar dos
led en serie acompaados de una resistencia (ya que se tienen 12 V) lgicamente
desde el micro se da la orden para encender determinados led.
El patrn de encendido de los led es el siguiente: Si se va para adelante se encienden
los dos de adelante, si se va para atrs se encienden los dos de atrs, si se va hacia
adelante o hacia atrs y se dobla hacia alguna direccin se agrega el encendido de los
dos led de dicha direccin. En el caso de que el auto gire en si mismo se encienden
todos los led sin importar el sentido de giro. Y si se tiene pulsado el botn de luces se
enciende y se apaga en orden en sentido horario (mirndolo desde arriba) arrancando
desde el de adelante.
Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
4

La recepcin tambin se hace a 3000 baudios y se recibe la trama de 8 bits.
La antena al igual que en el control es un cable de aproximadamente 17 cm.
Entonces, en resumen, dependiendo de cul sea la trama recibida, se rotar o no el
motor correspondiente, para el sentido correspondiente y se encendern los led que
se tengan que encender.
A continuacin se presenta el circuito esquemtico de la placa del auto


Algoritmo del programa del Auto
1. Configurar puertos
2. Configurar e inicializar transmisin
3. Recepcin y lectura de la trama
a. Apagar todos los led.
b. Trama=15? (Luces)
i. Hacer juego de luces y volver al punto 3
c. Trama=30? (Acelerando)
i. Rotar una vez ambos motores hacia adelante, encender led delanteros
y volver al punto 3.
d. Trama=50? (Marcha atrs)
i. Rotar una vez ambos motores hacia atrs, encender led traseros y
volver al punto 3.
e. Trama=83? (Doblar derecha)
i. Rotar el motor izquierdo hacia adelante, el motor derecho hacia atrs,
encender todos los led y volver al punto 3.
f. Trama=103? (Doblar izquierda)
Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
5

i. Rotar el motor izquierdo hacia atrs, el motor derecho hacia adelante,
encender todos los led y volver al punto 3.
g. Trama=121? (Acelerar y doblar izquierda)
i. Rotar ambos motores hacia adelante, el de la derecha el doble de
veces que el de la izquierda, encender led delanteros e izquierdos y
volver al punto 3.
h. Trama=150? (Acelerar y doblar derecha)
i. Rotar ambos motores hacia adelante, el de la izquierda el doble de
veces que el de la derecha, encender led delanteros y derechos y
volver al punto 3.
i. Trama=254? (Marcha atrs y doblar derecha)
i. Rotar ambos motores hacia atrs, el de la izquierda el doble de veces
que el de la derecha, encender led traseros y derechos y volver al
punto 3.
j. Trama=203? (Marcha atrs y doblar izquierda)
i. Rotar ambos motores hacia atrs, el de la derecha el doble de veces
que el de la izquierda, encender led traseros e izquierdos y volver al
punto 3.
k. Trama=0? (No se apret nada)
i. Volver al punto 3

Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
6

Lista de materiales y presupuesto
Elemento Cantidad Costo
Reg. 7805 2 $ 3,00
Borneras 14 $ 5,60
Zocalos 4 $ 3,15
Pulsadores 5 $ 5,00
Pulsador Auto 1 $ 1,00
uln 2803 2 $ 5,70
PIC 16f628A 2 $ 17,70
led rojo 1 $ 0,25
led blanco 8 $ 13,10
receptor RF 1 $ 51,56
transmisor RF 1 $ 44,00
Cap .33u 2 $ 0,12
Cap .1u 3 $ 0,17
Resistencia 240 4 $ 0,30
Resistencia 10k 7 $ 0,40
Pulsador Desl 1 $ 1,75
Bateria 9V 1 $ 15
Bateria 12V 1 $ 60
Motor PaP 2 $ 100
Grampa Omega 2 $ 6
Rueda delantera 1 $ 7
Ruedas traseras 2 $ 2
Cable conecciones 2 mts $ 3
Arandelas 8 $ 1
Tornillos grales 15 $ 10
Tuercas 20 $ 5
PCB 1 $ 10
Madera 1 $ 15
Jostick (carcaza) 1 $ 10
Suma total $ 396,80

Precio total del proyecto: Mano de obra + Elementos = $1000

Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
7

Anexos
Programa del control (Assembler)
; ########## PROGRAMA DEL CONTROL REMOTO ##############
__CONFIG _BODEN_OFF & _BOREN_OFF & _CP_OFF & _DATA_CP_OFF & _PWRTE_OFF &
_WDT_ON & _LVP_OFF & _MCLRE_OFF & _INTOSC_OSC_NOCLKOUT
#INCLUDE P16F628A.INC
; ######### DEFINICION DEREGISTROS #######################
AUX1 EQU 0X70 ;Registro auxiliar
AUX3 EQU 0X71
; ###########################################################
ORG 0X00
GOTO INICIO
ORG 0X05
; ############## CONFIGURACION INICIAL ####################
INICIO
BANKSEL CMCON
MOVLW 0X07
MOVWF CMCON
BANKSEL VRCON
MOVLW 0X00
MOVWF VRCON
MOVLW 0xFF
MOVWF TRISA
MOVLW 0xFF
MOVWF TRISB
MOVLW .82
MOVWF SPBRG
Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
8

MOVLW b'10101111'
MOVWF TXSTA
BSF PIE1,4
BANKSEL RCSTA
MOVLW b'10000000'
MOVWF RCSTA
MOVLW .40
MOVWF AUX3
; ############## PROGRAMA PRINCIPAL #######################
LALA
CLRF AUX1
BTFSC PORTA,0 ;Luces
GOTO FRENMANO
BTFSC PORTA,2 ;Acelerar
GOTO ACELERACION
BTFSC PORTA,1 ;Frenar!!
GOTO FRENADA
BTFSC PORTB,4 ;Derecha!!
GOTO DERECHA
BTFSC PORTB,7 ;Izquierda
GOTO IZQUIERDA
AU
DECFSZ AUX3
GOTO $+2
GOTO LALO
ALA MOVF AUX1,W
MOVWF TXREG
CLRWDT
BTFSS PIR1,4
Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
9

GOTO $-2
GOTO LALA
LALO
MOVLW .40
MOVWF AUX3
CLRF AUX1
GOTO ALA
FRENMANO
MOVLW .15
MOVWF AUX1
GOTO AU
ACELERACION
BTFSC PORTB,4
GOTO ACELDER
BTFSC PORTB,7
GOTO ACELIZQ
GOTO ACELERAR
ACELDER
MOVLW .150
MOVWF AUX1
GOTO AU

ACELIZQ
MOVLW .121
MOVWF AUX1
GOTO AU
ACELERAR
MOVLW .30
MOVWF AUX1
GOTO AU
Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
10

FRENADA
BTFSC PORTB,4
GOTO FRENDER
BTFSC PORTB,7
GOTO FRENIZQ
GOTO FRENAR
FRENDER
MOVLW .254
MOVWF AUX1
GOTO AU
FRENIZQ
MOVLW .203
MOVWF AUX1
GOTO AU
FRENAR
MOVLW .50
MOVWF AUX1
GOTO AU
DERECHA
MOVLW .83
MOVWF AUX1
GOTO AU
IZQUIERDA
MOVLW .103
MOVWF AUX1
GOTO AU
END

Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
11

Programa del Auto (Assembler)
; ################ PROGRAMA DEL AUTO #####################
__CONFIG _BODEN_OFF & _BOREN_OFF & _CP_OFF & _DATA_CP_OFF & _PWRTE_OFF &
_WDT_ON & _LVP_OFF & _MCLRE_OFF & _INTOSC_OSC_NOCLKOUT
#INCLUDE P16F628A.INC
;################## DEFINICION REGISTROS #######################
C1 EQU 0x70 ;Cargador del TIMER1
A1 EQU 0X71 ;Aritmentico de C1
AUX2 EQU 0X72 ;Es el Reg que uso para copiar lo qe recibo por usart a TECLA
COND EQU 0X75 ;En este registro tendr en q estado est el auto, q motores debo girar,
etc
AUX EQU 0X76 ;Registro para hacer operaciones
COND2 EQU 0X77 ;Registro similar al Cond
PUERTOA EQU 0X78
PUERTOB EQU 0X79 ;A estos los uso para guardar el valor de los puertos
TECLA EQU 0X7A ;El byte que recibo, si es correcto, lo copio a
REG1 EQU 0x7B ;Ac voy a ir guardando los valores de RCREG para compararlos
NPORTA EQU 0X7C
MPORTA EQU 0X7D ;A estos dos los uso para copiar el estado de los led cuando roto los
puertos
ORG 0X00
GOTO INICIO
ORG 0X05
;#################### CONFIGURACION INICIAL ############################
INICIO
BANKSEL CMCON
MOVLW 0X07 ;Es el numero 0000 0111
MOVWF CMCON ;Con esto me aseguro que los pines del PortA son
digitales y no analogicos. Ver hoja datos
BANKSEL VRCON
Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
12

MOVLW 0X00
MOVWF VRCON ;Con esto deshabilito del puerto A a los comparadores,
me quedan pines digitales
MOVLW b'00110000'
MOVWF TRISA ;Se configuro al puerto A como salida y entrada
MOVLW b'00000110'
MOVWF TRISB
MOVLW b'11111000'
MOVWF OPTION_REG ;Cargo esto al REG OPTIONS para q el WDT sea d 18ms
BANKSEL T1CON
CLRF T1CON ;Se pone a 0 el registro
BSF T1CON,T1CKPS1
BCF T1CON,T1CKPS0 ;Prescaler para TMR1 de 4
CLRF INTCON ;Se anulan las interrupciones
CLRF AUX ;Registro AUX como cero
MOVLW b'00000011'
MOVWF PORTA
MOVLW b'00110000' ;Cargo este valor a W para pasarlo a PORTB y a este
valor lo ire rotando (los 4 bits menos sign son entradas)
MOVWF PORTB
MOVLW b'00010000'
MOVWF COND ;Hago todos los bits de COND cero, menos el b4 porque
al inicio sera 0 la velocidad
MOVLW 0x00
MOVWF COND2
CLRF REG1 ;Borro REG1
MOVLW .1
MOVWF A1
CLRF C1
Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
13

CALL AVANCE ;Antes de llamar a avance para que apague los puertos
apenas alimento el pic, hago A1=C1=0 entonces reconoce que es cero
;###################### RECEPCION DE USART ######################
BANKSEL SPBRG
MOVLW .82
MOVWF SPBRG
MOVLW b'10101111'
MOVWF TXSTA ;Muevo al Reg TXSTA ese valor, con esto configuro: que
la comunicacin sea asincrnica, y alta vel en baudios, habilito la recepcin
BSF PIE1,5 ;Seteo el b5 de PIE1 para habilitar la interrupcin de
RCIF del reg PIR1 cuando se reciba el dato
BANKSEL RCSTA
MOVLW b'10010000' ;Copiando este valor a RCSTA habilito el puerto serie y
la recepcin continua.
MOVWF RCSTA
LOOP
CLRWDT ;Limpio el perro aca porque si hay dos o tres errores
juntos puede llegar a los 18 ms ya que la recepcin se hace aprox 3 ms
CLRF RCREG ;borro el RCREG porque el b5 de PIR1 se hace cero
cuando el rcreg es borrado
BTFSS PIR1,5
GOTO $-1 ;Espero hasta que se haya recibido el dato y lo haya
copiado al RCREG
BTFSS RCSTA,1 ;Salta si el b1 de RCSTA es 1 (OERR) Error que salta sino
aparece el bit STOP
GOTO PREGFERR
BCF RCSTA,4 ;Si viene a estas lneas es porque OERR dio 1, esto me
para la recepcin
BSF RCSTA,4 ;Reseteo y Seteo el bit CREN para asegurarme que el
bit OERR sea cero y no me pare la recepcin
GOTO LOOP ;Como al dato lo perd, voy a preg de nuevo
PREGFERR
BTFSC RCSTA,2
Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
14

GOTO LOOP ;Pregunto por FERR, si es uno (error) que venga ac y
vuelva a esperar un nuevo dato (no lo tengo en cuenta)
BCF STATUS,2 ;Reseteo Z para asegurar su valor
MOVF RCREG,W ;Lo de RCREG a W
SUBWF REG1,W ;Resto lo de RCREG con lo de REG1 para ver si son
iguales
BTFSC STATUS,2 ;Salta si Z es cero (no son iguales) y sino no salta (son
iguales)
GOTO SETTECLA ;Si viene ac es porque son iguales le doy el valor a
TECLA
GOTO SETREG1 ;Si viene aca es porque son distintos, le doy el nuevo
valor a REG1
SETREG1
MOVF RCREG,W ;Lo de RCREG a W
MOVWF REG1
GOTO LOOP ;Se le dio el nuevo valor a REG1 voy a LOOP para
compararlo con el siguiente valor
SETTECLA ;Aca tengo que reconocer el codigo que entra para ver
que teclas tengo pulsadas
CLRF TECLA ;Limpio TECLA para setear los bits que hagan falta
MOVF RCREG,W
MOVWF AUX2
BCF STATUS,2 ;Reseteo Z para asegurar su valor
MOVLW .15 ;Es el codigo que llegaria si tengo apretado el freno de
mano
SUBWF AUX2,W ;Resto lo de RCREG con lo de W si es cero es porque el
el de las luces esta apretado, as hare con todos
BTFSC STATUS,2 ;Si el resultado no es cero (Z=0) que salte y pregunto
por otro codigo sino qeu vaya a setear el bit de TECLa correspondiente
GOTO PMANO
MOVLW .30 ;Es el cdigo que llegara si tengo apretado el de
acelerar
SUBWF AUX2,W
Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
15

BTFSC STATUS,2
GOTO PACEL
MOVLW .50 ;Es el cdigo que llegara si tengo apretado el de frenar
SUBWF AUX2,W
BTFSC STATUS,2
GOTO PFREN
MOVLW .83 ;Es el cdigo que llegara si tengo apretado el de de
doblar a la derecha
SUBWF AUX2,W
BTFSC STATUS,2
GOTO PDER
MOVLW .103 ;Es el cdigo que llegara si tengo apretado el de de
doblar a la izquierda
SUBWF AUX2,W
BTFSC STATUS,2
GOTO PIZQ
MOVLW .121 ;Es el cdigo que llegara si tengo apretado el de de
doblar a la izquierda y el de acelerar
SUBWF AUX2,W
BTFSC STATUS,2
GOTO PACELIZQ
MOVLW .150 ;Es el cdigo que llegara si tengo apretado el de de
doblar a la derecha y acelerar
SUBWF AUX2,W
BTFSC STATUS,2
GOTO PACELDER
MOVLW .254 ;Es el cdigo que llegara si tengo apretado el de de
doblar a la derecha y frenar
SUBWF AUX2,W
BTFSC STATUS,2
GOTO PFRENDER
Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
16

MOVLW .203 ;Es el cdigo que llegara si tengo apretado el de de
doblar a la izquierda y frenar
SUBWF AUX2,W
BTFSC STATUS,2
GOTO PFRENIZQ
MOVLW .00 ;Es el cdigo que llegara si no tengo nada
SUBWF AUX2,W
BTFSC STATUS,2
GOTO COMIENZO
GOTO LOOP ;En el caso de que ninguno de estos cdigos haya
llegado se va a LOOP a esperar otro y preguntar
PMANO
BSF TECLA,5
GOTO COMIENZO

PACEL
BSF TECLA,0
GOTO COMIENZO
PFREN
BSF TECLA,7
GOTO COMIENZO
PDER
BSF TECLA,3
GOTO COMIENZO
PIZQ
BSF TECLA,2
GOTO COMIENZO
PACELIZQ
BSF TECLA,0
Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
17

BSF TECLA,2
GOTO COMIENZO
PACELDER
BSF TECLA,0
BSF TECLA,3
GOTO COMIENZO
PFRENDER
BSF TECLA,7
BSF TECLA,3
GOTO COMIENZO
PFRENIZQ
BSF TECLA,7
BSF TECLA,2
GOTO COMIENZO
;###################### COMIENZO DEL PROGRAMA PRINCIPAL ####################
COMIENZO
;***Reconocimiento de movimiento o no, lectura del b4 de COND*****
BCF PORTB,0
BCF PORTB,3
BCF PORTA,6
BCF PORTA,7 ;Apago todos los led,
BTFSS COND,4 ;Si el b4 de COND es =1 salta una linea (sin
movimiento) sino no salta (movimiento)
GOTO MOV
;######### SI VIENE ACA ES PORQUE b4=1, O SEA CUANDO EL AUTO ESTA EN REPOSO ######
SINMOV
BCF COND2,0
BCF COND2,1 ;Reseteo los b0 y b1 del COND2 para que no
vaya a girar en su propio eje
MOVLW .230 ;Valor minimo (arranca fuerte)
Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
18

MOVWF C1 ;Hago C1 para empezar la aceleracin de
VALOR MINIMO ya sea al comienzo como cuando voy acelerando y freno hasta ir marcha atrs
BCF COND,4 ;b4 de COND = 0, para que detecte que sali de
reposo, en caso de no salir lo hago cero ms adelante
BTFSC TECLA,5 ;Salta si el b5 de TECLA es cero
GOTO SETB4F
BTFSC TECLA,0 ;Salta si el b0 de TECLA es cero
GOTO ACEL1 ;Si viene ac es porque el b0 de TECLA es 1,
BTFSC TECLA,7 ;Salta si el b7 de TECLA es cero (marcha atras)
GOTO FREN1 :Si viene aca es porque el b7 de TECLA es 1 esta
apretando el de marcha atras,
BTFSC TECLA,2 ;Salta si el b2 de TECLA es cero,
GOTO GIROANTI ;Si viene aca es porque el b2 de TECLA es 1
estoy doblando a la izquierda que vaya a GIROANTI
BTFSC TECLA,3 ;Salta si el b3 de TECLA es cero,
GOTO GIROHOR ;Si viene ac es porque el b3 de TECLA es 1
estoy doblando a la derecha que vaya a GIROHOR
SETB4
BSF COND,4
GOTO LOOP
SETB4F
BSF COND,4
BSF PORTA,7
CALL DELAY
BCF PORTA,7
BSF PORTA,6
CALL DELAY
BCF PORTA,6
BSF PORTB,3
CALL DELAY
BCF PORTB,3
Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
19

BSF PORTB,0
CALL DELAY
BCF PORTB,0
GOTO LOOP
ACEL1 ;Aca viene si estando parado apreto el de acelerar
BSF COND,0 ;Hago b0=1 para informar que estoy
avanzando.
GOTO LOOP ;Salto a loop para luego ir a mov
FREN1 ;Ac viene si estando en reposo apret el de frenar
BCF COND,0 ;Hago b0=0 para informar de que estoy
retrocediendo
GOTO LOOP ;Salto a loop para luego ir a mov
GIROANTI ;Aca viene si estando en reposo apreto para doblar a la
izquierda (para que gire en sentido antihorario en su propio eje)
BSF COND2, 1 ;Seteo b1 del COND2 para informar que estoy
girando antihorario
GOTO LOOP ;Salto a loop para luego ir a mov
GIROHOR ;Aca viene si estando en reposo apreto para doblar a la
derecha (para que gire en sentido horario en su propio eje)
BSF COND2,0 ;Seteo el b0 del COND2 para informar que
estoy girando horario
GOTO LOOP ;Salto a loop para luego ir a mov
SALIR1
CALL AVANCE
GOTO LOOP
;###########ACA VIENE CUANDO EL AUTO YA NO ESTA EN REPOSO, b4=0!!! #############
MOV
;********* Deteccin del estado de los puertos***********
BCF STATUS,2 ;Reseteo Z para asegurar su valor
MOVF PORTB,W ;Lo de portb a w
ANDLW 0xF0 ;And entre portb y f0
Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
20

BTFSC STATUS,2 ;Si Z=0 es decir la operacin no dio cero (el
portb no es cero)salta y sino le asigno el valor a portb
GOTO SETPORTS ;Si Z=1 (el portb es cero, voy a asignarle el valor
que tenia)
GOTO MOVE ;En el caso de que Z sea cero viene ac y
comienza con MOV (este caso el paso anterior no fue SINMOV)
SETPORTS ;Aca va a venir cuando se entre a mov luego de
haber ejecutado sinmov, tendre que darle los valores a los puertos
MOVF PUERTOB,W
MOVWF PORTB
MOVF PUERTOA,W
MOVWF PORTA ;Asigno los valores a los puertos (los valores
que tenian antes, entonces no me va a hacer un paso cuando los energizo)
MOVE
BSF COND,5
BSF COND,7 ;Seteo b7 y b5 de COND para que giren ambos
motores
BCF COND,3 ;Reseteo el b3 de COND, si est acelerando lo
setear
MOVLW .1
MOVWF A1 ;Cargo A1 con 1 (porque si desacelera toma
este valor), en el que caso de que frene har A1=20 y si acelera (A1=10)
;****Esta configuracin es comn a los casos de movimiento hacia delante o hacia atrs (se
modificar en cada caso) y para el giro en su propio eje
BTFSS COND2,0 ;Si el b0 de COND2 es 1, salta y ejecuta la
instruccin para girar sentido horario, sino pregunto por b1
BTFSC COND2,1 ;Si el b1 de COND2 es 0, salta, si es 1 no salta y
ejecuta la instruccin para girar en sentido antihorario
GOTO GIROEJE ;Ac viene si alguno (b1 o b0 de COND2) es 1
(lo har girar en su propio eje), sino a esta lnea la saltea,
BTFSS COND,0 ;Salta si b0 de COND es 1 (corresponde a si se
est moviendo para adelante), sino no salta y voy a mov pra atras
GOTO MOVATRAS ;Si b0=0 es porque el estado de mov es hacia
atras
Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
21

BSF PORTA,7 ;Seteo RA7, estoy prendiendo el led de
adelante ya que se mueve hacia adelante
BSF COND,1
BSF COND,6 ;Seteo b1 y b6 de COND para que ambos
motores se muevan hacia adelante
BTFSC TECLA,0 ;Salta si el b0 de TECLA es 0 , sino, es porque
estoy acelerando
GOTO ACEL2 ;Si el b0 de TECLA es 0 va a la funcin acelerar.
BTFSC TECLA,7 ;Salta si el b7 de TECLA es 0 , sino, es porqe
estoy frenando
GOTO FREN2 ;Si el b7 de TECLA es 1 va a la funcin frenar
GOTO DOBIZQ ;Si viene ac es porque no estoy ni acelerando
ni frenando, entonces por los valores que tiene (b3=0 y A1=10) va a desacelerar
MOVATRAS ;Ac viene cuando entra a mov y no se est
girando en el propio eje, ni se est moviendo para adelante, no queda otra que movimiento
hacia atrs
BSF PORTB,3 ;Seteo RB3, estoy prendiendo el led de atrs
porque se est moviendo para atrs
BCF COND,1
BCF COND,6 ;Reseteo b6 y b1 de COND para que ambos
motores giren hacia atrs
BTFSC TECLA,7 ;Salta si el b7 de TECLA es 0, sino, no salta
GOTO ACEL2 ;Como estoy apretando el de frenar cuando me
muevo hacia atrs,
BTFSC TECLA,0 ;Salta si el b0 de TECLA es 0, sino, no salta
GOTO FREN2 ;Como estoy apretando el de acelerar cuando
me muevo hacia atrs, es como frenar
GOTO DOBIZQ ;Si viene ac es porque no estoy ni acelerando
ni frenando, entonces por los valores que tiene (b3=0 y A1=10) va a desacelerar
ACEL2 ;Aca va a venir cuando me estoy moviendo para
adelante y aprieto el de acelerar o cuando estoy yendo para atrs y aprieto el de marcha atrs
MOVLW .10
MOVWF A1 ;Hago A1=10 valor de la aceleracin
BSF COND,3 ;Seteo el b3 de COND para que se sume C1 y
A1
Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
22

GOTO DOBIZQ ;Ya tengo los valores de los bits voy a preguntar
si dobla.
FREN2 ;Ac va a venir cuando me estoy moviendo para atrs y
aprieto el de acelerar o cuando estoy yendo para adelante y aprieto el de marcha atrs (freno)
MOVLW .20
MOVWF A1 ;Llevo 20 a A1 para que frenee mas rapido
GOTO DOBIZQ ;Ya tengo los valores de los bits voy a preguntar
si dobla.
DOBIZQ
BTFSS TECLA,2 ;Si el b2 de TECLA es 1 salta (cuando estoy
doblando a la izquierda), sino pregunto por derecha
GOTO DOBDER ;SI el b2 de TECLA es 0 viene ac y voy a
preguntar por doblar a la derecha
BSF PORTB,0 ;Seteo RB0, estoy prendiendo el led de la
izquierda, ya que estoy doblando a la izq
BCF COND,7 ;Reseteo b7 de COND para que el M1 gire un
paso cada dos
COMF AUX,F ;Complemento AUX y guardo en aux, ser 00 o
FF, cada vez que sea 00 habilito el motor1 (una vez cada dos)
BTFSC STATUS,2 ;Salta si Z=0 (seria cuando AUX=FF) sino, no
salta (cuando AUX=00)
BSF COND,7 ;Si Z=1 viene ac (cada vez que AUX=00) en
estos casos har girar el motor 1
GOTO SALIR1 ;Ya tengo el valor de los bits salgo

DOBDER ;Ac viene cuando entra a mov, puede estar acelerando,
doblando, desacelerando (para cualquiera de los dos lados) y cuando no estoy doblando a la
izquierda
BTFSS TECLA,3 ;Si el b3 de TECLA es 1 salta (cuando estoy
doblando a la derecha), sino salgo porque no estara doblando
GOTO SALIR1 ;Si el b3 de TECLA es 0 viene ac y salgo
BSF PORTA,6 ;Seteo RA6, estoy prendiendo el led de la
derecha ya que estoy doblando a la derecha
BCF COND,5 ;Reseteo b5 de COND para que el M2 gire un
paso cada dos
Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
23

COMF AUX,F ;Complemento AUX y guardo en aux, ser 00 o
FF, cada vez que sea 00 habilito el motor1 (una vez cada dos)
BTFSC STATUS,2 ;Salta si Z=0 (seria cuando AUX=FF) sino, no
salta (cuando AUX=00)
BSF COND,5 ;Si Z=1 viene ac (cada vez que AUX=00) en
estos casos har girar el motor 1
GOTO SALIR1
GIROEJE ;Aca viene si cuando entro a MOV se detecta que se est
girando en el propio eje (se tiene b7=b5=1, A1=10, b3=0)
BTFSS TECLA,0 ;Si el b0 de TECLA es 1 salta (apretando el de
acelerar) en este caso quiero que deje de girar y con la vel que traia salga para adelante, sino
que pregunte por frenar
GOTO PREGFREN ;Ac viene si el b0 de TECLA es 0 voy a
preguntar si esta apretado el de acelerar
BSF COND,1
BSF COND,6 ;Seteo b1 y b6 de COND para que los dos giren
a la izquierda
BSF COND,0 ;Asi informo que ir para adelante
BCF COND2,0
BCF COND2,1 ;Reseteo b1 y b0 de COND2 para que no est
ms el estado de girando en propio eje ya que con esto saldra para adelante.
GOTO LOOP ;Voy a LOOP directamente as con estos bit y
los de MOV saldr para adelante.
PREGFREN ;Ac viene si esta girando en su propio eje y aprieto el
de frenar, para que salga para atrs a la vel con la que viene
BTFSS TECLA,7 ;Si el b7 de TECLA es 1salta y lo hace salir para
atras a la velocidad con la que viene, sino va a las instrucciones que lo hace seguir girando
GOTO SIGAGIR
BCF COND,1
BCF COND,6 ;Reseteo b1 y b6 de COND para que los dos
giren a la derecha
BCF COND,0 ;As informo que ir para atrs
BCF COND2,0
BCF COND2,1 ;Reseteo b1 y b0 de COND2 para que no est
ms el estado de girando en propio eje ya que con esto saldra para atrs.
Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
24

GOTO LOOP ;Voy a LOOP directamente as con estos bit y
los de MOV saldr para atrs.
SIGAGIR ;Ac viene si estoy girando en el propio eje y no estoy
apretando ni acelerar ni frenar.
BSF COND,1
BSF COND,6 ;Seteo b1 y b6 de COND para que los dos giren
a la izquierda, en cada caso har cambiar uno de sentido
BSF PORTB,0
BSF PORTB,3
BSF PORTA,7
BSF PORTA,6 ;Seteo RB0 RA6 RB3 RA7, estoy encendiendo
TODOS LOS LED ya qe giro en el propio eje en algn sentido
BTFSS COND2,0 ;Si b0 de COND es 1 salta una lnea (se est
girando en sentido horario!!), sino va a sentido antihorario
GOTO SENTANTI ;Ac viene si b0 de COND es 0, para que gire
antijorario
BCF COND,1 ;Reseteo el b1 de COND para que M2 gire hacia
atras! (mov horario)
BTFSC TECLA,3 ;Salta si el b3 de TECLA (doblar derecha) =0 y
preg por b2 de TECLA sino, va a SUM1
GOTO SUM1 ;Si el b3 de TECLA es 1 (estoy doblando a la
derecha) va a SUM1 para que sume A1 y C1
BTFSC TECLA,2 ;Salta si el b2 de TECLA (doblar izquierda) =0 ,
sino va a RES1
GOTO RES1 ;Si RB2=1 (estoy doblando a la izquierda) va a
RES1 para que reste A1 y C1
GOTO SALIR1 ;Si viene ac es porque estoy girando en
sentido horario y no estoy apretando nada, entonces es como que desacelera (b1=0, b7=b5=1,
b3=0, A1=10) como ya tengo todo, llamo a avance
SENTANTI ;Ac viene si no estoy girando en el propio eje en sentido
horario y no estoy apretando ni acelerar ni frenar. No queda otra que sea antihorario
BCF COND,6 ;Reseteo el b6 de COND para que M1 gire hacia
atrs (mov antihorario)
BTFSC TECLA,2 ;Salta si el b2 de TECLA (doblar izquierda) =0 y
preg por b3 de tecla, y sino, va a SUM1
Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
25

GOTO SUM1 ;Si viene ac es porqe RB2=1, va a sumar A1 y
C1
BTFSC TECLA,3 ;Salta si el b3 de TECLA (doblar derecha) =0,
sino, va a RES1
GOTO RES1 ;Ac viene si b3 de TECLA es 1, va a restar A1
(20) y C1
GOTO SALIR1 ;Si viene ac es porque estoy girando en
sentido antihorario y no estoy apretando nada, entonces es como que desacelera como ya
tengo todo, llamo a avance
SUM1 ;Aca viene si estoy girando en sentido horario y aprieto el de la
derecha o si est girando en sentido antihorario y aprieto a la izquierda (equivale a acelerar,
por eso sumo)
MOVLW .10
MOVWF A1 :Hago A1=10, valor de la aceleracion
BSF COND,3 :Seteo b3 de COND para que sume A1+C1
GOTO SALIR1 ;Ya tengo todos los valores llamo a Avance
RES1 ;Ac viene si estoy girando en sentido horario y aprieto el de la
izquierda o si est girando en sentido antihorario y aprieto a la derecha (equivale a frenar, por
eso resto)
MOVLW .20
MOVWF A1 ;Hago A1=20 para restar y que frene
GOTO SALIR1 :Ya tengo todos los valores llamo a Avance
AVANCE
BTFSC COND,4 ;Si el b4 de COND es 1 va a apagar puertos
porque esta parado sino ejecuta avance (para el caso del comienzo)
GOTO OUTOFF

;***Motor 1***
MOTOR1
BTFSS COND,7 :Si el b7 de COND es 1 salta (girar M1) sino no
(no girar M1)
GOTO MOTOR2 ;Si el b7=0 (no rotar M1) directamente voy a
preg por M2
Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
26

BTFSS COND,6 ;Si el b6 de COND es 1 salta (girar izquierda)
sino no (girar derecha)
GOTO DERM1 ;Si el b6=0 va a DERM1 (gira a la derecha a M1)
IZQM1 ;Si viene aca es para girar a la izquierda,antes de rotar tengo
que salvar los valores de los led
MOVF PORTA,W ;Lo de PORTA a W
MOVWF MPORTA ;Paso a Mporta lo del puerto as cuando hago
las operaciones no giran los motores
ANDLW 0XF0 ;Con esto guardo los valores de los led del
puerto A en Nporta
MOVWF NPORTA

BCF STATUS,C ;Reseteo el Cy para asegurar sus valores
BTFSC MPORTA,3
BSF STATUS,C ;Si el bit 3=1 seteo el cy (no cambio de banco
porque no hace falta con status) ya que uso los 1 4 bit del puerto
RLF MPORTA,F ;Rotacin a la izquierda a travs del Cy y
guardo en MPORTA
MOVF MPORTA,W ;El mporta rotado lo mando a W
ANDLW 0X0F ;Conservo en W los valores de los motores
ADDWF NPORTA,W ;Sumo el valor de los led y cero mas el valor de
los motores y cero
MOVWF PORTA ;Ac tengo los led de antes y los de los motores
ya rotados
GOTO MOTOR2 ;Ya rote, preg por M2
DERM1 ;Si viene ac es porque a M1 hay que rotarlo a la derecha,
MOVF PORTA,W ;Lo de PORTA a W
MOVWF MPORTA ;Paso a Mporta lo del puerto as cuando hago
las operaciones no giran los motores
ANDLW 0XF0 ;Con esto guardo los valores de los led del
puerto A en Nporta
MOVWF NPORTA ; a los menos sign rotarlos a la derecha, al bit 3
hay que hacerlo igual que el Cy dps de rotar
Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
27

RRF MPORTA,F ;Roto MPORTA a la derecha y el Cy tiene el
valor de bo, a este valor debo copiarlo en b3
BCF MPORTA,3 ;Hago 0 el b3, si el Cy=1 lo seteo y sino lo dejo
BTFSC STATUS,C ;Si el Cy=0 salta sino setea al b3
BSF MPORTA,3 ;Si el Cy=1 viene aca y seteo el b3 y ya va a
preguntar por el M2
MOVF MPORTA,W ;El mporta rotado lo mando a W
ANDLW 0X0F ;Conservo en W los valores de los motores
ADDWF NPORTA,W ;Sumo el valor de los led y cero mas el valor de
los motores y cero
MOVWF PORTA ;Ac tengo los led de antes y los de los motores
ya rotados
;***Motor 2***
MOTOR2
BTFSS COND,5 ;Si el b5 de COND es 1 salta (girar M2) sino no
gira
GOTO CALC1 ;Si el b5=0 no roto M2 y voy a preguntar por b3
para calcular C1
BTFSS COND,1 ;Si el b1 de COND es 1 salta y gira a la izquierda
sino derecha
GOTO DERM2 ;Si el b1=0 girar a la derecha
IZQM2 ;Girar a la izquierda al PORTB, uso los 4 ms significativos, y
guardo lo de los led para no perder los valors como en M1
MOVF PORTB,W ;Lo de PORTB a W
MOVWF MPORTA ;Paso a Mporta lo del puerto as cuando hago
las operaciones no giran los motores
ANDLW 0X0F ;Con esto guardo los valores de los led del
puerto B en Nporta
MOVWF NPORTA ; roto hacia la izquierda similar a como rote a la
derecha el M1
RLF MPORTA,F ;Roto a la izquierda a PORTB y el Cy toma el
valor de b7, a este debo copiarlo en b4
BCF MPORTA,4 ;Reseteo b4, Si el Cy=1 lo seteo y sino lo dejo
en 0
Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
28

BTFSC STATUS,C ;Si el Cy=0 salta, sino setea al b4
BSF MPORTA,4 ;Si viene aca es pq el Cy=1
MOVF MPORTA,W ;El mporta rotado lo mando a W
ANDLW 0XF0 ;Conservo en W los valores de los motores
ADDWF NPORTA,W ;Sumo el valor de los led y cero mas el valor de
los motores y cero
MOVWF PORTB ;Aca tengo los led de antes y los de los motores
ya rotados
GOTO CALC1 ;Ya roto, SALTO
DERM2 ;Si viene aca porque hay que rotar el M2 a la derecha los 4 ms
significativos,
MOVF PORTB,W ;Lo de PORTB a W
MOVWF MPORTA ;Paso a Mporta lo del puerto as cuando hago
las operaciones no giran los motores
ANDLW 0X0F ;Con esto guardo los valores de los led del
puerto B en Nporta
MOVWF NPORTA
BCF STATUS,C ;Reseteo el Cy
BTFSC MPORTA,4 ;Si el b4 de PORTB es 0 salta, sino setea el Cy
asi cuando rota el b7=b4
BSF STATUS,C ;Si el b4=1 el Cy=1
RRF MPORTA,F ;Roto portb y guardo en el
MOVF MPORTA,W ;El mporta rotado lo mando a W
ANDLW 0XF0 ;Conservo en W los valores de los motores
ADDWF NPORTA,W ;Sumo el valor de los led y cero mas el valor de
los motores y cero
MOVWF PORTB ;Ac tengo los led de antes y los de los motores
ya rotados
CALC1 ;Aca se le da el valor a C1 antes de llamar a DELAY
BTFSS COND,3 ;Si el b3 de COND es 1 salta para sumar, sino
resta
GOTO RESTAR ;Si el b3 es cero, resta
Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
29

BSF STATUS,C ;Seteo el Cy para poder preguntar si es cero
despues
MOVF C1,W ;Lo de A1 a W para poder operar
SUBLW .240 ;Resto el valor de C1 con 240, si el valor es
negativo es porque C1 es mayor, en este caso no dejo sumar (porque se me puede rebasar C1
y volver a 0 y hago C1=250)
BTFSS STATUS,C ;Salta si el Cy es 1 (caso de que la resta haya
dado positiva, hago la suma) sino no salta y seteo C1 en 250
GOTO SETC1 ;Si la resta dio negativa (Cy=0) es porque C1 es
mayor que 240 en este caso le doy el valor de 250 a C1
MOVF C1,W ;Vuelvo a mandar el valor de C1 a W (porque se
pierde en la resta)aca viene si C1 es menor o igual que 240, le puedo sumar 10sin riesgo a
rebasar a 255
ADDWF A1,W ;Sumo C1+A1 y lo guardo en C1
MOVWF C1 ;Llevo el resultado a C1
GOTO CALLDELAY ;Ya tengo el valor de C1 llamo a delay
SETC1 ;Aca viene si C1 es mayor a 240, como no puedo sumarle 10
porque me paso de 250 directamente le digo C1=252
MOVLW .252
MOVWF C1 ;C1=250
GOTO CALLDELAY ;Ya sumo que vaya a la linea que llama a delay
RESTAR ;Aca viene si hay que restar (b3=0)
MOVF C1,W
BSF STATUS,C ;Seteo el CY porque si la operacion da negativo
el Cy se pone a 0
BCF STATUS,2 ;Reseteo Z para asegurar su valor
SUBLW .100 ;Resto C1-Tope Maximo y guardo en W, si el
resultado es cero o negativo, b4=1 y apago los puertos, (para que no patine pongo este tope)
BTFSC STATUS,2 ;Si el bit 2 de STATUS (Z) es 0 (la cuenta no dio
cero) salta una linea y si da cero no salta
GOTO OUTOFF ;Si la cuenta da cero voy a outoff para avisar
que da cero y apagar los puertos
BTFSS STATUS,C ;Si el Cy=1 salta, sino no salta (caso de que el
resultado sea negativo)
Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
30

GOTO OUTOFF ;Si el Cy=0 es porque la cuenta dio negativa en
ese caso aviso que es cero y apago los puertos
MOVF A1,W
SUBWF C1,F ;Hago C1-A1=C1 hasta que sea menor que el
tope y llamo a delay
CALLDELAY ;Cuando venga aca ya se va a tener un valor definido de C1
CALL DELAY ;Una vez que tengo definido el valor de C1
llamo a delay
RETURN ;Retorno para que vuelva y salga de avance
OUTOFF ;Aca viene cuando dps de estar en movimiento
pasa a ser cero. voy a hacer b4=0 y a apagar los puertos asi el motor no queda con carga
BSF COND,4 ;Si el Cy=0 quiere decir que la cuenta dio
negativa, o sea C1, es decir tengo que detener el movimiento
MOVF PORTB,W
MOVWF PUERTOB ;Llevo lo del PORTB al PUERTOB
CLRF PORTB ;Reseteo el puerto b para q los motores no
queden haciendo fuerza, los volvere a activar cuando entre a MOV lo mismo con PORTA
MOVF PORTA,W
MOVWF PUERTOA ;Llevo lo del PORTA al PUERTOA
CLRF PORTA
CALL CALLDELAY
DELAY
BCF T1CON,0 ;Reseteo el bits de activacin del tmr1 para
encenderlo cuando yo quiera
BCF PIR1,TMR1IF ;Reseteo la bandera de rebase del timer1
MOVF C1,W ;Muevo el valor de C1 a W para poder cargar el
TMR1
MOVWF TMR1H ;Cargo la parte alta del TMR1 con el valor de C1

CLRF TMR1L ;Hago 0 la parte baja del TMR1 asi arranca
desde cero
BSF T1CON,0 ;Seteo el bit que me activa al tmr1, o sea que
desde aca lo activo
Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
31

CLRWDT ;Seteo el perro guardian
BTFSS PIR1,TMR1IF ;Si este bit es 1 salta una linea (cuando se
rebasa el timer)
GOTO $-2
RETURN ;Retorna cuando rebasa el timer
END

Universidad Tecnolgica Nacional
Facultad Regional Villa Mara
32

Fotos

Vous aimerez peut-être aussi