Programa asm o c para pic16f84a para control motor pap

Tengo una necesidad de un programa en concreto para controlar una plancheta ecuatorial con motor pap pequeñito 100mA o asi. el mots2 con unos 2040 pasos por vuelta unipolar. a controlar con el pic16f84A y sus amigo el uln2003. pero puede usarse el 16f88 ya que tambien lo tengo. este es el esquema que tengo:
http://imageshack.us/photo/my-images/36/circuitocontrolplanchet.jpg/



lo que necesito es que el motor pueda estar en 4 estados diferentes al pulsar uno de los 4 botones del mando de control.
1-play= el motor gira a 1 rpm asta que se pulse el boton 4-stop . no es necesario mantener pulsado.
2-avance rapido-el motor gina a aproximadamente 1 vuelta por segundo en la misma direccion que play. que es el sentido horario ya que apretara un tornillo. solo girara si esta pulsado y al soltar se parara.
3-lo mismo que el 2 pero en sentido contrario.
4 el stop que lo detiene todo y queda a la espera de una pulsación.
yo soy amigo de hacer favores. pero si es necesario, que me cobraría alguno por hacemelo?
me gustaria que fuese con el mplab ya que tengo el pickit2 ya venia, y con anotaciones y comentarios para poder adaptarlo a otras cosas y aprender algo.
 
Última edición:
Hola:

Fig3013_MotorPAP.GIF

Fuente:
http://www.pic16f84a.org/proteus.html#Proteus_Capitulo_30
 
Hey. que buena pinta tiene esto. ademas tengo dos bipolares iguales que cumplirian de marabilla.

yo estoy haciendo el acceso a grado superior, asi que estamos casi apunto de empezar los examenes. seguro que si al final hago D.P.E. me gustara mucho.
 
Última edición:
Hola de nuevo. no lo estaba mirando bien. si estan los .hex pero miraba en la practica de servomotores.
ahora tengo los hex. pero no esta el esquematico que pusiste para el isis. me lo podrias pasar?
gracias.
 
el motorpap04.hex es mas que muy interesante. pero que sea exacto es como sentarse en un pajar y....
el caso es que si se tubiera el programa sin compilar podria practicar a retocarlo para cuadrar las velocidades y demas. pocos cambios porque no se nada. solo hice un curso de 6 meses de lenguaje c cuando los pcs que habian eran los 386 jeje. y ahora el es que biene cumplo 40. lo que me gusta es que no noto los años porque decian mis mayores que la inquietud se pierde con los años y yo no se que es eso aun.
 
JEjeejejejej, disculpe usted, no te he dado el código fuente. El que tengo es escrito en ensamblador.

Todos los ASM del libro.

El primero del PAP que hay varios, es este de abajo.

Código:
;************************************* MotorPAP_01.asm *********************************
;
;    ===================================================================
;      Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
;      E. Palacios, F. Remiro y L. López.            [url]www.pic16f84a.com[/url]
;       Editorial Ra-Ma.  [url]www.ra-ma.es[/url]
;    ===================================================================
;
; Programa de control para un motor paso a paso (PAP) en funcionamiento y sentido de
; giro. Con RA0 a "0" el motor se pone en marcha y su sentido de giro dependerá del valor
; que tenga RA4.
;
; ZONA DE DATOS **********************************************************************

    LIST        P=16F84A
    INCLUDE        <P16F84A.INC>
    __CONFIG    _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC

    CBLOCK    0x0C
    ENDC

#DEFINE EntradaMarcha    PORTA,0        ; Interruptor de puesta en marcha.
#DEFINE EntradaSentido    PORTA,4        ; Interruptor de sentido de giro.

; ZONA DE CÓDIGOS ********************************************************************

    ORG     0
Inicio
    bsf        STATUS,RP0
    bsf        EntradaMarcha            ; Estas líneas se configuran como entrada.
    bsf        EntradaSentido
    clrf    PORTB                    ; Las líneas del Puerto B configuradas como salidas.
    bcf        STATUS,RP0
Principal
    btfss    EntradaMarcha            ; ¿Puesta en marcha?
    goto    Gira                    ; Sí.
    clrf    PORTB                    ; No, para el motor, poniendo a cero la línea
    goto    Fin                        ; de habilitación.
