Autor Tema: Como leer switch rotatorio tipo encoder?  (Leído 2940 veces)

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

Desconectado johenrod

  • PIC18
  • ****
  • Mensajes: 276
Como leer switch rotatorio tipo encoder?
« en: 17 de Agosto de 2021, 13:13:42 »
Cordial saludo, en esta oportunidad requiero de el concepto para leer un switch el cual tiene un común y otros 3 contactos los cuales va leyendo uno a la vez. La idea es saber cuando incrementa o decrementa, he encontrado algunos ejemplos con la función millis en arduino pero, no soy muy amigo de arduino y deseo hacerlo en CCS.
según lo investigado se necesitan crear una variable y actualizarlas en el proceso, me podrían sugerir algo por favor?
Gracias de antemano.
https://3.bp.blogspot.com/-U3pKHZX6ZIM/WYuFK-bE2GI/AAAAAAAAFY4/5OiLlMEI4f0Xo76n-9z_G6P1Lw2SV4dnACLcBGAs/s320/DSC_0787.jpg
« Última modificación: 17 de Agosto de 2021, 13:45:37 por johenrod »
Si algo parece complicado... es por que esta mal explicado.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:Como leer switch rotatorio tipo encoder?
« Respuesta #1 en: 17 de Agosto de 2021, 15:49:43 »
Saludos. ¿Qué desea hacer? ¿Medir velocidad, conocer el sentido de giro o ambas cosas?

Yo una vez utilice uno para medir velocidad, una especie de tacómetro.

Las señales generaban los 3 terminales era algo a la imagen adjunta.

Utilizaba una interrupción externa por flanco de subida y mediante una OR a base de 3 diodos, cualquiera de las 3 señales producían la interrupción.

Para conocer el sentido de giro hacia lo siguiente:

En la interrupción, llamaba a un método o función donde leía el valor de las 3 señales, por ejemplo digamos que leía en binario 001, ese valor lo guardaba en una variable.

Luego esperaba una otra interrupción y leía las señales y si el nuevo valor era 010, entonces sabia que estaba girando para un lado, si obtenía 100, era que estaba girando para el otro lado.

En resumen, el código recuerdo que era algo similar a esto:

Código: [Seleccionar]
bool paraDondeGira(void)
{
switch (valorAnterior)
{
case 0x01: // b001
{
if (0x02 == valorActual) //b010 == valorActual
{
return true;
}
return false;
}
case 0x02: // b010
{
if (0x04 == valorActual) //b100 == valorActual
{
return true;
}
return false;
}
default:// equivale a case 0x04 o b'100'
{
if (0x01 == valorActual)
{
return true;
}
return false;
}
}
}








Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:Como leer switch rotatorio tipo encoder?
« Respuesta #2 en: 17 de Agosto de 2021, 15:53:21 »
La OR con diodos es como se muestra en la imagen adjunta.

Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado johenrod

  • PIC18
  • ****
  • Mensajes: 276
Re:Como leer switch rotatorio tipo encoder?
« Respuesta #3 en: 17 de Agosto de 2021, 16:36:30 »
Saludos. ¿Qué desea hacer? ¿Medir velocidad, conocer el sentido de giro o ambas cosas?

Yo una vez utilice uno para medir velocidad, una especie de tacómetro.

Las señales generaban los 3 terminales era algo a la imagen adjunta.

Utilizaba una interrupción externa por flanco de subida y mediante una OR a base de 3 diodos, cualquiera de las 3 señales producían la interrupción.

Para conocer el sentido de giro hacia lo siguiente:

En la interrupción, llamaba a un método o función donde leía el valor de las 3 señales, por ejemplo digamos que leía en binario 001, ese valor lo guardaba en una variable.

Gracias por tu respuesta...
la idea es ver cuando se gira hacia un lado o hacia el otro para aumentar o disminuir volumen, por lo que siempre hay que recordar los valores previos.
Si algo parece complicado... es por que esta mal explicado.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:Como leer switch rotatorio tipo encoder?
« Respuesta #4 en: 17 de Agosto de 2021, 17:02:53 »
Saludos. ¿Qué desea hacer? ¿Medir velocidad, conocer el sentido de giro o ambas cosas?

