martes, 13 de septiembre de 2011

RotaryEncoder

 

Hola a todos! hoy voy a hablaros de los RotaryEncoder. Estos elementos, aunque no sean tan conocidos como otros elementos como potenciometros o pulsadores, son muy utilizados sobre todo en equipos de audio, donde son utilizados para regular el volumen. Un RotaryEncoder no es más que un elemento, con un pequeño eje al que dando vueltas nos da una serie de pulsos que pueden ser detectados con un microcontrolador.

En concreto, un RotaryEncoder nos da dos señales cuadradas desfasadas entre ellas 90 grados, con lo que comprobando una, y observando el estado de la otra podemos saber si estamos girando a derecha o a izquierda.

Los RotaryEncoders, generalmente disponen de 5 pines de conexión, 3 a una parte y dos a la otra. Los tres que tenemos juntos son los que nos van a dar las señales de pulsos, añadiendo unas resistencias de pull-down (o pull-up si queremos que el estado de reposo sea a ‘1’). Las conexiones para obtener una señal como la de la imagen serian de la siguiente manera, al pin central conectamos VCC, y a los dos extremos, mediante unas resistencia conectadas a masa, los conectamos al microcontrolador, donde vamos a detectar los pulsos.

El codigo con el que detectamos los pulsos será algo como el siguiente:

   1: #define re1 PORTCbits.RC0
   2: #define re2 PORTCbits.RC1
   3: .
   4: .
   5: .
   6: if(re1){
   7:             
   8:          if(!re2){
   9:              if(cuenta>0){ 
  10:                  cuenta--;
  11:                  flag=1;
  12:              }    
  13:              while(re1);
  14:          }else{
  15:              if(cuenta<100){ 
  16:                  cuenta++;
  17:                  flag=1;
  18:              }    
  19:              while(re1);
  20:          }    
  21:      }

Cuando detectamos un ‘1’ en un pin del encoder, observamos la otra entrada, y según el estado de ésta, sabemos si estamos subiendo o bajando. Para subir o bajar cada vez una unidad, una vez hemos detectado si subimos o bajamos, nos esperamos a que el primer pin del RotaryEncoder vuelva a ser 0. Esto que he explicado hoy, junto a la utilización de la libreria xlcd.h, podemos hacer algo como lo que se ve en el siguiente video.



Espero os haya resultado interesante, los archivos del proyecto los podeis encontrar aquí.


Un saludo

No hay comentarios:

Publicar un comentario