Autor Tema: ayudarme por favor  (Leído 8790 veces)

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

Desconectado dragon33

  • PIC10
  • *
  • Mensajes: 8
ayudarme por favor
« en: 15 de Octubre de 2003, 12:03:00 »
necesito leer un codigo de 4 bits por puerta A, que mientras sea 0 no haga nada, y si entra por ejemplo el nº23 salte a un bucle A este se repita 23 veces para luego retornar y esperar otro dato, si entra otro dato por ejemplo 25, reste 25 de 23 el resultado 2 se mete al bucle A para que se repita 2 veces y salga, si entra otra vez el 23 este se resta de la suma de los otros dos datos metidos al bucle A es decir 23+2=25 es decir 23-25=-2 este -2 se mete esta vez al bucle B y se repite 2 veces....
y asi siempre gracias.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: ayudarme por favor
« Respuesta #1 en: 15 de Octubre de 2003, 12:54:00 »
Creo que debieras hacerlo tú, comentando las líneas debidamente. Una vez terminado lo pones aquí si lo deseas y te damos nuestra opinión.

Por lo menos empezar, hacer algo ...

Un saludo

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1700
    • winpic800
RE: ayudarme por favor
« Respuesta #2 en: 15 de Octubre de 2003, 15:41:00 »
dragon33  con 4 bits no lo conseguiras ya que el valor maximo que obtendras es el 15 en decimal .
roll.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7918
RE: ayudarme por favor
« Respuesta #3 en: 15 de Octubre de 2003, 17:03:00 »
Porque mejor nos explicas realmente cual es el objetivo de este codigo, no como se desarrolla sino el fin que quieres obtener con el.
Recuerda que hay muchos caminos para llegar a Roma, pero en realidad lo que interesa es llegar (en este caso ese es el objetivo).
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado dragon33

  • PIC10
  • *
  • Mensajes: 8
RE: ayudarme por favor
« Respuesta #4 en: 16 de Octubre de 2003, 10:35:00 »
Lo que pretendo es controlar un motor bipolar PaP. Para ello he desarrollado un programa en C que envia datos previamente programados por el puerto paralelo a un interface puente entre el PC y el pic16f84, los datos que se envian son cualquier numero entre 0 y 15(fue un lapsus
Sispic perdonad).Estos datos de 0 a 15 posicionan el eje del motor en cualquier posicion entre 0º y 180º en pasos de 12º (15x12=180).
 Os desarrollo un ejemplo de como funcionaria: imaginemos que entra el dato 13, el pc temporiza 0.5sg y lo hace desaparecer, tiempo suficiente para que el pic se de cuenta que en su puerta A tiene el 13, entonces ha de posicionar el eje del motor en la posicion de 13x12=156º, pasado un tiempo le llega a las puertas del pic el dato 10, el pic ha de posicionar en 10x12=120º para lo cual ha de girar al lado contrario, ahora le llega el dato 0 0x12=0º, el motor debe volver a situacion de reposo.....Creo que ahora esta mas claro, el codigo que hace girar para un lado u otro lo tengo ya hecho y probado pero el programa
principal no se como cogerlo...porfa en ensamblador GRACIAS A TODOS.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: ayudarme por favor
« Respuesta #5 en: 16 de Octubre de 2003, 13:59:00 »
Este programa lo he hecho sobre papel, seguro que tiene errores, hay que probarlo:

.
.
.

Inicio   movfw  PORTA
           subwf   Temporal,0       ;f-W
           movwf   Contador
           movfw   PORTA
           movwf   Temporal
           btfsc      STATUS,Z
           goto      Inicio
           btfss      STATUS,C       ;Si C=0 hay acarreo
           goto      Giroantihorario
           goto      Girohorario

Horario   call         Giro12horario
               decfsz    Contador
               goto       Horario
               goto       Inicio

Antihorario   call         Giro12antihorario
                    decfsz    Contador
                    goto       Antihorario
                    goto       Inicio

.
.
.

