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

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

Desconectado snorkman

  • PIC10
  • *
  • Mensajes: 20
Una ayuda con los encoders...por favor :)
« en: 06 de Febrero de 2009, 02:10:49 »
Hola gente buenas noches, soy Milton de Posadas. Actualmente estoy cursando mi tercer año de Ing. Electronica, y me he metido de lleno en la parte de programar los pic para realizar un controlador MIDI.

Para empezar, he programado un codigo para el controlador mas simple: un pote y un boton.

Mi problema es que, como no estoy familiarizado con la parte de conversion ADC, uso 2 botones (a parte del tercero) en vez del pote para aumentar o disminuir el volumen.

La pregunta es  ¿es muy dificil de usar un encoder que reemplace a estos 2 botones? El valor de el parametro varia de 0 a 127.

Espero haber sido claro con mi pregunta, y si alguien mas esta interesado en programar los pic para controladores MIDI con gusto les doy una mano. Yo programo actualmente en basic con el PIC SIMULATOR IDE.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17798
    • MicroPIC
Re: Una ayuda con los encoders...por favor :)
« Respuesta #1 en: 06 de Febrero de 2009, 02:35:59 »
Usar un encoder es muy simple.
Tienen dos salidas de onda cuadrada desfasadas 90º. Contando los pulsos de una de ellas puedes saber cuánto se ha movido. Precisamente cuando se produce el flanco (puedes elegir el ascendente o el descendente) de la primera, mirando la otra sabrás si está girando hacia un lado o hacia el otro.

Por tanto mi recomendación es que metas una salida del encoder a un pin de interrupción externa del micro, y en la interrupción lo primero que haces es comprobar el estado de la otra salida, que estará conectada a un pin sin interrupci´no del micro. Si el estado es 1, incrementas un contador; si el estado es 0, decrementas un contador. Así de simple.
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3173
Re: Una ayuda con los encoders...por favor :)
« Respuesta #2 en: 06 de Febrero de 2009, 13:32:35 »
Hola, si piensas programar en CCS, visita este enlace: http://www.todopic.com.ar/foros/index.php?topic=24106.msg201486#msg201486

De todas formas en ese hilo viene un enlace a un articulo que explica el funcionamiento de un encoder y como detectar el giro.

Un saludo.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado snorkman

  • PIC10
  • *
  • Mensajes: 20
Re: Una ayuda con los encoders...por favor :)
« Respuesta #3 en: 06 de Febrero de 2009, 23:08:34 »
hola pepe que tal? la verdad es que aun no me direccione para el lado del C para pic (a pesar de que en la facu usamos el ANJUTA IDE).......actualmente trabajo en basic

Desconectado snorkman

  • PIC10
  • *
  • Mensajes: 20
Re: Una ayuda con los encoders...por favor :)
« Respuesta #4 en: 06 de Febrero de 2009, 23:35:07 »
Hola Nocturno, que tal? creo que he captado masomenos la idea de como programar.....

Que tipo de encoder necesito para este uso?

El pin comun del encoder, a donde va? GND o +5?

Serias tan amable de decirme si el codigo de ejemplo es correcto para un encoder??

/---------------------------------------------------------------------------------------------------------------------------------------------/
' Este codigo esta para que el encoder aumente el valor de una variable al girar a la derecha y disminuya el valor de la misma al girar a la izquierda

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

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

/---------------------------------------------------------------------------------------------------------------------------------------------/
« Última modificación: 06 de Febrero de 2009, 23:37:57 por snorkman »

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17798
    • MicroPIC
Re: Una ayuda con los encoders...por favor :)
« Respuesta #5 en: 07 de Febrero de 2009, 03:28:36 »
Ese código no te servirá si está en un bucle, porque si el encoder está parado en una de las dos posiciones descritas en los "if" se irán incrementando o decrementando hasta el infinito.
Debes meterlo en una interrupción por flanco ascendente o descendente para que te funcione, y te puedes ahorrar una de las dos condiciones de cada IF puesto que sabes cuál es el estado del pin que lanzó la interrupción.
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ

Desconectado snorkman

  • PIC10
  • *
  • Mensajes: 20
Re: Una ayuda con los encoders...por favor :)
« Respuesta #6 en: 07 de Febrero de 2009, 04:08:13 »
hola Nocturno gracias por la pronta respuesta........

Ahora que lo decis, me doy cuenta y tenes razon. Sera que me podes tirar algun ejemplin? :mrgreen:

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17798
    • MicroPIC
Re: Una ayuda con los encoders...por favor :)
« Respuesta #7 en: 07 de Febrero de 2009, 04:41:48 »
Lo siento, no puedo.