Gira
    btfsc    EntradaSentido            ; Comprueba el sentido de giro deseado.
    goto    A_Izquierda
    call    GiroDerecha                ; Gira en un sentido.
    goto    Fin
A_Izquierda
    call    GiroIzquierda            ; Gira en sentido contrario.
Fin    goto    Principal

; Subrutina "GiroIzquierda" -------------------------------------------------------------

GiroIzquierda
    movlw    b'00110101'                ; Primer paso.
    call    ActivaSalida            ; Lo envía a la salida donde está conectado el motor PAP.
    movlw    b'00110110'                ; Segundo paso.
    call    ActivaSalida
    movlw    b'00111010'                ; Tercer paso.
    call    ActivaSalida
    movlw    b'00111001'                ; Cuarto y último paso
    call    ActivaSalida
    return

; Subrutina "GiroDerecha" ---------------------------------------------------------------

GiroDerecha
    movlw    b'00111001'                ; Primer paso.
    call    ActivaSalida    
    movlw    b'00111010'             ; Segundo paso.
    call    ActivaSalida
    movlw    b'00110110'                ; Tercer paso.
    call    ActivaSalida
    movlw    b'00110101'                ; Último paso.
    call    ActivaSalida
    return

; Subrutina "ActivaSalida" --------------------------------------------------------------

ActivaSalida
    movwf    PORTB
    call    Retardo_10ms            ; Temporización antes del siguiente paso.
    return

    INCLUDE  <RETARDOS.INC>
    END

;    ===================================================================
;      Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
;      E. Palacios, F. Remiro y L. López.            [url]www.pic16f84a.com[/url]
;       Editorial Ra-Ma.  [url]www.ra-ma.es[/url]
;    ===================================================================
 

Adjuntos

  • Soluciones Programas.zip
    300.2 KB · Visitas: 687
Última edición por un moderador:
edito: este mensaje se ha puesto sin haber visto el anterior.

Le he puesto un osciloscopio para ver que velocidad tendria con un motor de 48 pasos bipolar a 7.5º/paso.
pero no acabo de entender como funciona el osciloscopio ni si seran reales las lecturas que yo pueda dar.
he visto que tiene configuracion para por lo menos 4 o 5 velocidades y cambio de direccion.
ahora me tengo que poner las pilas para acabar los deberes que se acabara la quincena y no los tendre hechos y despues seguire con el programa mplab a ver si me entero de algo para configurar algunos cambios en un soft que venia con el esquema que pase y que no soy capaz de compilar. creo que debe tener fallos pero no lo se.
lo añado tal cual a continuacion para ver si pudiese hacer algo. ese me funcionaria bien con los motores unipolares.

Código:
;********************************************************

;

;	Movimiento de un motor de pasos, 

;	MOTOR DE 48 PASOS POR VUELTA

;	1 PASO CADA 1.25SEG  A 32768KHz

;

;		RB3	RB2	RB1	RB0

;		

;		1	0	1	0

;		1	0	0	1	AVANCE, LOS 1 SON ON		

;		0	1	0	1	SE SUPONE A TRAVÉS DE ULN2003

;		0	1	1	0

;

;*******************************************************



IND0    EQU 0X00

RTCC    EQU 0X01

PCL     EQU 0X02

STATUS  EQU 0X03 ;LOS 8 BITS DE STATUS

IRP     EQU 7

RP1     EQU 6

RP0     EQU 5

TO      EQU 4

PD      EQU 3

Z       EQU 2

DC      EQU 1

C       EQU 0

FSR     EQU 0X04

PORTA   EQU 0X05

PORTB   EQU 0X06

EEDATA  EQU 0X08

EEADR   EQU 0X09

PCLATCH EQU 0X0A

INTCON  EQU 0X0B

GIE     EQU 7

EEIE    EQU 6

T0IE    EQU 5

INTE    EQU 4

RBIE    EQU 3

T0IF    EQU 2

INTF    EQU 1

RBIF    EQU 0

OPT     EQU 0X81

RBPU    EQU 7

INTEDG  EQU 6

T0CS    EQU 5

T0SE    EQU 4

PSA     EQU 3