En estos puntos suspensivos pondrías las dos rutinas para el giro de 12 pasos. Una para el giro horario y otra para el antihorario

Espero que se entienda. Un saludo




Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7918
RE: ayudarme por favor
« Respuesta #6 en: 16 de Octubre de 2003, 14:10:00 »
Por que no simplificas el codigo del PIC, enviandole directamente el numero de pasos y el sentido de giro, efectuando los calculos en el programa del PC??
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: ayudarme por favor
« Respuesta #7 en: 17 de Octubre de 2003, 09:48:00 »
Efectivamente tal como me imaginaba, a la primera nunca sale y el programa que envié, tiene fallos. Voy a ver si tengo un rato, no sé cuando y lo acabo por completo... me ha picado.

Un saludo

Desconectado dragon33

  • PIC10
  • *
  • Mensajes: 8
RE: ayudarme por favor
« Respuesta #8 en: 17 de Octubre de 2003, 10:44:00 »
Estimado pocher al ingresar un numero por puerta A lo he probado y el motor siempre gira y no para, espero tus resultados......y los de otras personas del foro  y respecto a MGLSOFT tienes razon pero ya me costo un huevo elaborar el programa en C para que sacase una secuencia
numerica previamente programada y almacenada en un archivo, no estoy muy suelto todavia gracias.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7918
RE: ayudarme por favor
« Respuesta #9 en: 17 de Octubre de 2003, 13:28:00 »
Hey, Dragon33!!
Se dice testiculo...je...je...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: ayudarme por favor
« Respuesta #10 en: 18 de Octubre de 2003, 06:00:00 »
Uf ... lo conseguí.

Este es el programa, esta hecho para un motor pap unipolar que es el que trae el PROTEUS.

De todas formas el asunto de los grados en el motor pap de PROTEUS creo que no va bien.

Tuve que depurarlo en MPLAB paso a paso y funciona de perlas.

Si te pediría dragón33 que lo probases físicamente y me dijeses si funciona.

Ahí va:

;                     PaPunip4.asm      
;
      List   p=16F876      ;Tipo de procesador
      include   "P16F876.INC"   ;Definiciones de registros internos

TEMP1      EQU   0x20      ;TEMP1 y TEMP2 --> temporización de 50ms aprox.
TEMP2      EQU   0x21

TEMP3      EQU 0x22         ;Temporal para almacenar el valor anterior PORTA

CONTADOR   EQU 0x23         ;CONTADOR3=PORTAanterior-PORTApresente

         org   0x00         ;Vector de Reset
         goto   INICIO

         org   0x05      
         

INICIO      bsf   STATUS,RP0      ;Seleccionamos el banco 1
         movlw   0x06
         movwf   ADCON1
         movlw   0xFF
         movwf   TRISA      ;PORTA entradas
         clrf   TRISB      ;PORTB salidas
         clrf   CONTADOR
         clrf   TEMP3
      
         bcf   STATUS,RP0      ;Seleccionamos el banco 0
         clrf   PORTB                  
         clrf   INTCON      
BUCLE1      movfw   TEMP3
         subwf   PORTA,0      ;PORTApresente-TEMP3(PORTAanterior) --> W
         btfsc   STATUS,Z
         goto   BUCLE1      ;Paro         
         movwf   CONTADOR   ;Número de pasos hacia delante o atrás
         movfw   PORTA      ;Almacena PORTApresente en TEMP3
         movwf   TEMP3

         btfss   STATUS,C   ;Si C=0 hay acarreo
         goto   ANTIHORARIO   ;Como C=0 la resta es (-) --> antihorario
         goto   HORARIO      ;Como C=1 la resta es (+) --> horario
      
;*************************************************************************

HORARIO
      
PASO1H      movlw   b"00001100"
         movwf   PORTB
         call   DELAY
         decfsz   CONTADOR,1
         goto   PASO2H
         goto   BUCLE1
      
PASO2H      movlw   b"00000110"
         movwf   PORTB
         call   DELAY
         decfsz   CONTADOR,1
         goto   PASO3H
         goto   BUCLE1