Yo una vez utilice uno para medir velocidad, una especie de tacómetro.

Las señales generaban los 3 terminales era algo a la imagen adjunta.

Utilizaba una interrupción externa por flanco de subida y mediante una OR a base de 3 diodos, cualquiera de las 3 señales producían la interrupción.

Para conocer el sentido de giro hacia lo siguiente:

En la interrupción, llamaba a un método o función donde leía el valor de las 3 señales, por ejemplo digamos que leía en binario 001, ese valor lo guardaba en una variable.

Gracias por tu respuesta...
la idea es ver cuando se gira hacia un lado o hacia el otro para aumentar o disminuir volumen, por lo que siempre hay que recordar los valores previos.

No comprendo a que te refieres con "volumen", pero con respecto a guardar o recordar valores previos era simplemente guardar el valor actual donde estaba el valor anterior luego de llamar a la función paraDondeDiga

Código: [Seleccionar]
if (paraDondeGira())
{
   ... //
}
valorAnterior = valorActual
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado johenrod

  • PIC18
  • ****
  • Mensajes: 276
Re:Como leer switch rotatorio tipo encoder?
« Respuesta #5 en: 18 de Agosto de 2021, 09:16:44 »
Citar
No comprendo a que te refieres con "volumen", pero con respecto a guardar o recordar valores previos era simplemente guardar el valor actual donde estaba el valor anterior luego de llamar a la función paraDondeDiga

Código: [Seleccionar]
if (paraDondeGira())
{
   ... //
}
valorAnterior = valorActual
Lo que pretendo es aumentar el volumen de un radio de un coche y depende el giro del switch rotatorio, aumenta o disminuye.
Si algo parece complicado... es por que esta mal explicado.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:Como leer switch rotatorio tipo encoder?
« Respuesta #6 en: 18 de Agosto de 2021, 10:10:58 »

Lo que pretendo es aumentar el volumen de un radio de un coche y depende el giro del switch rotatorio, aumenta o disminuye.


Entonces no es un encoder lo que tienes, lo que posees es un motor de pasos que va a mover el volumen del radio ¿Verdad?
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado johenrod

  • PIC18
  • ****
  • Mensajes: 276
Re:Como leer switch rotatorio tipo encoder?
« Respuesta #7 en: 18 de Agosto de 2021, 10:20:49 »
pues aca se le conoce como swicth rotatorio
hay un comun central y va haciendo contacto uno a uno con los otros 3 contactos
https://3.bp.blogspot.com/-U3pKHZX6ZIM/WYuFK-bE2GI/AAAAAAAAFY4/5OiLlMEI4f0Xo76n-9z_G6P1Lw2SV4dnACLcBGAs/s320/DSC_0787.jpg
Si algo parece complicado... es por que esta mal explicado.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:Como leer switch rotatorio tipo encoder?
« Respuesta #8 en: 18 de Agosto de 2021, 10:27:56 »
pues aca se le conoce como swicth rotatorio
hay un comun central y va haciendo contacto uno a uno con los otros 3 contactos
https://3.bp.blogspot.com/-U3pKHZX6ZIM/WYuFK-bE2GI/AAAAAAAAFY4/5OiLlMEI4f0Xo76n-9z_G6P1Lw2SV4dnACLcBGAs/s320/DSC_0787.jpg

Esa imagen no da mucha información, parecería cualquiera de las dos cosas. Pero si es básicamente un motor eléctrico, lo que tienes que hacer es generar la señal similar a la que adjunté al inicio y con transistores de potencia manejarías las cargas.

Ahora si deseas cambiar el volumen de sonido con un microcontrolador, personalmente sacaría el potenciómetro (volumen) del radio y colocara una resistencia SPI o I2C y cambiaría su valor con el microcontrolador. Las cosas que son mecánicas son mas tediosas para que funcionen correctamente. Sin partes mecánicas es mucho mejor.

 
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado johenrod

  • PIC18
  • ****
  • Mensajes: 276