Pega aquí tu código si tienes dudas y las vamos viendo.
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 769
Re: Una ayuda con los encoders...por favor :)
« Respuesta #8 en: 07 de Febrero de 2009, 07:16:13 »
hola si necesitas algo de info sobre un controlador midi puedes ver el que hice, esta aqui. pero yo lo programe en ensamblador, el encoder esta conectado como me dijo Nocturno hace ya mucho jej, a la patilla portb0 y la interrupcion activada por flanco ascendente, en cada interrupcion se lee el estado portb1 y se sabe en que sentido ha girado

un saludo espero te sirva


« Última modificación: 10 de Febrero de 2009, 19:44:51 por alogic.on »

Desconectado Marttyn

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1814
    • IDEAA
Re: Una ayuda con los encoders...por favor :)
« Respuesta #9 en: 07 de Febrero de 2009, 08:08:45 »
Ese código no te servirá si está en un bucle, porque si el encoder está parado en una de las dos posiciones descritas en los "if" se irán incrementando o decrementando hasta el infinito.
Debes meterlo en una interrupción por flanco ascendente o descendente para que te funcione, y te puedes ahorrar una de las dos condiciones de cada IF puesto que sabes cuál es el estado del pin que lanzó la interrupción.

depende del tipo de encoder. yo compre un pack de 10 a sureelectronics (el chino de ebay). estos tienen como 20 pasos por vuelta, y cada paso hace un "tick" que se siente al tacto. en cada tic hacen todo el recorrido del codigo gray (2bits). ademas, mientras esta en reposo no conduce ninguno de los 2, por lo que como tiene un pull up siempre esta a "1".

mi codigo quedo muy simple:

Código: C
  1. void INT_EXT_isr(void){ //monitoriza rotary encoder
  2.         flagGiro = TRUE;
  3.         Sentido = ENC_B;
  4. }

flagGiro es un flag para avisar al programa que se giro el encoder.
Sentido es un short que indica a que lado se giro el encoder.
El pin A del encoder esta conectado a la interrupcion externa.
ENC_B es el pin del pic donde tengo conectado el pin B del encoder.
la int_ext esta configurada en flaco descendente.

con algunas modificaciones podrias usar un bucle para comprobar el estado del encoder, siempre y cuando se comporte como el mio  :mrgreen:
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 snorkman

  • PIC10
  • *
  • Mensajes: 20
Re: Una ayuda con los encoders...por favor :)
« Respuesta #10 en: 07 de Febrero de 2009, 13:22:28 »
Hoal Marttyn, como te va?? Cuanto te salieron esos encoders y donde los compraste??

Creo que el tipo de encoder del q hablas es el que necesito... cada "tick" q decis vos que hace cuando avanza seria un 0 en la entrada?? o un 1??

Disculpen por las repetidas preguntas. :-)

Desconectado snorkman

  • PIC10
  • *
  • Mensajes: 20
Re: Una ayuda con los encoders...por favor :)
« Respuesta #11 en: 07 de Febrero de 2009, 13:28:59 »
Alogic.On la verdad es que tu controlador me dejo realmente....... :shock: WOW!

Una sola palabras------------------>>> EXCELENTE
El encoder lo usas debajo de tu jog wheel?

Desconectado Marttyn

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1814
    • IDEAA
Re: Una ayuda con los encoders...por favor :)
« Respuesta #12 en: 07 de Febrero de 2009, 13:34:27 »
Los que compre yo son estos:
http://cgi.ebay.es/12mm-Rotary-Encoder-Switch-With-Keyswitch-10pcs_W0QQitemZ350126007559QQihZ022QQcategoryZ67003QQcmdZViewItemQQ_trksidZp1713.m153.l1262

como te comento, la interrupcion se activa cuando detecta un pulso bajo en el pin A del encoder, y en la interrupcion miro en que estado esta el pin B del encoder, si esta en 0 giro a la derecha, si es 1 giro a la izquierda.

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 snorkman

  • PIC10
  • *
  • Mensajes: 20
Re: Una ayuda con los encoders...por favor :)
« Respuesta #13 en: 07 de Febrero de 2009, 14:00:20 »
ok, gracias por la data.....estoy ansioso por empezar a probar el encoder

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 769
Re: Una ayuda con los encoders...por favor :)
« Respuesta #14 en: 07 de Febrero de 2009, 17:52:46 »
el plato es un cd transparente y el disco un acetato de 0,5 impreso con una laser, con adobe ilustrator y la herramienta de hacer estrellas se hace muy bien. el brazo son un par de leds IR y fotodiodos montados en un bastidor para regular la altura y la separacion entre ellos

un saludo


 

anything