PS2     EQU 2

PS1     EQU 1

PS0     EQU 0

TRIA    EQU 0X85

TRIB    EQU 0X86

EECON1  EQU 0X88

EEIF    EQU 4

WRERR   EQU 3

WREN    EQU 2

WR      EQU 1

RD      EQU 0

;*******************************

;	DEFINICIÓN DE REGISTROS

;********************************

POS	EQU	0X0C		;Aquí va el número de paso de 1 a 4

CUENTA	EQU	0X0D		;Cuenta cada interrupción de 0.25 segundos, a las 5 dá un paso

RETARDO	EQU	0X0E



	ORG	0X0000

	GOTO 	SETEOS



	ORG	0X0004

	GOTO	INTERR



	ORG	0X0008

SETEOS	BSF	STATUS, RP0	;TRABAJO BANCO 1

	MOVLW	B'11110000'	;BITS BAJOS = SALIDA

	MOVWF	TRIB

	MOVLW	B'11111111'

	MOVWF	TRIA

	BCF	OPT, T0CS

	BCF	OPT, PSA

	BCF	OPT, PS2

	BSF	OPT, PS1	; PREESCALER DIVIDE POR 8

	BCF	OPT, PS0

	BCF	STATUS, RP0

	

	BCF	INTCON, GIE

	BSF	INTCON, T0IE

	BCF	INTCON, T0IF

	MOVLW	.1

	MOVWF	POS

	CLRF	CUENTA



;**************************************ESPERA 1 BOTÓN************************

ESPERA	BTFSS	PORTA, 0	

	GOTO	ADEL

	BTFSS	PORTA, 1

	GOTO	ATRAS

	BTFSS	PORTA, 2

	GOTO 	AVANCE			

	CLRF	PORTB		;APAGA TODO PUES ESTÁ EN REPOSO

	GOTO	ESPERA





;****************************************ADELANTE****************************

;			           MUEVE UN PASO Y VUELVE

;****************************************************************************

ADEL	CALL	TIEMPO

	BTFSC	PORTA, 0

	GOTO	ESPERA		;RUIDO	

	INCF	POS

	MOVLW	.5

	SUBWF	POS,0

	BTFSS	STATUS, Z

	GOTO	NA

	MOVLW	.1

	MOVWF	POS

NA	CALL 	PULSOS

	CALL	TIEMPO

	CALL	TIEMPO		;ESPERA ESTABILIZARSE

	GOTO	ESPERA

		

;****************************************ATRAS****************************

;			           MUEVE UN PASO Y VUELVE

;****************************************************************************

ATRAS	CALL	TIEMPO

	BTFSC	PORTA, 1

	GOTO	ESPERA		;RUIDO	

	DECF	POS

	BTFSS	STATUS, Z	;controlo no baje de 1, si es 0 va a 4

	GOTO	NT		

	MOVLW	.4

	MOVWF	POS

NT	CALL 	PULSOS

	CALL	TIEMPO		;ESPERA ESTABILIZARSE

	CALL	TIEMPO

	GOTO	ESPERA





;****************************************AVANCE********************************

;			       SOLO SE SALE CON STOP

;******************************************************************************



AVANCE	CLRF	RTCC

	NOP	

	NOP

	BCF	INTCON, T0IF

	BSF	INTCON,	GIE

	BSF	INTCON, T0IE

	

QUEDA	BTFSS	PORTA, 3

	GOTO	PARA

	GOTO	QUEDA



;****************************************PARA**********************************



PARA	CALL	TIEMPO

	BTFSC	PORTA, 3

	GOTO 	QUEDA		;SI FUE UN RUIDO VUELVO

	CLRF	PORTB

	BCF	INTCON, GIE

	BCF	INTCON, T0IF

	GOTO	ESPERA

;********************************************************************************







;**************************************TIEMPO RETARDO REBOTES*****************************

TIEMPO	MOVLW	.50

	MOVWF	RETARDO

TI	DECFSZ	RETARDO		;RETARDO PARA REBOTES

	GOTO	TI

	RETURN

;*****************************************************************************************



;***************************************PULSOS*************************************

