TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: dieg11 en 22 de Octubre de 2011, 14:11:51
-
hola!! buenas escribo porque tengo un problema para diseñar un programa que me permita mediante un pulsador lograr una rampa de aceleracion de 15rev/min
y que cada revolución son 48 pasos lo he pensado con un un tabla ir variando el valor del tmr0 pero no he podido, es un proyecto y se me viene arriba la fecha de entrega
los pasos del motor son
avance retroceso
0101 0101
1001 0110
1010 1010
0110 1001
agradezco si alguien le surge una idea muchas gracias!
-
Lo de la tabla y variar el periodo del timer me parece adecuado. Porque no te funcionó? Como lo implementaste?
-
Lo de la tabla y variar el periodo del timer me parece adecuado. Porque no te funcionó? Como lo implementaste?
te mando el programa disculpa que no tenga comentarios pero los nombres son orientartivos, la idea es de que acelere a 15rev/min2 a eso de o,2seg/paso2
lo q se vea para mejorarle al prog estare mas que agradecido
;*************************************************
;pic 16f628A
;proyecto motor paso a paso
;*************************************************
;************************
;paso A B C D *
;1 1 0 1 0 *
;2 1 0 0 1 *
;3 0 1 0 1 *
;4 0 1 1 0 *
;************************
list p=16f628A
__config 0x2171
__idlocs 0x0001
errorlevel -302 ; quita las advertencias tipo 302
include <p16f628a.inc>
AUX EQU 0X29
AUX1 EQU 0X2A
AUX2 EQU 0X2B
OPCION EQU 0X81
Z EQU 2
C EQU 0
W EQU 0
F EQU 1
K EQU 0X28
AUX3 EQU 0X2D
AUX4 EQU 0X2D
AUX5 EQU 0X2E
AUX6 EQU 0X2F
ORG 0X00
RESET
GOTO INICIO
VECTOR_INTERRUPCION
SUBRUTINAS
ACELERAR
MOVLW 0X64
MOVWF TMR0
MOVLW 0X02
MOVWF PCLATH
MOVF AUX,W
CALL TABLA
CLRF PCLATH
MOVWF AUX3
MOVWF AUX4
DESBORDO?
BTFSS INTCON,2
GOTO DESBORDO?
BCF INTCON,2
BCF STATUS,Z
DECFSZ AUX3,F
GOTO CARGA
MOVLW D'250'
BCF STATUS,Z
SUBWF AUX,W
BTFSS STATUS,Z
GOTO AUMENTO
GOTO RETORNO
CARGA
MOVLW 0X64
MOVWF TMR0
GOTO DESBORDO?
AUMENTO
INCF AUX,F
GOTO RETORNO
RETORNO
RETURN
DESACELERAR
MOVLW 0X64
MOVWF TMR0
MOVLW 0X02
MOVWF PCLATH
MOVF AUX,W
CALL TABLA
CLRF PCLATH
MOVWF AUX3
MOVWF AUX4
DESBORDO1
BTFSS INTCON,2
GOTO DESBORDO1
BCF INTCON,2
BCF STATUS,Z
DECFSZ AUX3,F
GOTO CARGA1
BCF STATUS,Z
MOVF AUX,F
BTFSS STATUS,Z
GOTO DECREMENTO
GOTO RETORNO1
DECREMENTO
DECF AUX,F
GOTO RETORNO1
CARGA1
MOVLW 0X64
MOVWF TMR0
GOTO DESBORDO1
RETORNO1
RETURN
FRENAR
CLRF TMR0
MOVF AUX6,W
MOVWF PORTB
BTFSS PORTA,1
GOTO RETORNO6
GOTO FRENAR
RETORNO6
RETURN
VELCONSTANTE
MOVLW 0X64
MOVWF TMR0
MOVF AUX4,W
DESBORDO2
MOVWF AUX5
BTFSS INTCON,2
GOTO DESBORDO2
BCF INTCON,2
DECFSZ AUX5,F
GOTO CARGA2
GOTO RETORNO2
CARGA2
MOVLW 0X64
MOVWF TMR0
GOTO DESBORDO2
RETORNO2
RETURN
PASOS BCF STATUS,Z
MOVF AUX6,F
BTFSS STATUS,Z
GOTO RESTO5
MOVLW D'05'
MOVWF PORTB
MOVWF AUX6
GOTO RETORNO3
RESTO5
MOVLW D'05' ;verifico el paso anterior era 05
BCF STATUS,Z
SUBWF AUX6,W
BTFSS STATUS,Z
GOTO RESTO9
MOVLW D'09'
MOVWF PORTB
MOVWF AUX6
GOTO RETORNO3
RESTO9
MOVLW D'09'
BCF STATUS,Z
SUBWF AUX6,W
BTFSS STATUS,Z
GOTO RESTO10
MOVLW D'10'
MOVWF PORTB
MOVWF AUX6
GOTO RETORNO3
RESTO10
MOVLW D'10'
BCF STATUS,Z
SUBWF AUX6,W
BTFSS STATUS,Z
GOTO RESTO6
MOVLW D'06'
MOVWF PORTB
MOVWF AUX6
GOTO RETORNO3
RESTO6
MOVLW D'06'
BCF STATUS,Z
SUBWF AUX6,W
BTFSS STATUS,Z
GOTO RETORNO3 ;si no es ninguno de los posibles
MOVLW D'05'
MOVWF PORTB
MOVWF AUX6
GOTO RETORNO3
RETORNO3
RETURN
ORG 0X100
INICIO
MOVLW 0X07 ;Deshabilito comparadores
MOVWF CMCON
BCF STATUS,RP1
BSF STATUS,RP0 ;Selecciono banco 01
MOVLW 0XFF
MOVWF TRISA
CLRF TRISB
MOVLW 0X86
MOVWF OPCION ; Configuro tmr0
BCF STATUS,RP0
BCF INTCON,2 ; Configuro int
CLRF AUX
CLRF AUX1
CLRF AUX2
CLRF AUX3
CLRF AUX4
CLRF AUX5
CLRF AUX6
CLRF PORTB
LEERA
MOVF PORTA,W
BTFSS PORTA,1
GOTO ACELERARE
GOTO DESACELERAREMAS
ACELERARE
BTFSS PORTA,0
GOTO CONSTANTE
MOVLW D'250'
SUBWF AUX,W
BCF STATUS,Z
MOVWF AUX2
BTFSS STATUS,Z
GOTO ACELERO
GOTO CONSTANTE
DESACELERAREMAS
BCF STATUS,Z
MOVF AUX,F
BTFSS STATUS,Z
GOTO DESACELERO
GOTO FRENO
DESACELERO
CALL DESACELERAR
CALL PASOS
GOTO LEERA
CONSTANTE
BCF STATUS,Z
MOVF AUX
BTFSS STATUS,Z
GOTO SEGUIR
GOTO FRENO
SEGUIR
CALL VELCONSTANTE
CALL PASOS
GOTO LEERA
ACELERO
CALL ACELERAR
CALL PASOS
GOTO LEERA
FRENO
CALL FRENAR
GOTO LEERA
TABLA addwf PCL,f
retlw d'250'
retlw d'50'
retlw d'42'
retlw d'37'
retlw d'33'
retlw d'30'
retlw d'28'
retlw d'27'
retlw d'25'
retlw d'24'
retlw d'23'
retlw d'22'
retlw d'21'
retlw d'20'
retlw d'19'
retlw d'18'
retlw d'17'
retlw d'16'
retlw d'15'
retlw d'14'
retlw d'14'
retlw d'13'
retlw d'13' ;la tabla continua tal vez es muy larga
end
-
un gran tema q tengo es que la tabla me queda de 253 valores muchos de los cuales repito innumerables veces como puedo arreglar ese tema
muchas gracias
-
No he mirado todo el programa pero en inicio no configuras bien el TIMER0 para la interrupcion.
INICIO
MOVLW 0X07 ;Deshabilito comparadores
MOVWF CMCON
BCF STATUS,RP1
BSF STATUS,RP0 ;Selecciono banco 01
MOVLW 0XFF
MOVWF TRISA
CLRF TRISB
MOVLW 0X86
MOVWF OPCION ; Configuro tmr0
BCF STATUS,RP0
BCF INTCON,2 ; Configuro int
CLRF AUX
CLRF AUX1
CLRF AUX2
CLRF AUX3
CLRF AUX4
CLRF AUX5
CLRF AUX6
CLRF PORTB
Fijate aqui no estas configurando interrupcion (supongo por el comentario que es lo que quieres hacer)
BCF INTCON,2 ; Configuro int
Estas borrando el flag del TIMER, para configurar interrupcion por TMR0:
movlw 0xA0
movwf INTCON
O bien:
bsf INTCON,GIE
bsf INTCON,T0IE
-
Le di una vueltecilla en el MPLAB y te digo
AUX EQU 0X29
AUX1 EQU 0X2A
AUX2 EQU 0X2B
OPCION EQU 0X81
Z EQU 2
C EQU 0
W EQU 0
F EQU 1
K EQU 0X28
AUX3 EQU 0X2D
AUX4 EQU 0X2D
AUX5 EQU 0X2E
AUX6 EQU 0X2F
AUX3 y AUX4 estan los dos en 0X2D
AQUI YA ME DIRAS QUE HACES:
ACELERARE
BTFSS PORTA,0
GOTO CONSTANTE
MOVLW D'250'
SUBWF AUX,W
BCF STATUS,Z
MOVWF AUX2
BTFSS STATUS,Z
GOTO ACELERO
GOTO CONSTANTE
Restas 250 con AUX y en vez de mirar si Z esta a 0 lo pones tu a 0, para que ? A lo mejor esta bien pero....
PORTB,0 que es?
Aqui al ir a la tabla se pierde:
MOVLW 0X02
MOVWF PCLATH
MOVF AUX,W
CALL TABLA
Supongo que por el PCLATCH.