PASO3H      movlw   b"00000011"
         movwf   PORTB
         call   DELAY
         decfsz   CONTADOR,1
         goto   PASO4H
         goto   BUCLE1
      
PASO4H      movlw   b"00001001"
         movwf   PORTB
         call   DELAY
         decfsz   CONTADOR,1
         goto   PASO1H
         goto   BUCLE1         
      
;*************************************************************************            

ANTIHORARIO   

         comf   CONTADOR,1      ;Complemento a 1
         incf   CONTADOR,1      ;más 1 y tenemos el número positivo   

PASO1A      movlw   b"00001001"
         movwf   PORTB
         call   DELAY
         decfsz   CONTADOR,1
         goto   PASO2A
         goto   BUCLE1
      
PASO2A      movlw   b"00000011"
         movwf   PORTB
         call   DELAY
         decfsz   CONTADOR,1
         goto   PASO3A
         goto   BUCLE1

PASO3A      movlw   b"00000110"
         movwf   PORTB
         call   DELAY
         decfsz   CONTADOR,1
         goto   PASO4A
         goto   BUCLE1
      
PASO4A      movlw   b"00001100"
         movwf   PORTB
         call   DELAY
         decfsz   CONTADOR,1
         goto   PASO1A
         goto   BUCLE1

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

DELAY      movlw   0x50         ;Temporización entre pasos de aprox.50ms
         movwf   TEMP1
         clrf   TEMP2
      
DELAY_1      decfsz   TEMP2,F
         goto   DELAY_1
         decfsz   TEMP1,F
         goto   DELAY_1
      
         RETURN
      
         END            
      


Desconectado Elena2000

  • PIC24F
  • *****
  • Mensajes: 722
RE: ayudarme por favor
« Respuesta #11 en: 18 de Octubre de 2003, 07:46:00 »
Por lo que veo, Pocher, este código tiene una pinta estupenda... no se si te habrá costado un huevo o un testículo, o quizás ambos! pero me quito el sobrero..
A ver si fisicamente también rula... ya nos contará el dragón.

Besotes
Elena

Desconectado dragon33

  • PIC10
  • *
  • Mensajes: 8
RE: ayudarme por favor
« Respuesta #12 en: 19 de Octubre de 2003, 11:36:00 »
pocher, el codigo sigue sin funcionar el motor gira sin control, por cierto la instruccion movfw no esta en el
juego de instrucciones del pic 16f84 y segun he leido
aunque el mplab lo admite, al compilarlo el compilador
lo deja como etiqueta y no realiza ninguna funcion, como
si no estuviera vaya.......seguimos intentandolo gracias

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: ayudarme por favor
« Respuesta #13 en: 19 de Octubre de 2003, 14:09:00 »
No te preocupes por el movfw que el compilador sí que lo admite. Se trata de una instrucción especial (equivale al movf)

Has tenido en cuenta que mi diseño está hecho para un unipolar (PROTEUS). Tienes que hacer los cambios en HORARIO y ANTIHORARIO para adaptarlo al tuyo que es bipolar.

Un saludo

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
RE: ayudarme por favor
« Respuesta #14 en: 19 de Octubre de 2003, 18:19:00 »
Hola Pocher, muy bueno tu desarrollo, pero no entiendo lo del complemento...

Ahora me surge una duda, y creo que perderia pasos si cambia el sentido de giro, al enviarle siempre por el principio de cada bloque de giro...

es decir, si  avanzo una cantidad de pasos, y luego al retroceder, no iria a la salida correspondiente..... es decir, da bien matematicamente la cantidad de pasos, pero creo que no la asignacion de las bobinas .. ¿es correcto o me olvido de algo?
creo que se deberia emplear una unica tabla, y leerla ascendente o descendente...  voy a tratar de escribir algo..

Un abrazo  

Norberto

--------------- ya esta!, entendi lo del complemento...  estaba interpretando mal , no vi que venia de la resta...
gracias
Firmat - Santa Fe - Argentina

www.TodoPic.net

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