Hola Amigos del Foro..
no saben cuanto me agrada haber encontrado este lugar... la verdad estoy como loco con un problema el cual necesito solucionar
Urgente... Disculpen si el tema esta posteado, pero es mi primera vez en el foro y de paso con los pics. Soy estudiante de Ingenieria de sistemas y tengo el siguiente problema.
Llevo cuatro dias haciendo un curso intensivo de pics y asm. En estos cuatro dias he dormido solo 8 horas... pero han sido provechosos.
Ahora si al grano:
Necesito controlar un Motor paso a paso y debe tener control de velocidad Digital. asi que aqui esta el resultado de mi programacion:
el cuento es que en simulador funciona perfecto, tengo dos pulsadores para manejar la velocidad de giro, y otros dos para el sentido del giro.. hasta alli todo perfecto, el problema es cuando lo llevo al circuito.
algunas veces funciona bien, algunas otras no. alimento y quito la alimentacion diez o mas veces y de las 10 veces funciona bien solo cuatro o tres...
Please help help help...
alguna idea??? por cierto he probado con varios PICS y con todos pasa lo mismo... estoy de muerte, las ojeras ya me tapan la cara...
ultima nota: el circuito lo monto en protoboard... aun no he hecho la placa. sera por eso???
Agradeciendo con todo lo que puedo...
luisko desde Colombia
Aqui esta mi ASM
LIST p=16F628 ;tell assembler what chip we are using
include "P16F628.inc" ;include the defaults for the chip
__CONFIG _CP_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_OFF & _LVP_OFF & _INTRC_OSC_NOCLKOUT
cblock 0x20 ;start of general purpose registers
PDel0 ;used in delay routine
PDel1 ;used in delay routine
PDel2
var
PDel02 ;used in delay routine
PDel12 ;used in delay routine
var2 ;used in delay routine
endc
STATUS equ 03h ;Address of the STATUS register
TRISA equ 85h ;Address of the tristate register for port A
TRISB equ 86h
org 0x0000 ;org sets the origin, 0x0000 for the 16F628,
;this is where the program starts running
movlw 0x07
movwf CMCON ;turn comparators off (make it like a 16F84)
bsf STATUS, RP0 ;select bank 1
movlw b'00000000' ;set PortB all outputs
movwf TRISB
movlw b'11110000'
movwf TRISA ;set PortA all outputs
bcf STATUS, RP0 ;select bank 0
movlw .10
movwf var
movwf PORTB
goto Bucle
ini movlw d'0'
movwf var2
bCf STATUS,2
goto Bucle
tablita movfw var2
call Tabla ;Llamo a la tabla
movwf PORTA
;call PDelay3
;movlw d'0'
movwf PORTA
call PDelay
incf var2
movlw d'4'
subwf var2,w
btfsc STATUS,2
goto ini
goto Bucle
tablita2 movfw var2
call Tabla2 ;Llamo a la tabla
movwf PORTA
;call PDelay3
;movlw d'0'
movwf PORTA
call PDelay
incf var2
movlw d'4'
subwf var2,w
btfsc STATUS,2
goto ini
goto Bucle
;******* TABLA DE NUMEROS DERECHA***********
Tabla addwf PCL,F ;Desplazamiento sobre la tabla
retlw b'00000001' ;Dígito 0 11111100
retlw b'00000010' ;Dígito 0 11111100
retlw b'00000100' ;Dígito 0 11111100
retlw b'00001000' ;Dígito 0 11111100
;******* TABLA DE NUMEROS IZQUIERDA***********
Tabla2 addwf PCL,F ;Desplazamiento sobre la tabla
retlw b'00001000' ;Dígito 0 11111100
retlw b'00000100' ;Dígito 0 11111100
retlw b'00000010' ;Dígito 0 11111100
retlw b'00000001' ;Dígito 0 11111100
Bucle btfss PORTA,4
goto tablita
btfss PORTA,5
goto tablita2
btfss PORTA,6
goto tim
btfss PORTA,7
goto tim2
goto Bucle
tim decf var
movfw var
movwf PORTB
call PDelay2
goto Bucle
tim2 incf var
movfw var
movwf PORTB
call PDelay2
goto Bucle
PDelay clrw
movfw var ; 1 set number of repetitions (C)
movwf PDel0 ; 1 |
PLoop0 movlw .20 ; 1 set number of repetitions (B)
movwf PDel1 ; 1 |
PLoop1 movlw .80 ; 1 set number of repetitions (A)
movwf PDel2 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
decfsz PDel2, 1 ; 1 + (1) is the time over? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel1, 1 ; 1 + (1) is the time over? (B)
goto PLoop1 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) is the time over? (C)
goto PLoop0 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 cycles delay
PDelL2 clrwdt ; 1 cycle delay
return ; 2+2 Done
PDelay2 movlw .50 ; 1 set number of repetitions (B)
movwf PDel02 ; 1 |
PLoop12 movlw .181 ; 1 set number of repetitions (A)
movwf PDel12 ; 1 |
PLoop22 clrwdt ; 1 clear watchdog
clrwdt ; 1 cycle delay
decfsz PDel12, 1 ; 1 + (1) is the time over? (A)
goto PLoop22 ; 2 no, loop
decfsz PDel02, 1 ; 1 + (1) is the time over? (B)
goto PLoop12 ; 2 no, loop
PDelL12 goto PDelL22 ; 2 cycles delay
PDelL22 goto PDelL32 ; 2 cycles delay
PDelL32 clrwdt ; 1 cycle delay
return ; 2+2 Done
end