Re:Como leer switch rotatorio tipo encoder?
« Respuesta #9 en: 18 de Agosto de 2021, 17:45:24 »

Esa imagen no da mucha información, parecería cualquiera de las dos cosas. Pero si es básicamente un motor eléctrico, lo que tienes que hacer es generar la señal similar a la que adjunté al inicio y con transistores de potencia manejarías las cargas.

Ahora si deseas cambiar el volumen de sonido con un microcontrolador, personalmente sacaría el potenciómetro (volumen) del radio y colocara una resistencia SPI o I2C y cambiaría su valor con el microcontrolador. Las cosas que son mecánicas son mas tediosas para que funcionen correctamente. Sin partes mecánicas es mucho mejor.
Gracias por tu ayuda , parece que no me logro hacer entender, la imagen es de un switch rotatorio es decir, un encoder. y va generando 3 pulsos uno tras otro pero solo 1 a la vez dependiendo del contacto que vaya tocando. dependiendo hacia donde gire estará en dirección horaria o  anti-horaria  lo que requiero es identificar hacia que lado gira para actuar en consecuencia y enviar un pulso con el microcontrolador sea para un rele o un potenciometro digital etc.
Si algo parece complicado... es por que esta mal explicado.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:Como leer switch rotatorio tipo encoder?
« Respuesta #10 en: 18 de Agosto de 2021, 17:54:01 »

Esa imagen no da mucha información, parecería cualquiera de las dos cosas. Pero si es básicamente un motor eléctrico, lo que tienes que hacer es generar la señal similar a la que adjunté al inicio y con transistores de potencia manejarías las cargas.

Ahora si deseas cambiar el volumen de sonido con un microcontrolador, personalmente sacaría el potenciómetro (volumen) del radio y colocara una resistencia SPI o I2C y cambiaría su valor con el microcontrolador. Las cosas que son mecánicas son mas tediosas para que funcionen correctamente. Sin partes mecánicas es mucho mejor.
Gracias por tu ayuda , parece que no me logro hacer entender, la imagen es de un switch rotatorio es decir, un encoder. y va generando 3 pulsos uno tras otro pero solo 1 a la vez dependiendo del contacto que vaya tocando. dependiendo hacia donde gire estará en dirección horaria o  anti-horaria  lo que requiero es identificar hacia que lado gira para actuar en consecuencia y enviar un pulso con el microcontrolador sea para un rele o un potenciometro digital etc.

Pues volvemos a la respuesta original. Leyendo un valor y el siguiente sabrás si gira a un lado o al otro

Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re:Como leer switch rotatorio tipo encoder?
« Respuesta #11 en: 18 de Agosto de 2021, 20:50:24 »
Que tal johenron,

No se como tengas conectado tu switch rotatorio, si estés usando resistencias de pull-up con el común a tierra o estés usando resistencias de pull-down con el común a VDD (5V).
Si es el primer caso, entonces una de las tres terminales siempre está en nivel bajo y las optras dos en nivel alto. Es decir si supones que los tres puntos de pull-up son A,B y C y que está seleccionado el punto A, entonces tienes lo siguiente 011, ahora bien si giras hacia la derecha y suponiendo que el punto B está hacia la derecha, entonces ahora tendrías 101. Si has registrado el estado anterior, con el microcontrolador lo que estas observando es precisamente el giro hacia la derecha.
Ahora bien si el selector ya está seleccionando el punto B, eso significa que ahora tienes 101, correcto? Lo que significa que ahora el switch lo puedes girar a la direcha o a la izquierda. Pues bien, si giras a un sentido y obtienes 110, estás girando a la derecha, pero si obtienes 011, entonces estás girando a la izquierda. Así de simple. Si en lugar de resistencias pull-up tienes resistencias pull-down, simplemente inviertes la lógica (100 cuando el contacto A está seleccionado, y si gira a la derecha tendrías 010).

Espero esto te sirva.

Elreypic.