Autor Tema: Problemas 16F628  (Leído 3616 veces)

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

Desconectado luisko01

  • PIC10
  • *
  • Mensajes: 16
Problemas 16F628
« en: 07 de Julio de 2009, 01:04:20 »
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...  :shock:

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... :x

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      
« Última modificación: 10 de Julio de 2009, 10:53:02 por luisko01 »

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problemas 16F628
« Respuesta #1 en: 07 de Julio de 2009, 01:51:55 »
El motor PAP lo conectas directamente al PIC?
No contesto mensajes privados, las consultas en el foro

Desconectado luisko01

  • PIC10
  • *
  • Mensajes: 16
Re: Problemas 16F628
« Respuesta #2 en: 07 de Julio de 2009, 02:04:31 »
Nop....

por ahora solo simulo el motor con LEDS, ademas pienso usar transistores darligtons...


gracias por responder tan pronto.

El problema es que cuando le aplico la tension al circuito no ocurre lo que yo esperaba ver, pero en la simulacion si. Inicia mostrando cualquier cosa, aunque deberia iniciar en cero todas las salidas... como dije antes algunas veces si funciona, estoy usando una fuente de poder de un PC.
« Última modificación: 07 de Julio de 2009, 02:08:15 por luisko01 »

Desconectado jmrchile

  • PIC10
  • *
  • Mensajes: 6
Re: Problemas 16F628
« Respuesta #3 en: 07 de Julio de 2009, 13:35:26 »
Hola, Algunos consejillos:

Debes considerar que un motor paso a paso tiene una combinacion binaria que polariza las bobinas en secuencia y que si no ocupas la secuncias correcta el motor se traba. Para probar esa parte, no lo hagas con pic, polariza directamente el motor en la secuencia que corresponde y verifica que se mueva, si no funciona cambia la secuencia. Una vez que hayas encontrado la secuencia "manualmente" pasalo al pic. Lo mas logico es que este ahi el error.
Ademas, hay un factor que no recuerdo el nombre, pero que dice que los campos magneticos demoran un tiempo en desaparecer, es como si un condensador quedara cargado, si cambias el estado binario y por lo tanto la polarizacion en un periodo muy corto, la polarizacion electrica tendra que luchar contra el estado magnetico remanente anterior y eso traba el motor, por lo que debes buscar el retardo preciso para tu motor.
Prueba con eso, ojala se solucione el problema.
Atte.
Jose

Desconectado luisko01

  • PIC10
  • *
  • Mensajes: 16
Re: Problemas 16F628
« Respuesta #4 en: 07 de Julio de 2009, 16:52:56 »
Hola, Algunos consejillos:

Debes considerar que un motor paso a paso tiene una combinacion binaria que polariza las bobinas en secuencia y que si no ocupas la secuncias correcta el motor se traba. Para probar esa parte, no lo hagas con pic, polariza directamente el motor en la secuencia que corresponde y verifica que se mueva, si no funciona cambia la secuencia. Una vez que hayas encontrado la secuencia "manualmente" pasalo al pic. Lo mas logico es que este ahi el error.
Ademas, hay un factor que no recuerdo el nombre, pero que dice que los campos magneticos demoran un tiempo en desaparecer, es como si un condensador quedara cargado, si cambias el estado binario y por lo tanto la polarizacion en un periodo muy corto, la polarizacion electrica tendra que luchar contra el estado magnetico remanente anterior y eso traba el motor, por lo que debes buscar el retardo preciso para tu motor.
Prueba con eso, ojala se solucione el problema.
Atte.
Jose


Noooo noo aun no he colocado el motor... es que ni siquiera me funciona con leds.

creo que son problemas de voltaje, pero no se... a donde van los pines no usados????

alguien sabe???

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problemas 16F628
« Respuesta #5 en: 07 de Julio de 2009, 19:25:10 »
 :shock:
El pin 5 va a GND= 0 Volts.
El pin 14 va a Vcc= 5 Volts.
No contesto mensajes privados, las consultas en el foro

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Problemas 16F628
« Respuesta #6 en: 08 de Julio de 2009, 07:26:31 »
Si ya tienes todos los pines conectados (VCC a +5, VSS a masa , MCLRE a +5 con una R de 10k) entonces prueba a hacer
 BSF PORTB,0 ; (donde se supone que tienes conectado un led)
GOTO $-1 (para hacer un bucle infinito)

Con esto comprobarás si enciende el led, que está bien conectado, que el led no está invertido (me ha ocurrido :P)  y que las directivas iniciales son correctas.

Y luego es cuestión que sigas comprobando con las mismas 2 lineas, moviéndolas a travez de tu programa para ver (cuando el led no encienda) donde se queda pillado el programa.

También podrías hacer
BSF PORTB,0
DELAY de 500ms
RUTINA DUDOSA A TESTEAR (que no te apague puerto B!)
BCF PORTB,0

