|
El proyecto fue realizado en lenguaje ensamblador
(assembler) y compilado con la herramienta de Microchip
MPLAB, la misma podrá encontrarla en la página
de Microchip o en nuestra web.
Los archivos fuente (.asm) y los mismos compilados
(.hex) se los puede hallar en los archivos que se
encuentran con la clave brain (haga click en el
ícono password de nuestra web e introduzca
dicha clave).
El archivo fuente de nuestro proyecto se llama mi-md.asm.
En este ejemplo se demuestra cómo manejar
dos motores DC conectados a CN7 y CN8. Para realizar
este ejemplo, se deben conectar dos motores DC en
las salidas CN7 y CN8 según se explica en
la nota respectiva de esta misma edición
(conectores CN7 y CN8).
Las llaves 1 a 7 del DipSwitch deben estar en OFF
.
El programa es muy sencillo y hace que los motores
giren en un sentido durante 500 milisegundos, se
paren, giren en sentido contrario y vuelva a reiniciarse
el ciclo.
Una vez encendida la TR-Brain y cargado el programa
en el PIC, los motores girarán hacia un lado
y hacia otro con un retraso de 500 ms entre cada
cambio de dirección, los motores deben conectarse
según lo mostrado en la figura 1. Cabe aclarar
que el programa es meramente demostrativo, y que
Ud. podrá emplear diferentes rutinas como
para que los motores giren en un sentido u otro,
en función de determinados estados de entradas
que Ud. puede definir a voluntad.
El programa es el siguiente:
list p=16F84A ; directiva para definir el procesador
#include <p16F84a.inc> ; include file del
procesador usado
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON
& _XT_OSC
w_temp EQU 0x0C ;variable usada para salvar registro
W
status_temp EQU 0x0D ;variable usada para salvar
registro STATUS
vargral_2 EQU 0x0E ;variable de uso general en rutinas
varias
vargral_1 EQU 0x0F ;variable de uso general en rutinas
varias
delay_ms EQU 0x10 ;contiene la cant.de ms del delayms
opt_status EQU 0x11 ;contiene el estado de opticos
en bit 0 y 1
;bit 0 contiene estado opt.izquierdo (1=refleja)
;bit 1 contiene estado opt.derecho (1=refleja)
#define F_MI PORTA,2
#define R_MI PORTA,3
#define F_MD PORTA,0
#define R_MD PORTA,1
#define RB_0 PORTB,0
#define RB_1 PORTB,1
#define RB_2 PORTB,2
#define RB_3 PORTB,3
#define RB_4 PORTB,4
#define RB_5 PORTB,5
#define RA_4 PORTA,4
ORG 0x000 ;Vector de RESET del procesador
goto start ;salta al comienzo del programa
start:
bsf STATUS,RP0 ;Selecciono banco 1
bcf OPTION_REG,NOT_RBPU ;habilito Pull Up en Port
B
movlw 0x10 ;Seteo Port RA4 como entrada
andlw 0x10
movwf TRISA
movlw 0xFF ;RB0 a RB5 como entradas
iorlw 0xC0
movwf TRISB
bcf STATUS,RP0 ;Selecciono banco 0
movlw D'250'
movwf delay_ms ;defino delay en 250 ms
main:
call adelante_todo ;motores hacia adelante
call delayms
call delayms
call frena_todo ;freno motores
call delayms
call delayms
call atras_todo ;motores hacia atras
call delayms
call delayms
call frena_todo ;freno motores
call delayms
call delayms
goto main ;inicio el ciclo nuevamente
frena_todo: ;rutina que frena los motores
bsf F_MI
bsf R_MI
bsf F_MD
bsf R_MD
return
adelante_todo: ; rutina que hace el giro en sentido
horario
bsf F_MI
bcf R_MI
bsf F_MD
bcf R_MD
return
atras_todo: ;rutina que hace el giro antihorario
bcf F_MI
bsf R_MI
bcf F_MD
bsf R_MD
return
delayms: ;rutina que genera una demora de 500 ms
movf delay_ms,W
movwf vargral_2
clrf vargral_1
delayms1:
nop
nop
nop
decfsz vargral_1,F
goto delayms1
decfsz vargral_2,F
goto delayms1
return ;fin del delay
END ;directiva: 'FIN DEL PROGRAMA'
Como puede observar, hemos dado un programa genérico
que Ud. puede emplear como ejemplo. Cabe aclarar
que, por razones de espacio, no podemos explicar
paso a paso cómo se construye
el programa. Si Ud. desea saber qué es lo
que se consigue con cada instrucción, en
nuestra web, con la clave dada, podrá bajar
el archivo md-mi.asm y si lo abre con
un programa editor de texto (el Word, por ejemplo),
tendrá un tutorial completo sobre la forma
de emplear cada rutina. Aclaramos que, en este caso,
los motores giran hacia un lado y hacia el otro
en forma automática; pero podría emplear
los terminales del conector CN5 como entradas y
hacer que el giro de cada motor se produzca cuando
hay una de esas entradas activadas o hacer que el
giro responda a una zona oscura o clara detectada
por los sensores ópticos conectados en CN9.
Insistimos... con la explicación dada en
el tutorial que puede bajar de Internet, no tendrá
problemas en realizar Ud. mismo, el programa que
requiere para una aplicación específica.
|