Autor Tema: ayuda con pic y motor paso a paso  (Leído 2111 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado alfayomega

  • PIC10
  • *
  • Mensajes: 16
ayuda con pic y motor paso a paso
« en: 23 de Abril de 2012, 18:04:19 »
hola amigos quisiera saber si me puedenayudar un poquito
estoy realisando un proyecto con el pic 16f877a para comandar 2 motores paso a paso pero con codigos binarios para los comando de giros
por ejemplo las entradas de datos binarios son el puerto portd y las salidas a los motores paso a paso son portb , primero comense el programa con el primer motor y el giro para izquierda es el portD0 y la dercha portD1 este deja de girar cuando no tiene en las entradas un 1 logico hasta hay todo bien pero no logro hacer que el motor no gire cuando tiene el el portD0 y portD1 u 1 logico ya que el segundo motor se deberia mover para un lado con esta binaria de entrada y para el otro lado portD2 no se si menentienden pero escribo el codigo por si a caso algien me quiere ayudar
 


Z1 VAR PORTD.0
Z2 VAR PORTD.1
TRISB=%00000000

inicio:

IF Z1=1 THEN
PORTB = %00000001
pause 500
PORTB = %00000101
pause 500
PORTB = %00000100
pause 500
PORTB = %00000110
pause 500
PORTB = %00000010
pause 500
PORTB = %00001010
pause 500
PORTB = %00001000
pause 500
PORTB = %00001001
pause 500
ENDIF

IF Z1=0 THEN
TRISB=%00000000
ENDIF

IF Z2=1 THEN
PORTB = %00001001
pause 500
PORTB = %00001000
pause 500
PORTB = %00001010
pause 500
PORTB = %00000010
pause 500
PORTB = %00000110
pause 500
PORTB = %00000100
pause 500
PORTB = %00000101
pause 500
PORTB = %00000001
pause 500
ENDIF

IF Z2=0 THEN
TRISB=%00000000
ENDIF

goto inicio
end

bueno la idea es que con la binaria 00000001 mueva el motor 1 a la izquierda
00000010 motor 1 a la dereccha
00000011 motor 2 a la izquierda
00000100 motor 2 a la derecha
  :( :(

Desconectado headchiu

  • PIC10
  • *
  • Mensajes: 2
Re: ayuda con pic y motor paso a paso
« Respuesta #1 en: 24 de Abril de 2012, 13:28:48 »
Hola amigo alfayomega
No se si esto resuelva tu duda, nunca programé un pic en lenguaje Basic, pero tengo la idea con la sintaxis ya que trabaje con algunos picaxe, por lo que observo en tu código mantienes una condicionante if y lugo las lineas de codigo de ejecución del puerto B. Yo te recomendaría que manejes etiquetas y subrutinas, así como en asm. por ejemplo no se si me entiendas:

INICIO:  ( TU ETIQUETA PRINCIPAL)

CONDICIONANTES:
IF Z1=1 THEN PORTD=%00000001
GOTO GIROM1DERECHA  ( IR A LA ETIQUETA DE GIRO DEL MOTOR 1 A LA DERECHA)
"LUEGO ESCRIBES LA SIGUIENTE CONDICION"
IF Z2=1 THEN PORTD=%00000010
GOTO GIROM1IZQUIERDA ( ESTA SERA LA OTRA ETIQUETA DE GIRO A LA IZQUIERDA)
" ASI SUCESIVAMENTE PUEDES ESCRIBIR LAS CONDICIONES DE LECTURA DE LA ENTRADAS)

otra cosa amigo alfa, no se si defines al puerto D como entradas al parecer si con la VAR para definir que bit le corresponde Z1 Y Z2 pero no veo donde defines que el puerto D se configuro como entradas como el caso de TRISB=%00000000 que se configura como salida. verifica esa parte de tu codigo.

siguiendo con mi explicación, después de las condicionantes
escribes cada etiqueta de ejecución:
por ejemplo:
GIROM1DERECHA: ESTA ES LA ETIQUETA, y ahora si después de esto escribe todo el código de ejecución:

pause 500
PORTB = %00001000
pause 500
PORTB = %00001010
pause 500
PORTB = %00000010
pause 500
PORTB = %00000110
pause 500
PORTB = %00000100
pause 500
PORTB = %00000101
pause 500
PORTB = %00000001
pause 500
ENDIF

y de ahí las demás etiquetas. otro tip muy importante es volver a preguntar la condicionante IF , por ejemplo:

IF Z1=1 THEN PORTD =%00000001: ESTO PARA SERVIRÍA PARA VERIFICAR QUE EFECTIVAMENTE ESTA PRESIONADO EL BOTÓN O LA SEÑAL ESTA ACTIVADA, Y NO SE TRATA DE UN REBOTE O RUIDO DE SEÑAL.

Prueba de esta forma, si no de todas maneras te sirva un poco la lógica, yo así trabajaba en picaxe y funcionaba bien.

Desconectado alfayomega

  • PIC10
  • *
  • Mensajes: 16
Re: ayuda con pic y motor paso a paso
« Respuesta #2 en: 25 de Abril de 2012, 19:02:13 »
junto con saludarles les cuento que modifique el programa un poquito y el motor 1 con z1 anda para la derecha bien luego con z2 anda bien para la
 el motor 2 con z3 anda bien para la izuierda izquierda  hatay todo bien pero
cuando ejeuto z1 y z2 el motor 1 anda de izuierda a derecha y pasa despues al motor 2 que anda hacia la derecha y se repite el ciclo,lo otro es que  cuando quero mover los dos motores juntos por ejemplo z1 y z3 anda el motor1 hacia la derecha y para y despues el motor 2 hacia la izquierda y repite el siclo no se que pasa algo me falta por que noo se mucho de  pbp solo algo

Z1 VAR PORTD.0
Z2 VAR PORTD.1
Z3 VAR PORTD.2
TRISB=%0


INICIO
CICLO1:
IF Z1=1 THEN
GOSUB RUTINA1
GOTO CICLO2:
ENDIF
     
if z1=0 THEN
TRISB=%00000000
ENDIF


CICLO2:
IF Z2=1 THEN
GOSUB RUTINA2
GOTO CICLO3:
ENDIF

IF Z2=0 THEN
TRISB=%00000000
ENDIF


CICLO3:
IF Z1=1 AND Z2=1 THEN
GOSUB RUTINA3
GOTO CICLO4:
ENDIF


CICLO4:
IF Z3=1 THEN
GOSUB RUTINA4
goto ciclo1:
ENDIF

IF Z3=0 THEN
TRISB=%00000000
ENDIF

GOTO INICIO


RUTINA1:
;IF PORTD.0=1 THEN
PORTB = %00000001
PAUSE 500
PORTB = %00000101
pause 500
PORTB = %00000100
pause 500
PORTB = %00000110
pause 500
PORTB = %00000010
pause 500
PORTB = %00001010
pause 500
PORTB = %00001000
pause 500
PORTB = %00001001
pause 500
;ENDIF
RETURN
GOTO CICLO1:

RUTINA2:
;IF PORTD.1=1 THEN
PORTB = %00001001
pause 500
PORTB = %00001000
pause 500
PORTB = %00001010
pause 500
PORTB = %00000010
pause 500
PORTB = %00000110
pause 500
PORTB = %00000100
pause 500
PORTB = %00000101
pause 500
PORTB = %00000001
pause 500
;ENDIF
RETURN
GOTO CICLO2:

RUTINA3:
;IF Z1=1 AND Z2=1 THEN
PORTB = %00010000
PAUSE 500
PORTB = %01010000
pause 500
PORTB = %00100000
pause 500
PORTB = %00110000
PAUSE 500
PORTB = %00100000
pause 500
PORTB = %10100000
pause 500
PORTB = %10000000
pause 500
PORTB = %10010000
pause 500
;ENDIF
RETURN
GOTO CICLO3:

RUTINA4:
;IF PORTD.2=1 THEN
PORTB = %10010000
pause 500
PORTB = %10000000
pause 500
PORTB = %10100000
pause 500
PORTB = %00100000
pause 500
PORTB = %01100000
pause 500
PORTB = %01000000
pause 500
PORTB = %01010000
pause 500
PORTB = %00010000
pause 500
;ENDIF
RETURN
goto ciclo4:


GOTO inicio
end

Desconectado alfayomega

  • PIC10
  • *
  • Mensajes: 16
Re: ayuda con pic y motor paso a paso
« Respuesta #3 en: 27 de Abril de 2012, 00:34:14 »
si RA0=1 entonses RD0=1
si RA0=0 entonses RD0=0
si RA1=1 entonses RD1=1
si RA1=0 entonses RD1=0

entonses como lo hago cuando RA0 Y RA1 = 1 para que RA2=1
y RA0 Y RA1 =0 para que RA2=0