PULSOS	MOVLW	.1

	SUBWF	POS, 0

	BTFSS	STATUS, Z

	GOTO	SEG

	MOVLW 	B'00001010'	;1 CODIGO

	MOVWF	PORTB

	RETURN

SEG	MOVLW	.2

	SUBWF	POS, 0

	BTFSS	STATUS, Z

	GOTO	TER

	MOVLW 	B'00001001'	;2 CODIGO

	MOVWF	PORTB

	RETURN

TER	MOVLW	.3

	SUBWF	POS, 0

	BTFSS	STATUS, Z

	GOTO	CUAT

	MOVLW 	B'00000101'	;3 CODIGO

	MOVWF	PORTB

CUAT	MOVLW	.4

	SUBWF	POS, 0

	BTFSS	STATUS, Z

	GOTO	FINAL

	MOVLW 	B'00000110'	;4 CODIGO

	MOVWF	PORTB

FINAL	RETURN



;************************************INTERR***********************************

;                                CADA .25 DE SEGUNDO VIENE AQUÍ

;*****************************************************************************

INTERR	INCF	CUENTA

	MOVLW	.5

	SUBWF	CUENTA, 0

	BTFSS	STATUS, Z

	GOTO 	VOLVER		; SI NO LLEGÓ A 5

	CLRF	CUENTA		; SI LLEGÓ A 5/4 AVANZO

	INCF	POS

	MOVLW	.5

	SUBWF	POS,0

	BTFSS	STATUS, Z

	GOTO	NIN

	MOVLW	.1

	MOVWF	POS

NIN	CALL 	PULSOS

	CALL	TIEMPO

VOLVER	BCF	INTCON, T0IF	;BOORO BANDERA

	RETFIE



	END
 
Última edición por un moderador:
acavo de entender que el fallo que me da el programa del compilador, no es porque haya algun error en el texto anterior. sino que es por no saber usarlo ya que me pasa lo mismo con los que hay en tu ultimo mensaje. hay algun tuto pot youtube o algo para compilar archivos con el mplab o otro?
 
Bueno. de momento lo tengo tal cual lo encontre en la web: http://www.cielosur.com/plataforma_ecuatorial.php
el caso es que no era capaz ce compilarlo para usarlo. os dejo la info para que el que quiera lo use. a mi me quema mucho porque ahora tengo que hacer la plancheta y la electronica fisicamente y luego a probar de hacerle cambios al asm para conseguir la velocidad y funcionamiento deseado.
muchas gracias de nuevo.

Hola, subo de nuevo pues al usar un esquema ya hecho y adaptarlo no lo he hecho bien y da un error en la simulacion. aqui esta solucionado.
 

Adjuntos

  • 16f84A.rar
    16.9 KB · Visitas: 478
Última edición:
Hola de nuevo. He probado asta la saciedad en protoboard y no funcionan o ninguno de los dos 16f84a que tengo o ninguno de los dos uln2003. Así que en lugar de comprar los chips. Quisiera comenzar a aprender con el 16f88 por dos razones. Una que tengo 3 en casa y la otra es que a la que sea algo complejo y no me sirva el 16f84a tendré que hacerlo obligado y volvemos al principio.
Tengo un par de dudas. Es muy complicado adaptar el codigo de uno al otro?
Y además se puede adaptar el codigo que yo puse a motores bipolares para usar mi circuito modificando lo?
Si adapto el codigo al 16f88 y además a bipolares estará listo para usar. Si me pueden ayudar les agradezco pues mi nivel roza el suelo.
 
Donde encuentro la informacion para hacerlo?
Seria algo como adaptar los comandos, las direcciones de memoria y los pines de entrada y salida. tambien tendria que evitar el clock interno para usar el indicado en el esquema no? luego seria cambiar las rutinas de los pasos por las de los bipolares y que funciones a la misma velocidad y por los mismos pines? cuando se acabe con el programa toca en esquema para sustituir el iln2003 por el l293, no? y a esto le dices no muy complicado? jajaja. de verdad que los que teneis experiencia como programadores y/o diseñadores de aplicaciones estais hechos de una pasta insufrible. tengo algo de teoria pues la logica se me da bien. pero no tengo ni idea de asm y a estas alturas tampoco de C y eso que de este hice un curso de 6 meses.
por donde empiezo?
 
