Autor Tema: necesito programar un 16f628 !!ayuda!! con lo siguiente:  (Leído 27331 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
« Respuesta #45 en: 27 de Enero de 2007, 14:18:57 »
toc-toc los motivos pueden ser muchos, te sugiero postees esta pregunta en la sección de programadores ya que es off-topic de este hilo.

Ahí hay muchisima información respecto a estas y otras dudas.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado toc-toc

  • PIC12
  • **
  • Mensajes: 57
Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
« Respuesta #46 en: 29 de Enero de 2007, 18:16:03 »
Hola! Saludos maunix.

  Gracias por tu consejo. La verdad es que con tanto trajín, cambié la configuración del
Ic-prog y se me fastidio todo, me llamó la atención cuando vi que incluso los F84A me
estaban dando problemas de verificación. Anduve revisando las tensiones incluso en el
mismo DB9 y en los distintos pines del quemador. Había algo que no encajaba y pensé
en el config. y ya lo tengo resuelto, nunca tuve problemas y ahora con el F628 me está
funcionando como esperaba. Repito, gracias.

 Tengo un pregunta que hacerte, es que veo en los ejemplos que pones en los post que
en primer lugar defines la pagina1, sigues con los registros necesarios y sales con la
pagina0, hasta aquí todo correcto siempre lo he visto y hecho así, sin embargo con el
F628 y similares, hay que indicarle al PIC que desactive los comparadores, vale.

 La pregunta es porqué en algunos casos he visto que se desactivan los comparadores y
luego se configuran las páginas.

 Desde mi punto de vista, primero se deben config. las páginas y luego se desactivan los
comparadores, es necesario. Cierto?

 Saludos de toc-toc



Incluso la época de agobio es digna de respeto.
Porque, no la ha creado el hombre, sino la naturaleza que puede ser dura pero jamas absurda.

Desconectado toc-toc

  • PIC12
  • **
  • Mensajes: 57
Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
« Respuesta #47 en: 29 de Enero de 2007, 18:29:40 »
Hola! Un saludo a todos.

 BrunoF, esto es la cabecera del programa que te comenté. En principio esto
puede servir o habría de hacer alguna modificación.

Citar
;   Fecha:   25-01-07
; Que hace => Controlar giro en motor pap, tiene 2 bobinados con toma
; intermedia en ambos. Usamos el derivador ULN2803. Las salias
; se hacen por RA0, RA1, RA2 y RA3. Usa interrupciones RB4...
;
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;  Las tildes estan omitidas de manera intencionada.
;--------------- Encabezado -------------

   LIST   P=16F628       
   #include <p16f628.inc>

;************ PALABRA DE CONFIGURACION ******************************************
 __CONFIG    _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _LVP_OFF & _INTRC_OSC_NOCLKOUT
            ;

   ERRORLEVEL      -302      ; Elimina banco atencion (warning)

;   Declarar  equs

acum   equ   0x20      ; se declaran acum
stat   equ   0x21      ; y stat
reg1   equ   0x22      ; siempre se necesitan unos
reg2   equ   0x23      ; de registros auxiliares
            ;          "               "
PULSO   equ   0X2A      ;


#DEFINE   BANCO0   BCF   STATUS,5   ; RP0 = 0
#DEFINE   BANCO1   BSF   STATUS,5   ; RP0 = 1


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

   ORG      0x00
   GOTO      ini
   ORG      0x04   ;viene cuando hay una interrupcion
   GOTO      rsi   ;salta a la rutina de rsi que atiende la interrupcion
   ORG      0X05   

ini:

   BANCO1         ; selecciona banco1
   CLRF   TRISA         ; PORTA todo SALIDAS
   MOVLW   b'00100111'      ; RB0,1,2,5=ENTRADAS RB7=SALIDA
   MOVWF   TRISB         ; pon PORTB
   MOVLW   b'10000000'      ; RBPU=1 (Pull up) no se usa, flanco desc.
   MOVWF   OPTION_REG      ; pon a 1 OPTION_REG
   BANCO0         ; volvemos a la pagina 0
;   Establece estado comparadores
   MOVLW      b'00000111'   ; comparadores desactivados,
   MOVWF      CMCON      ; I/O digitales.

   CLRF      PORTB      ; ponemos a 0 portb

;---- Activa interrupciones ----
   MOVLW      b'10010000'   ;configura las interrupciones
   MOVWF      INTCON      ;GIE y RB0/INT.

   CLRF   PORTB      ; limpia el puerto B
dormir:   SLEEP
   GOTO   dormir      ; poner a dormir
;
;---- rutina servicio interrupciones
rsi:   BTFSS   INTCON,1   ; es interrupcion RB0?
   GOTO $-1      ; Si no, espera
             ; si lo es comenzamos
            ; guardando el contenido del W
   MOVWF   acum      ; Copia el acumulador al registro acum
   MOVF   STATUS,W   ; Guarda STATUS en el acumulador
   CLRF   STATUS      ; para restaurarlos antes de volver
   MOVWF   stat      ; Copia el acumulador al registro STAT

   ; Empieza activacion de rutina de uso

 Dame tu opinión y si hay que cambiar cosas adelante.

 
Incluso la época de agobio es digna de respeto.
Porque, no la ha creado el hombre, sino la naturaleza que puede ser dura pero jamas absurda.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
« Respuesta #48 en: 29 de Enero de 2007, 19:04:43 »
Hola toc-toc. Perdona la ausencia pero ando con ciertos problemas tecnicos y no puedo conectarme seguido.

No tengo mucha experiencia en motores PAP. Solo he jugado un rato y hace mucho tiempo. Basicamente diria que necesitas primero, sabes que valores enviar a las bobinas para que el motor vaya girando. No se si pensas hacerlo girar por paso o cada medio paso.

En base a eso arrancamos. Por ahora deberias basicamente hacer una tabla o lo que sea con los valores de los voltajes enviados a las bobinas para cada posicion.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado toc-toc

  • PIC12
  • **
  • Mensajes: 57
Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
« Respuesta #49 en: 05 de Febrero de 2007, 10:19:12 »
 Hola! Saludos a todos los asistentes al foro.

 Bien, respecto a la pregunta que me haces (BrunoF), entiendo que en el caso de medio paso, la
precisión del avance es mayor, por lo que pienso que este debe ser el modo a usar en el proceso.

 Otra cosa, por lo que me dices de tus experiencias al respecto, te diré que siempre serán mas que
las mías ya que lo que he hecho como ya te dije, fue un ejemplo que encontré en la red con el F84A
y que me funcionó a la primera, por lo que no se puede decir que tenga experiencia alguna. Tu me
comentas sobre valores que enviar a las bobinas del motor; entiendo que te refieres al orden en los
terminales a enviar los datos o niveles altos, ya me aclaras este punto.

 Así que, resumiendo, tenemos un motor con dos bobinados y toma intermedia en cada uno, es decir
6 hilos, queremos que el motor avance con saltos de medio paso, además de que avance mientras
una señal esté activa y que el sentido de giro lo determine otra señal, lo de las interrupciones, lo
dejamos para luego.

 Bueno, esto es a grandes rasgos pienso que deberíamos ir por pasos, primero que gire mientras esté
apretado el pulsador A, luego ya añadiremos otros puntos.

 Del listado anterior creo que se puede aprovechar alguna parte. Mira a ver que tal esta cabecera:
 
Citar
;   Fecha:   25-01-07
; Que hace => Controlar giro en motor pap, tiene 2 bobinados con toma
; intermedia en ambos. Usamos el derivador ULN2803. Las salias
; se hacen por RA0, RA1, RA2 y RA3. Usa interrupciones RB4...
;
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;  Las tildes estan omitidas de manera intencionada.
;--------------- Encabezado -------------

   LIST   P=16F628       
   #include <p16f628.inc>

;************ PALABRA DE CONFIGURACION ******************************************
 __CONFIG    _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _LVP_OFF & _INTRC_OSC_NOCLKOUT
            ;

   ERRORLEVEL      -302      ; Elimina banco atencion (warning)

;   Declarar  equs

acum   equ   0x20      ; se declaran acum
stat   equ   0x21      ; y stat
reg1   equ   0x22      ; siempre se necesitan unos
reg2   equ   0x23      ; de registros auxiliares
            ;          "               "
PULSO   equ   0X2A      ;


#DEFINE   BANCO0   BCF   STATUS,5   ; RP0 = 0
#DEFINE   BANCO1   BSF   STATUS,5   ; RP0 = 1


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

   ORG      0x00
   GOTO      ini
   ORG      0x04   ;viene cuando hay una interrupcion
   GOTO      rsi   ;salta a la rutina de rsi que atiende la interrupcion
   ORG      0X05   

ini:

   BANCO1         ; selecciona banco1
   CLRF   TRISA         ; PORTA todo SALIDAS
   MOVLW   b'00100111'      ; RB0,1,2,5=ENTRADAS RB7=SALIDA
   MOVWF   TRISB         ; pon PORTB
   MOVLW   b'10000000'      ; RBPU=1 (Pull up) no se usa, flanco desc.
   MOVWF   OPTION_REG      ; pon a 1 OPTION_REG
   BANCO0         ; volvemos a la pagina 0
;   Establece estado comparadores
   MOVLW      b'00000111'   ; comparadores desactivados,
   MOVWF      CMCON      ; I/O digitales.

   CLRF      PORTB      ; ponemos a 0 portb


 Bueno, a parte de BrunoF que está estresado por su trabajo, se que hay más genios que pueden
aportar sus granitos de MG (materia gris), es cuestión de participar y hacer que este proyecto vaya
adelante, no les parece.

 De todas formas gracias por el interés y los aportes.  :lol:

 Saludos de Vicente.
Incluso la época de agobio es digna de respeto.
Porque, no la ha creado el hombre, sino la naturaleza que puede ser dura pero jamas absurda.

Desconectado ESTECA55

  • PIC24H
  • ******
  • Mensajes: 1404
Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
« Respuesta #50 en: 05 de Febrero de 2007, 11:36:04 »
Hola, en encabesado se ve bien.

aca te dejo un esquemita de conexion(por las dudas estaba a mano) y las secuencias de exitacion:


Conexionado para un motor unipolar.(como el tullo de 6 cables.

 

 

 


Hay que esforzarse por ser el mejor, no creerse el mejor

Desconectado toc-toc

  • PIC12
  • **
  • Mensajes: 57
Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
« Respuesta #51 en: 05 de Febrero de 2007, 14:27:31 »
 Hola! Saludos de nuevo a todos.
 
 Gracias amigo Esteca55. Te agradezco tu aporte al tema, de veras, en cuanto al esquema
eléctrico, he preparado el que muestro abajo, creo que está algo más concreto aunque no
hay grandes diferencias.
 
 Sin embargo y a pesar de conocer la secuencia de cebado, no había reparado en el modo
y creo que justo a esto se refería el amigo BrunoF y tu me lo has puesto en "solfa" por decirlo
de algún modo, con tu esquema del medio paso me has hecho ver el sentido de "los datos", de
cómo han de presentarse a la salida del puerto B, en este caso (creo que ya está claro).



 Vaya, no se usar el editor para mostrar las imágenes en la misma página ?, dime cómo he de
proceder, he usado la opción "Adjuntar:" y sin embargo con pre-visualizar, no muestra nada.

 En todo caso ya las pondré en el momento que pueda, así que gracias otra vez.

« Última modificación: 05 de Febrero de 2007, 18:02:05 por toc-toc »
Incluso la época de agobio es digna de respeto.
Porque, no la ha creado el hombre, sino la naturaleza que puede ser dura pero jamas absurda.

Desconectado toc-toc

  • PIC12
  • **
  • Mensajes: 57
Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
« Respuesta #52 en: 05 de Febrero de 2007, 18:46:50 »
 Hola! Ya estoy aquí otra vez.

 A ver si alguien puede simularme el listado de abajo con un programa como el Proteus,
yo no dispongo de éste y además no se usarlo. El listados es este:

Código: [Seleccionar]
;--------------- Encabezado -------------

   LIST   P=16F628       
   #include <p16f628.inc>

;************ PALABRA DE CONFIGURACION ******************************************
 __CONFIG    _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _LVP_OFF & _INTRC_OSC_NOCLKOUT


   ERRORLEVEL      -302      ; Elimina banco atencion (warning)

;   Declarar  equs

acum        equ        0x20        ; se declaran acum
stat        equ        0x21        ; y stat para interrpciones
reg1        equ        0x22        ; siempre se necesitan unos
reg2        equ        0x23        ; de registros auxiliares
CONTA1 equ        0x24        ; contador de pasos

PULSO        equ        0X2A      ;


#DEFINE   BANCO0   BCF   STATUS,5   ; RP0 = 0
#DEFINE   BANCO1   BSF   STATUS,5   ; RP0 = 1


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

        ORG        0x00
        GOTO      ini
;        ORG        0x04   ;viene cuando hay una interrupcion
;        GOTO      rsi       ;salta a la rutina de rsi que atiende la interrupcion
        ORG        0X05   

ini:

        BANCO1                              ; selecciona banco1
        CLRF        TRISA                 ; PORTA todo SALIDAS
        MOVLW   b'00100111'       ; RB0,1,2,5=ENTRADAS RB7=SALIDA
        MOVWF   TRISB                 ; pon PORTB
        MOVLW   b'10000000'       ; RBPU=1 (Pull up) no se usa, flanco desc.
        MOVWF   OPTION_REG   ; pon a 1 OPTION_REG
        BANCO0                              ; volvemos a la pagina 0
        ;   Establecer estado comparadores
        MOVLW    b'00000111'    ; comparadores desactivados,
        MOVWF    CMCON           ; I/O digitales.

        CLRF        PORTB                 ; ponemos a 0 portb
        MOVLW    .8                           ; cargamos el contador
        MOVWF    CONTA1              ;

START:
        CALL        scaner ;verifico pulsos de entrada
        MOVWF   PORTB
        GOTO       START

; Escanea las entradas o pulsadores hasta que se aprieta uno

scaner: BTFSC PORTA,0 ; si el bit 0 del puertoA esta en nivel bajo
GOTO GIRAD ; gira a der.
BTFSC PORTA,1 ; aqui pueden ir otros pulsadores
GOTO GIRAI ; gira a izquierda
GOTO scaner ;repite secuencia

; ------------------  motor ------------
GIRAD: DECFSZ CONTA1,1 ; Comprueba estado contador
GOTO avanzad
MOVLW .8 ;
MOVWF CONTA1

avanzad: MOVF CONTA1,0 ;
CALL TABLA1 ; tabla de medio paso
RETURN

GIRAI: DECFSZ CONTA1,1 ; Comprueba estado contador
GOTO avanzai
MOVLW .8 ;
MOVWF CONTA1

avanzai: MOVF CONTA1,0 ;
CALL TABLA1 ; tabla de medio paso
RETURN


;------------------------ TABLA DE ENCENDIDO SECUENCIA ---------------
;   MEDIO PASO AVANZA

;               Bobina               D C B A
;               PuertoB             0  0  0  1
;               PuertoB             0  0  1  1
;               PuertoB             0  0  1  0
;               PuertoB             0  1  1  0
;               PuertoB             0  1  0  0
;               PuertoB             1  1  0  0
;               PuertoB             1  0  0  1


TABLA1: ADDWF PC,1 ;
RETLW B'00000001' ;1
RETLW B'00000011' ;2
RETLW B'00000010' ;3
RETLW B'00000110' ;4
RETLW B'00000100' ;5
RETLW B'00001100' ;6
RETLW B'00001000' ;7
RETLW B'00001001' ;8

;------------------------ TABLA DE ENCENDIDO SECUENCIA ---------------
;   MEDIO PASO RETROCEDE

TABLA2: ADDWF PC,1 ;
RETLW B'00001001' ;1
RETLW B'00001000' ;2
RETLW B'00001100' ;3
RETLW B'00000100' ;4
RETLW B'00000110' ;5
RETLW B'00000010' ;6
RETLW B'00000011' ;7
RETLW B'00000001' ;8

END

 Espero que me indiquéis los errores y cómo solucionarlos si es posible, ya se que, habrá formas
más simples de lograr lo mismo, no estaría demás hacer sugerencias al tema.

 Por cierto, he usado el icono de "insertar imagen" me presenta unos códigos, entre ellos he puesto l
a ruta del HDD y no los muestra cuando envío el post, me puede decir alguien que hago mal.

 Gracias por anticipado por todo.


Incluso la época de agobio es digna de respeto.
Porque, no la ha creado el hombre, sino la naturaleza que puede ser dura pero jamas absurda.

Desconectado Astaroth_25

  • PIC12
  • **
  • Mensajes: 52
Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
« Respuesta #53 en: 05 de Febrero de 2007, 20:31:24 »
Quetal... le hice unas modificaciones a tu programa para q pueda funcionar... y bueno aqui te paso el programa y el esquema en PROTEUS....no estabas lejos del proposito.... Revisa el codigo y veras las equivocaciones q tenias..
}Tambien veras q la segunda tabla quedo sobrando...

Saludos...
« Última modificación: 05 de Febrero de 2007, 20:35:25 por Astaroth_25 »
HEAVY - METAL ..por siempre  Ψ Ω Ψ

Desconectado ESTECA55

  • PIC24H
  • ******
  • Mensajes: 1404
Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
« Respuesta #54 en: 05 de Febrero de 2007, 20:44:44 »
Amigo, para poner una imagen lo que debes insertar es la ruta, pero de un servidor on-line no de tu disco duro, por ende para colocar una imagen de tu disco primero debes subirla a un server, por ejemplo este. Eso es lo que pegas entre medio de lo que aparece luego de apretar el boton de "insertar Imagen"

saludos
Hay que esforzarse por ser el mejor, no creerse el mejor

Desconectado toc-toc

  • PIC12
  • **
  • Mensajes: 57
Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
« Respuesta #55 en: 06 de Febrero de 2007, 20:46:41 »
 Hola! Saludos a todos.

 Esteca55, gracias por tu respuesta sobre el envío de imágenes, así, está claro.

 Gracias también a Astaroth_25 por tu inestimable ayuda, al revisar el código, veo que me
había liado usando dos tablas y no ganaba tiempo ni código. He visto que para cambiar el
sentido de giro usas bien sumar o bien restar el valor contenido en el registro CONTA1, lo
que tiene sentido y usa una única tabla, muy interesante.

 Me surge una pregunta a raíz del código, está claro que la salida de la tabla nos presenta
un valor en el registro W, entiendo que necesito una subrutina que entregue dicho valor al
puerto B donde se conectarán los 4 hilos de las bobina del motor y este sería el código:

 
Código: [Seleccionar]
SALIDA:
        MOVLW        PCL
        MOVWF        PORTB


 Puesto después de la tabla. No será necesario algún tipo de retardo, aunque corto para
consolidar las salidas, igual esta es una pregunta sin sentido ya que cada valor ha de ser leído
de la tabla.

 Aún así, tengo una duda a la hora de programar el escurridizo F628, no encuentro solución al
tipo de valor a poner en el oscilador para usar la frecuencia interna de 4MHz, al poner la
palabra de configuración, las pruebas que he hecho hasta ahora, según el MPLAB parece que
funciona, sin embargo al quemar el chip, no consigo que haga lo que esperaba. Me podéis echar
un cable, ya supongo que llegaría por averiguarlo, claro una ayuda nunca está de más.

 Gracias una vez más a todos por vuestro interés y el afán de ayuda demostrado, con gente así
vale la pena entablar amistad.

 Un abrazo a todos de Vicente.
 

 
Incluso la época de agobio es digna de respeto.
Porque, no la ha creado el hombre, sino la naturaleza que puede ser dura pero jamas absurda.

Desconectado Astaroth_25

  • PIC12
  • **
  • Mensajes: 52
Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
« Respuesta #56 en: 07 de Febrero de 2007, 11:40:23 »
 Quetal... en realidad ya se esta entragando el valor de la tabla al PORT B, ya que el [RETLW k] coloca el valor [k] en el registro [W] y retorna hasta la ultima direccion almacenada en la PILA, y en la PILA.. la ultima direccion es la guardada cuando realizas [CALL scaner]... entonces RETLW retorna a la linea siguiente a esta instruccion.

sobre el tema de retardo si tendrias q colocarlo despues del [MOVWF PORTB].

Con respecto al tema de la seleccion del cristal...me parece q esta bien... al menos cuando cargo en codigo a programar selecciona el cristal interno [INTRC I/O]

Espero haya sido claro.....SALUDOS...

START:   
        CALL        scaner      ;verifico pulsos de entrada
        MOVWF   PORTB      AQUI SE ENTREGA EL VALOR DE LA TABLA AL PUERTO B
        [Llamada a retardo para consolidar las salidas]
        GOTO       START

;   Escanea las entradas o pulsadores hasta que se aprieta uno

scaner:   BTFSS   PORTA,0   ; si el bit 0 del puertoA esta en nivel bajo
   GOTO   GIRAD      ; gira a der.
   BTFSS   PORTA,1   ; aqui pueden ir otros pulsadores
   GOTO   GIRAI      ; gira a izquierda
   GOTO   scaner      ;repite secuencia

; ------------------  motor ------------
GIRAD:   
   movfw      CONTA1
   sublw      0x00
   btfss      STATUS,Z
   goto      $+2
   goto      $+3
   decf      CONTA1
   goto      $+3
   movlw      .7
   movwf      CONTA1
   MOVF      CONTA1,0   ;
   goto      TABLA1   ; tabla de medio paso

GIRAI:
   movfw      CONTA1
   sublw      0x08
   btfsc      STATUS,Z
   decf      CONTA1
   movfw      CONTA1
   sublw      0x07
   btfss      STATUS,Z
   goto      $+2
   goto      $+3
   incf      CONTA1
   goto      $+3
   movlw      .0
   movwf      CONTA1
   MOVF      CONTA1,0   ;
   goto      TABLA1   ; tabla de medio paso

TABLA1: ADDWF PCL,1   ;
   RETLW   B'00000001'   ;1
   RETLW   B'00000011'   ;2
   RETLW   B'00000010'   ;3
   RETLW   B'00000110'   ;4
   RETLW   B'00000100'   ;5
   RETLW   B'00001100'   ;6
   RETLW   B'00001000'   ;7
   RETLW   B'00001001'   ;8
HEAVY - METAL ..por siempre  Ψ Ω Ψ

Desconectado toc-toc

  • PIC12
  • **
  • Mensajes: 57
Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
« Respuesta #57 en: 07 de Febrero de 2007, 17:19:33 »
 Hola! Saludos.

 A ver como lo describo. El código que puso Astaroth, lo copié y le hice unos pequeños cambios
mostrados en color:
Citar
GIRAD:   
   MOVWF  CONTA1       ; movfw      CONTA1
   sublw      0x00
   btfss      STATUS,Z
   goto      $+2
   goto      $+3
   decf      CONTA1
   goto      $+3
   movlw      .7
   movwf      CONTA1
   MOVF      CONTA1,0   ;
   goto      TABLA1   ; tabla de medio paso

GIRAI:
   MOVWF  CONTA1       ; movfw      CONTA1
   sublw      0x08
   btfsc      STATUS,Z
   decf      CONTA1
    MOVWF  CONTA1       ; movfw      CONTA1
   sublw      0x07
   btfss      STATUS,Z
   goto      $+2
   goto      $+3
   incf      CONTA1
   goto      $+3
   movlw      .0
   movwf      CONTA1
   MOVF      CONTA1,0   ;
   goto      TABLA1   ; tabla de medio paso

 El motivo, no lo había visto de esta forma [movfw] y pensé que habías cambiado el orden por
motivo de las prisas ?. Lo he pasado por el MPLAB y he visto que me daba un error ya que la
segunda pasada por la subrutina 'scaner' al llegar a la tabla, entraba hasta:  ADDWF PCL,1 y de
ahí no pasaba.

 He sospechado que, algo estaba ocurriendo y simplemente he dejado el código original movfw,
he vuelto a compilar y en la prueba paso a paso todo ha funcionado de forma correcta.

 Pregunta de perogullo, cómo es que en las instrucciones de Microchip no aparece esta forma de instrucción
entiendo que es una excepción a la regla ?. Creo que esto es algo como: 'mueve el contenido del archivo f
al registro W
', pensé que era incorrecto y sin embargo funciona. Me puede sacar alguien de la duda, por
que ocurre esto.

 Gracias por vuestra colaboración, os pido un poco de paciencia, aún tengo muchas preguntas que no
me dejan ver las luz.

 Un saludo de Vicente.


Incluso la época de agobio es digna de respeto.
Porque, no la ha creado el hombre, sino la naturaleza que puede ser dura pero jamas absurda.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
« Respuesta #58 en: 07 de Febrero de 2007, 17:43:01 »
Hola.

No funcionaba porque movwf y movfw son funciones completamente distintas.

movfw no existe en el set de instrucciones de estos PICs' pero si existe en el set de instrucciones del MPLAB.

Si pones movfw CONTA1
El MPASM lo considerará al ensamblar como:
movf CONTA1,W

Esto significa que el contenido de CONTA1 se copie a W.

Y el movwf hace exactamente lo inverso.

Hacer movwf CONTA1

Significa que el contenido de W se copie a CONTA1.

No soy partidario de usar la instruccion movfw bajo ningun aspecto porque confunde y un pequeño error de tipeo hace estragos. Cuando uno programa, facilmente la mente(valga la semi-redundancia) puede confundir ambos terminos por su similitud y podes poner un movfw en lugar de un movwf o viceversa, por eso, YO ni me acuerdo que existe(ni uso) la instruccion movfw.

Saludos!


"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: necesito programar un 16f628 !!ayuda!! con lo siguiente:
« Respuesta #59 en: 07 de Febrero de 2007, 18:44:45 »
Bruno yo sí uso el macro movfw y tengo cuidado al usarlo.  Creo que tu consejo es muy bueno y didáctico y tal vez se preste a confusión pero no lo veo como algo tan grave.

Opino que en ensamblador hay que tener cuidado constantemente!! un bit mal puesto y ya la cosa no anda como uno cree.  Un movff (esto en los 18F) o un movfw o un movwf , se ven todos parecidos cuando uno pasa rápido por el mnemónico.

Lo mismo ocurre con el movf REG,f o movf REG,w  uno debe estar atento a no equivocarse.  También con los 3 parámetros que recibe una instrucción en los 18F la cosa se complica y el mareo también!

También con los cambios de página, de rom y ram, hay que tener cuidado constantemente.

En fin, son tantas las cosas a tener en cuenta que bueno, hacer movfw no es lo ideal pero creo que tampoco es la muerte para nadie y que hay que prestar atención siempre que se programa, no importa el lenguaje

En C , me pasa que a veces algo no me funciona y resulta que hice

if (a = b)

en vez de hacer

if (a == b)

y eso es porque en Delphi (lenguaje que uso casi a diario para la PC) , el operando = es la comparación pero en C es la asignación!

Ojo, no hablo de tener razón ni nada, simplemente es un punto de vista en que de seguro hay que tener cuidado para ciertas cosas cuando uno programa, hoy es el movfw y mañana será la asignación en C o cualquier otro lenguaje.

El debugging es necesario y cotidiano, no importa lo simple o complejo del código.

 :)
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)