Autor Tema: Una ayuda con los encoders...por favor :)  (Leído 4646 veces)

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

Desconectado snorkman

  • PIC10
  • *
  • Mensajes: 20
Re: Una ayuda con los encoders...por favor :)
« Respuesta #15 en: 08 de Febrero de 2009, 22:27:57 »
Bueno creo que ya he entendido...y me gustaria q me corrijan nuevamente el codigo.

Tendria conectado un pin del encoder en RA0 y el otro pin al RA1. De manera que mientras que hay un "1" en RA0 verifica la entrada en RA1; si  hay un "1" aumenta el valor de la variable  o un "0" disminuye el valor de la misma.


/---------------------------------------------------------------------------------------------------------------------------------------------/
' Este codigo aumenta el valor de una variable al girar a la derecha y disminuye el valor de la misma al girar a la izquierda

While PORTA.0 = 1

   If PORTA.1 = 1  then  'SI GIRA A LA DERECHA
      entrada = entrada + 1
      Waitms 5
   End if

   If PORTA.1 = 0 then  'SI GIRA A LA IZQUIERDA
      entrada = entrada - 1
      Waitms 5
   End if
Wend
/---------------------------------------------------------------------------------------------------------------------------------------------/

podria funcionar??? :roll: :roll: :?:.....DESDE YA MUCHAS GRACIAS

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17764
    • MicroPIC
Re: Una ayuda con los encoders...por favor :)
« Respuesta #16 en: 09 de Febrero de 2009, 03:15:22 »
Has vuelto a cometer el mismo error de antes: si el encoder está parado incrementará continuamente.
¿Porqué no lo metes en la interrupción externa?
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ

Desconectado Marttyn

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1814
    • IDEAA
Re: Una ayuda con los encoders...por favor :)
« Respuesta #17 en: 09 de Febrero de 2009, 08:31:01 »
por un lado ocurriria lo que dice nocturno, y por otro, si RA0 es cero, no entra en el bucle, logico... pero no volveria a comprobar el estado de RA0 a menos que metas todo en un bucle constante.
podrias hacer asi:

Código: QBasic/QuickBASIC
  1. WHILE TRUE  'bucle infinito
  2. IF PORTA.0 = 0 THEN  'detecta cuando se giro el encoder
  3.    IF PORTA.1 = 1  THEN  'SI GIRA A LA DERECHA
  4.       entrada = entrada + 1
  5.    END IF
  6.  
  7.    IF PORTA.1 = 0 THEN  'SI GIRA A LA IZQUIERDA
  8.       entrada = entrada - 1
  9.    END IF
  10.  
  11.    Waitms 5
  12. END IF
  13. WEND

no manejo el basic, asi que comprueba que la sintaxis sea correcta.
puse el waitms fuera de los IF, asi te ahorras una linea de codigo  :mrgreen:
por cierto, esto funcionara solo si el encoder es de los que hacen todo el codigo por cada "tick" como comentaba en otro post. porque sino puede ocurrir lo que dice manolo.
salu2
La gente ve las cosas que existen y se pregunta por qué.
Yo prefiero imaginar lo que no existe y preguntarme por qué no.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17764
    • MicroPIC
Re: Una ayuda con los encoders...por favor :)
« Respuesta #18 en: 09 de Febrero de 2009, 13:59:12 »
Incluso aunque haga click, puede ocurrir que la velocidad de giro del encoder sea lo suficientemente lenta como para que el bucle se ejecute varias veces.
Si no se puede meter en una interrupción, que es lo suyo, habría que chequear que se produzca una nueva iteración del bucle hasta que cambie de estado la entrada.
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ

Desconectado Marttyn

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1814
    • IDEAA
Re: Una ayuda con los encoders...por favor :)
« Respuesta #19 en: 09 de Febrero de 2009, 15:11:35 »
Incluso aunque haga click, puede ocurrir que la velocidad de giro del encoder sea lo suficientemente lenta como para que el bucle se ejecute varias veces.
Si no se puede meter en una interrupción, que es lo suyo, habría que chequear que se produzca una nueva iteración del bucle hasta que cambie de estado la entrada.

alli esta el "waitms 5". eso evitara que entre en el mismo bucle varias veces. si el comportamiento no es el esperado se puede aumentar el wait a 20, o incluso a 100 ms si hiciera falta.

igualmente, como bien dices, los suyo es una interrupcion.
La gente ve las cosas que existen y se pregunta por qué.
Yo prefiero imaginar lo que no existe y preguntarme por qué no.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17764
    • MicroPIC
Re: Una ayuda con los encoders...por favor :)
« Respuesta #20 en: 09 de Febrero de 2009, 17:09:26 »
No me parece adecuado, Marttyn. Será difícil encontrar una temporización que te sirva para cuando el encoder va lento y para cuando va rápido.
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ

Desconectado Marttyn

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1814
    • IDEAA
Re: Una ayuda con los encoders...por favor :)
« Respuesta #21 en: 09 de Febrero de 2009, 18:12:48 »
Hay muchas posibilidades de que tengas razon... pero si el pibe insiste en hacerlo con RA0 y RA1 que le vamos a hacer?  :D :D
Si no le queda otra, o no tiene mas pines disponibles que pruebe asi. Mas no le podemos insistir para que lo haga por una interrupcion  :P
La gente ve las cosas que existen y se pregunta por qué.
Yo prefiero imaginar lo que no existe y preguntarme por qué no.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17764
    • MicroPIC
Re: Una ayuda con los encoders...por favor :)
« Respuesta #22 en: 09 de Febrero de 2009, 20:25:06 »
Sí se puede hacer, aunque sigue sin ser la solución buena.

Código: QBasic/QuickBASIC
  1. WHILE TRUE  'bucle infinito
  2. IF PORTA.0 = 0 THEN  'detecta cuando se giro el encoder
  3.    IF PORTA.1 = 1  THEN  'SI GIRA A LA DERECHA
  4.       entrada = entrada + 1
  5.    END IF
  6.  
  7.    IF PORTA.1 = 0 THEN  'SI GIRA A LA IZQUIERDA
  8.       entrada = entrada - 1
  9.    END IF
  10.  
  11.    WHILE PORTA.0 = 0
  12.    END WHILE
  13.  
  14.  
  15.  
  16. END IF
  17. WEND

Añadiendo ese while no pasará de ciclo hasta que el encoder cambie de estado. Desconozco si la sintaxis del While es correcta, pero espero que se pille la idea.
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ

Desconectado snorkman

  • PIC10
  • *
  • Mensajes: 20
Re: Una ayuda con los encoders...por favor :)
« Respuesta #23 en: 09 de Febrero de 2009, 22:56:09 »
Bueno che....disuclpen no me quiero meter a hacer una interrupcion externa porque no soy EL PROGRAMADOR....voy a ver si me sale un intento de interrupcion
« Última modificación: 09 de Febrero de 2009, 23:03:27 por snorkman »