TODOPIC
Mecatrónica => Robótica => Mensaje iniciado por: Kardia en 12 de Diciembre de 2008, 02:23:25
-
Primeramente soy nuevo en el foro :), inicio mi primer tema para encontrar los errores que estoy cometiendo, ya que uno no nace aprendiendo de la noche a la mañana :lol: :lol:
Les explico en que consiste lo que quiero implementar; pero antes yo siempre empiezo por una previa simulacion de cualquier diagrama antes de implementarlo. Pues consta de un brazo robotico de 2 grados; ya se que hay muchos por la red (5 a 6 grados) pero muy pocos trabajan con el lenguaje ASM, es por ello que quiero empezar yo con este diseño; me defiendo en el ASM, pero mi problema ahora es que no he trabajado mucho con los LCD; un LCD por que??? en si solo para poder visualizar una serie de mensajes que seran activados por unos pulsadores que permiten girar los motores paso a paso.
Empeze primeramente con el programa en MPLAB para el giro de los motores 8) 8) pero cuando empeze a insertar el codigo del LCD no me cuadra donde tiene que ir :shock: :shock: y veo que estoy cometiendo errores muy altos y no se en donde????
he aqui mi codigo, porsiaca no uso las rutinas retardos.inc ni otra que conosca, esta rutina es la que mayormente usan algunos.
LIST P=16F84A
INCLUDE <P16F84A.inc>
RADIX HEX
STATUS EQU 03h ; REGISTRO ESTADO
PORTA EQU 05h ; PUERTO A
PORTB EQU 06h ; PUERTO B
OPTION_REG EQU 81h ; REGISTRO DE INTERRUPCION
INTCON EQU 0bh
TRISA EQU 85h ; REGISTRO CONFIGURACION PUERTO A
TRISB EQU 86h ; REGISTRO CONFIGURACION PUERTO B
CONTA EQU 0X0D ;Damos el nombre de CONTA a dir. 0Dh(USO GENERAL)
CONTB EQU 0X0E ;Damos el nombre de CONTB a dir. 0Eh(USO GENERAL)
CONTC EQU 0X0F ;Damos el nombre de CONTC a dir. 0Fh(USO GENERAL)
ORG 00h ; INDICA AL COMPILADOR DONDE COMIENZA EL PROGRAMA
GOTO INICIO ; VA A SUBRUTINA INICIO
ORG 04h
INICIO
BSF STATUS,5
MOVLW B'11111' ; CARGA '11111' EN EL REGISTRO DE TRABAJO 'W'
MOVWF TRISA ; CARGA 'W' EN EL PUERTO A
MOVLW B'00000000' ; CARGA '00000000' EN EL REGISTRO DE TRABAJO 'W'
MOVWF TRISB ; CARGA 'W' EN EL PUERTO B
MOVLW B'00000111' ; CARGA '00000111' EN EL REGISTRO DE TRABAJO 'W'
MOVWF OPTION_REG ; CONFIGURAMOS TMR0 COMO CONTADOR DESCENDENTE
BCF STATUS,5 ; VUELVE A 0
CLRF PORTA
CLRF PORTB
GIRO
BTFSC PORTA,0 ; EN ESTE PUERTO DA EL GIRO A LA IZQUIERDA
GOTO GIRO1
GOTO IZQUIERDA
GIRO1
BTFSC PORTA,1 ; EN ESTE PUERTO DA EL GIRO A LA DERECHA
GOTO GIRO2
GOTO DERECHA
GIRO2
BTFSC PORTA,2 ; EN ESTE PUERTO ABRE
GOTO GIRO3
GOTO ABRE
GIRO3
BTFSC PORTA,3 ; EN ESTE PUERTO CIERRA
GOTO GIRO
GOTO CIERRA
DERECHA
MOVLW B'00001100' ; PRIMER PASO.
MOVWF PORTB
CALL TIEMPO ; TEMPORIZACIÓN ANTES DE PASAR AL SIGIENTE PASO
MOVLW B'00000110' ; SEGUNDO PASO
MOVWF PORTB
CALL TIEMPO
MOVLW B'00000011' ; TERCER PASO
MOVWF PORTB
CALL TIEMPO
MOVLW B'00001001' ; CUARTO PASO
MOVWF PORTB
CALL TIEMPO
GOTO GIRO ; SE VUELE A GIRO PARA MIRAR EL ESTADO DEL BIT
IZQUIERDA
MOVLW B'00001001' ; PRIMER PASO
MOVWF PORTB
CALL TIEMPO ; TEMPORIZACIÓN ANTES DE PASAR AL SIGIENTE PASO
MOVLW B'00000011' ; SEGUNDO PASO
MOVWF PORTB
CALL TIEMPO
MOVLW B'00000110' ; TERCER PASO
MOVWF PORTB
CALL TIEMPO
MOVLW B'00001100' ; CUARTO PASO
MOVWF PORTB
CALL TIEMPO
GOTO GIRO ; SE VUELVE A GIRO PARA MIRAR EL ESTADO DEL BIT
CIERRA
MOVLW B'11000000' ; PRIMER PASO.
MOVWF PORTB
CALL TIEMPO ; TEMPORIZACIÓN ANTES DE PASAR AL SIGIENTE PASO
MOVLW B'01100000' ; SEGUNDO PASO
MOVWF PORTB
CALL TIEMPO
MOVLW B'00110000' ; TERCER PASO
MOVWF PORTB
CALL TIEMPO
MOVLW B'10010000' ; CUARTO PASO
MOVWF PORTB
CALL TIEMPO
GOTO GIRO ; SE VUELE A GIRO PARA MIRAR EL ESTADO DEL BIT
ABRE
MOVLW B'10010000' ; PRIMER PASO
MOVWF PORTB
CALL TIEMPO ; TEMPORIZACIÓN ANTES DE PASAR AL SIGIENTE PASO
MOVLW B'00110000' ; SEGUNDO PASO
MOVWF PORTB
CALL TIEMPO
MOVLW B'01100000' ; TERCER PASO
MOVWF PORTB
CALL TIEMPO
MOVLW B'11000000' ; CUARTO PASO
MOVWF PORTB
CALL TIEMPO
GOTO GIRO ; SE VUELVE A GIRO PARA MIRAR EL ESTADO DEL BIT
TIEMPO
movwf PORTB ;sacamos los pasos por el PORTb
call Retardo_100ms ;realizamos el llamado para el retardo
return ;retorno de donde fue llamado
Retardo_100ms ;retardo de 100 milisegundos
movlw d'1000' ;OJO d100=100mlsegundos cambio otros valores como ejemplo d50=50mlsegundos
goto Retardos_ms
Retardos_ms
movwf CONTB
R1ms_BucleExterno
movlw d'249'
movwf CONTA
R1ms_BucleInterno
nop
decfsz CONTA,F
goto R1ms_BucleInterno
decfsz CONTB,F
goto R1ms_BucleExterno
return
END
Ahora como empiezo e inserto el codigo del LCD??? y que entradas tomo para la visualizacion del mismo????
Salu2 y gracias :-/ :-/ :-/
-
Hola Kardia bienvenido;
Como el problema que tienes es especifico de software y no de robotica, si no obtienes respuesta por aquí,
te recomiendo que hagas la consulta en el foro correspondiente, en este caso en el de Assembler ahí será mucho más fácil
que alguien te eche una mano a poner en marcha el lcd. Es posible que en el foro de Assembler no te puedan indicar como
usar un sensor de ultrasonidos o a manejar un motor, pero para manejar un LCD, teclado, puerto serie, etc., seguro que si.
Por aquí es más fácil que obtengas respuesta sobre mecanica, motores, sensores, uniones, control RF o por infrarrojos, etc.
-
De aqui te puedes bajar un esquema que utiliza un LCD de 2x16 caracteres a 8bit.
http://www.freewebs.com/glafebre/miguelito.htm
-
Y desde aquí te puedes bajar un conexionado para el LCD trabajando a 4 Bit:
http://www.todopic.com.ar/foros/index.php?topic=14917.msg127169#msg127169
PD: De todas formas si te sobran pin en el micro no te recomiendo que uses la versión a 4bit,
no es porque no funcione bien, es porque funciona mas lento el LCD que trabajando a 8bit.