Tag: interfaz

Como interpretar un Encoder Rotativo con PIC

Rotary Encoder

Rotary Encoder

Este pequeño fragmento de código, nos permitirá interpretar la salida de los famosos -mal llamados- “Potenciometros digitales”

Hoy en día estos encoders rotativos se convirtieron en un componente muy común en los dispositivos electrónicos. Están presentes en la mayoría de los Auto-Stereos, amplificadores de potencia, fuentes de alimentación, etc, permitiendo ajustar el volumen y otros parámetros.

Vienen de distintas formas y colores, desde perillas o pequeñas rueditas, hasta sensores de alta precisión de uso industrial.

Básicamente, hay de dos tipos: Ópticos y Mecánicos. Los primeros son obviamente más caros, pero ofrecen una mayor precisión, y los segundos son los que seguramente todos hemos tocado en algún momento, esos que al girarlos se siente como se mueve el eje por los “dientes”.

Lo que hacen es, transformar un movimiento, ya sea lineal, o giratorio como el de la foto, en señales electrónicas, codificadas digitalmente. Mediante un pequeño post-procesamiento de las señales adquiridas, podemos determinar, el sentido del giro, la distancia recorrida y la velocidad.

Esta es  la señal de salida de un encoder rotativo:

(Gracias Wikipedia por la imagen!)

En los encoders como el de la foto de arriba, las señales A y B provienen de los pines externos, y el central va a VCC o a GND, según como lo quieras utilizar.

Bueno, sin más palabras, aquí está el código:

while(1){     //BUCLE PRINCIPAL
if(ENCODER_A==1){
__delay_ms(3);

if(ENCODER_B==1){
//cosas para un lado
}
else{
//cosas para el otro
}
while(ENCODER_A==1){}
}

}

Explicación:

Como podemos observar, el chequeo del encoder se hace en el bucle principal, entonces, pregunto siempre por un pin, en este caso, el “ENCODER_A”, luego espero un tiempo que depende del tipo de encoder y la velocidad a la que se lo gira, y por ultimo pregunto cual pin está en alto. Si es el A eso nos dice que la fase empezó con el pin A, sino, con el B.

Este método, no es el mejor -lo sé- pero funciona y solo son pocas lineas de código. El problema principal es que el ancho de los pulsos de la salida depende de la velocidad con la que se gira el encoder, entonces esos 3 milisegundos de espera, nos da un cierto margen de velocidad que no debemos superar, ya que si lo hacemos podemos interpretar una dirección erronea.

De todas formas, a mi me sirvió, ya que ese “margen” es lo bastante grande como para casi no notarlo, al menos que se gire el encoder violentamente, en cuyo caso, el codigo sale sin hacer nada.

Si te sirvió comentá!!!

Error: “Interfaz no compatible” en Windows 7 (No such interface supported)

Éste error, se produce en windows 7 al intentar abrir ciertos programas, en mi caso, se producía con todas las ventanas de la shell de windows, explorer, etc.

El problema surge despues de intentar instalar Internet Explorer 7 en el ordenador. Eso hace que se des-registren algunas dll, entonces no se habren las ventanas…

Para solucionarlo, descarga y ejecuta este archivo bat obtenido de los foros de microsoft.

Cuando el archivo haya listado todas las dll de tu equipo, se abrirá un notepad con la lista de DLLs del sistema, luego vas a Edición–>Reemplazar y ahí pones:

Buscar : C:\
Reemplazar : C:\Windows\System32\Regsvr32.exe /s C:\

Haces click en Reemplazar todas. luego guardas y cerras el archivo.

lo que hace es registrar las dll de nuevo. el proceso tarda unos 10 minutos, no lo cierres!

Saludos

Si a alguien le sirvió, por favor, comenten!!!

 

Actualización al 13-12-2013:

Si no funciona, prueba ejecutar el BAT como administrador. (Click derecho en el archivo, “Ejecutar como administrador”).

A muchos les funcionó iniciando el windows en Modo Seguro/Modo a Prueba de Fallos, y ejecutando el proceso allí.

El proceso es lento, algunos usuarios informaron que el proceso demoró hasta 2 horas. Sabrás cuando el proceso haya terminado porque te aparecerá el bloc de notas.

 

Fuente