Hola:

Puedes enseñarme el código fuente cualquieres adaptar. Se mira la organización de la memoria de la hoja de datos del 16F84A y del 16F88. No te creas que se mucho de PIC tampoco, poco a poco estoy aprendiendo.

Los pines son los mismos, es lo bueno que hace Microchip, para que sean compatibles de entrada al menos la mayoría. Usarás el oscilador externo de 4 MHz. también se puede hacer interno hasta 8 MHz, con temas de retardos preparados a 4 MHz, mejor dejarlo como está. 4 MHz y oscilador XT.

Dependiendo del ASM que desas portar o com lo has programado, tardas un tiempo.

Un cordial saludo.
 
Hola. te paso el texto por aquí y te lo añado como texto plano tal como lo encontré para que lo puedas modificar y compilar.

Código:
;********************************************************

;

;    Movimiento de un motor de pasos, 

;    MOTOR DE 48 PASOS POR VUELTA

;    1 PASO CADA 1.25SEG  A 32768KHz

;

;        RB3    RB2    RB1    RB0

;        

;        1    0    1    0

;        1    0    0    1    AVANCE, LOS 1 SON ON        

;        0    1    0    1    SE SUPONE A TRAVÉS DE ULN2003

;        0    1    1    0

;

;*******************************************************



IND0    EQU 0X00

RTCC    EQU 0X01

PCL     EQU 0X02

STATUS  EQU 0X03 ;LOS 8 BITS DE STATUS

IRP     EQU 7

RP1     EQU 6

RP0     EQU 5

TO      EQU 4

PD      EQU 3

Z       EQU 2

DC      EQU 1

C       EQU 0

FSR     EQU 0X04

PORTA   EQU 0X05

PORTB   EQU 0X06

EEDATA  EQU 0X08

EEADR   EQU 0X09

PCLATCH EQU 0X0A

INTCON  EQU 0X0B

GIE     EQU 7

EEIE    EQU 6

T0IE    EQU 5

INTE    EQU 4

RBIE    EQU 3

T0IF    EQU 2

INTF    EQU 1

RBIF    EQU 0

OPT     EQU 0X81

RBPU    EQU 7

INTEDG  EQU 6

T0CS    EQU 5

T0SE    EQU 4

PSA     EQU 3

PS2     EQU 2

PS1     EQU 1

PS0     EQU 0

TRIA    EQU 0X85

TRIB    EQU 0X86

EECON1  EQU 0X88

EEIF    EQU 4

WRERR   EQU 3

WREN    EQU 2

WR      EQU 1

RD      EQU 0

;*******************************

;    DEFINICIÓN DE REGISTROS

;********************************

POS    EQU    0X0C        ;Aquí va el número de paso de 1 a 4

CUENTA    EQU    0X0D        ;Cuenta cada interrupción de 0.25 segundos, a las 5 dá un paso

RETARDO    EQU    0X0E



    ORG    0X0000

    GOTO     SETEOS



    ORG    0X0004

    GOTO    INTERR



    ORG    0X0008

SETEOS    BSF    STATUS, RP0    ;TRABAJO BANCO 1

    MOVLW    B'11110000'    ;BITS BAJOS = SALIDA

    MOVWF    TRIB

    MOVLW    B'11111111'

    MOVWF    TRIA

    BCF    OPT, T0CS

    BCF    OPT, PSA

    BCF    OPT, PS2

    BSF    OPT, PS1    ; PREESCALER DIVIDE POR 8

    BCF    OPT, PS0

    BCF    STATUS, RP0

    

    BCF    INTCON, GIE

    BSF    INTCON, T0IE

    BCF    INTCON, T0IF

    MOVLW    .1

    MOVWF    POS

    CLRF    CUENTA



;**************************************ESPERA 1 BOTÓN************************

ESPERA    BTFSS    PORTA, 0    

    GOTO    ADEL

    BTFSS    PORTA, 1

    GOTO    ATRAS

    BTFSS    PORTA, 2

    GOTO     AVANCE            

    CLRF    PORTB        ;APAGA TODO PUES ESTÁ EN REPOSO

    GOTO    ESPERA





;****************************************ADELANTE****************************