Si el led enciende y apaga entonces es correcta, pero si enciende y nunca apaga es que se ha quedado pillado en esa rutina.
Parece infantil, pero es una forma fácil de depurar el programa cuando no quiere arrancar y no sabes donde está el error.

Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Problemas 16F628
« Respuesta #7 en: 09 de Julio de 2009, 16:48:45 »
Hola, por lo que comentas, al emplear oscilador interno, y al quitar el reset, seguramente se "tilda" de entrada... te recomendaría que coloques el "power on reset" en ON
así se resetéa en el inicio de programa ( en tu palabra de configuración lo tienes en off )

He leído tu programa, tendrias que "ordenarlo" un poco más empleando subrutinas...

Nos mantienes informado de la situación....

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado sansanoloko

  • PIC10
  • *
  • Mensajes: 48
Re: Problemas 16F628
« Respuesta #8 en: 09 de Julio de 2009, 21:19:33 »
Por lo que veo del programa, ele registro "var2" es el indice de las tablas utilizadas, y debiera moverse entre 0x00 y 0x03.
Pero al inicio del programa, no se le asigna ningun valor..... :S
Presumo que el simulador lo inicializa en 0x00, pero en el PIC la cosa cambia, ya que puede inicializar en cualquier valor entre 0x00 y 0xFF, y cualquier valor mayor que 0x03 al inicio del programa en el registro "var2" te llevará a comportamientos erráticos, ya que estas cargando al PCL con valores que pueden estar fuera del espacio que ocupa tu programa. Esto generalmente se refleja como un funcionamiento con reiterados "reset" inexplicables (comprobado por experiencia propia)

visto en el codigo, en este momento tienes esto:

Código: [Seleccionar]
   
     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               ; Aquí vas al bucle principal sin haber inicializado "var2"...

ini  movlw   d'0'
     movwf   var2
     bCf        STATUS,2

     goto      Bucle

.......

Pero deberías tener algo como esto:
Código: [Seleccionar]
   
     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

ini  movlw   d'0'
     movwf   var2
     bCf       STATUS,2

     goto      Bucle               ; Vas al bucle con el registro "var2" inicializado con 0x00

.......

Con esta leve modificación deberías tener una operación más estable.

Espero te sirva mi aporte, y saludos a quienes nos leen.

Desconectado luisko01

  • PIC10
  • *
  • Mensajes: 16
Re: Problemas 16F628
« Respuesta #9 en: 09 de Julio de 2009, 21:22:33 »
Hola, por lo que comentas, al emplear oscilador interno, y al quitar el reset, seguramente se "tilda" de entrada... te recomendaría que coloques el "power on reset" en ON
así se resetéa en el inicio de programa ( en tu palabra de configuración lo tienes en off )

He leído tu programa, tendrias que "ordenarlo" un poco más empleando subrutinas...

Nos mantienes informado de la situación....

Norberto

Amigo Muchas gracias por responder, ya estaba casí al borde de la desilución... ahora estoy en el trabajo, pero llegará a casa a probar lo que me dices..

sin embargo no entiendo muy bien lo que propones por que como te dije soy nuevo en esto de los PICS donde habilito el "power on Resest"?????

probaste la Simulación???

la simulación en mi PC funciona perfecto, pero no en el circuito... incluso cambié de protoboard y nada aún... estoy al borde de la locura... se me agota el tiempo y aún no encuentro solución.
 :shock:

aún sin probar lo que me dices voy feliz a mi casa por que tengo la esperanza que al cambiar eso me funcione bien..

como dije antes algunas veces funciona, algunas otras no.

te juro que creí estar usando subrutinas...

tons estoy mal.

un abrazo desde Colombia y de nuevo muchas gracias...

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problemas 16F628
« Respuesta #10 en: 09 de Julio de 2009, 22:11:33 »
Para habilitar el Power on reset, cambia el fuse de la siguiente manera: _PWRTE_ON
No contesto mensajes privados, las consultas en el foro

Desconectado luisko01

  • PIC10
  • *
  • Mensajes: 16
Re: Problemas 16F628
« Respuesta #11 en: 10 de Julio de 2009, 00:18:42 »
 :-/ :-/ :-/ :mrgreen: :mrgreen:

Amigossss  parece que todo ok.


Joder se supone que soy programador y olvide asignar una variable despues de declararla, y una variable critica además...

bueno siempre se está aprendiendo..

Gracias, pero muchas gracias a todos los que leyeron, a todos los que colaboraron..

Ahora se supone que debo cerrar el tema????  ¿¿¿¿cómo lo hago???

Un abrazo Gigante desde Colombia
« Última modificación: 10 de Julio de 2009, 10:51:43 por luisko01 »

Desconectado luisko01

  • PIC10
  • *
  • Mensajes: 16
Re: Problemas 16F628
« Respuesta #12 en: 10 de Julio de 2009, 00:31:21 »



sansanoloko


!Que Solución amigo eres grande¡


 

anything