;                       MUEVE UN PASO Y VUELVE

;****************************************************************************

ADEL    CALL    TIEMPO

    BTFSC    PORTA, 0

    GOTO    ESPERA        ;RUIDO    

    INCF    POS

    MOVLW    .5

    SUBWF    POS,0

    BTFSS    STATUS, Z

    GOTO    NA

    MOVLW    .1

    MOVWF    POS

NA    CALL     PULSOS

    CALL    TIEMPO

    CALL    TIEMPO        ;ESPERA ESTABILIZARSE

    GOTO    ESPERA

        

;****************************************ATRAS****************************

;                       MUEVE UN PASO Y VUELVE

;****************************************************************************

ATRAS    CALL    TIEMPO

    BTFSC    PORTA, 1

    GOTO    ESPERA        ;RUIDO    

    DECF    POS

    BTFSS    STATUS, Z    ;controlo no baje de 1, si es 0 va a 4

    GOTO    NT        

    MOVLW    .4

    MOVWF    POS

NT    CALL     PULSOS

    CALL    TIEMPO        ;ESPERA ESTABILIZARSE

    CALL    TIEMPO

    GOTO    ESPERA





;****************************************AVANCE********************************

;                   SOLO SE SALE CON STOP

;******************************************************************************



AVANCE    CLRF    RTCC

    NOP    

    NOP

    BCF    INTCON, T0IF

    BSF    INTCON,    GIE

    BSF    INTCON, T0IE

    

QUEDA    BTFSS    PORTA, 3

    GOTO    PARA

    GOTO    QUEDA



;****************************************PARA**********************************



PARA    CALL    TIEMPO

    BTFSC    PORTA, 3

    GOTO     QUEDA        ;SI FUE UN RUIDO VUELVO

    CLRF    PORTB

    BCF    INTCON, GIE

    BCF    INTCON, T0IF

    GOTO    ESPERA

;********************************************************************************







;**************************************TIEMPO RETARDO REBOTES*****************************

TIEMPO    MOVLW    .50

    MOVWF    RETARDO

TI    DECFSZ    RETARDO        ;RETARDO PARA REBOTES

    GOTO    TI

    RETURN

;*****************************************************************************************



;***************************************PULSOS*************************************

PULSOS    MOVLW    .1

    SUBWF    POS, 0

    BTFSS    STATUS, Z

    GOTO    SEG

    MOVLW     B'00001010'    ;1 CODIGO

    MOVWF    PORTB

    RETURN

SEG    MOVLW    .2

    SUBWF    POS, 0

    BTFSS    STATUS, Z

    GOTO    TER

    MOVLW     B'00001001'    ;2 CODIGO

    MOVWF    PORTB

    RETURN

TER    MOVLW    .3

    SUBWF    POS, 0

    BTFSS    STATUS, Z

    GOTO    CUAT

    MOVLW     B'00000101'    ;3 CODIGO

    MOVWF    PORTB

CUAT    MOVLW    .4

    SUBWF    POS, 0

    BTFSS    STATUS, Z

    GOTO    FINAL

    MOVLW     B'00000110'    ;4 CODIGO

    MOVWF    PORTB

FINAL    RETURN



;************************************INTERR***********************************

;                                CADA .25 DE SEGUNDO VIENE AQUÍ

;*****************************************************************************

INTERR    INCF    CUENTA

    MOVLW    .5

    SUBWF    CUENTA, 0

    BTFSS    STATUS, Z

    GOTO     VOLVER        ; SI NO LLEGÓ A 5

    CLRF    CUENTA        ; SI LLEGÓ A 5/4 AVANZO

    INCF    POS

    MOVLW    .5

    SUBWF    POS,0

    BTFSS    STATUS, Z

    GOTO    NIN

    MOVLW    .1

    MOVWF    POS

NIN    CALL     PULSOS

    CALL    TIEMPO

VOLVER    BCF    INTCON, T0IF    ;BOORO BANDERA

    RETFIE



    END

este el el que venia con este esquema:
http://imageshack.us/photo/my-images/36/circuitocontrolplanchet.jpg/
 

Adjuntos

  • madero.txt
    4.8 KB · Visitas: 77
Atrás
Arriba