Encoder Mecánico de Un Mause
Encoder Mecánico de Un Mause
Encoder Mecánico de Un Mause
2013
M-Smart
2013
La eleccin de este tipo de dispositivos radica en su facilidad de montaje, de su obtencin y su bajo costo. Muchos viejos sistemas de sonido poseen este elemento que puede resultar muy til para este trabajo. Su aspecto externo es el de un potencimetro, pero sus conexiones devuelven una secuencia de contactos organizadas en cuadratura y entregadas en forma de contacto elctrico como vemos en la imagen siguiente. Una de las cosas importantes a destacar en este punto es que estos dispositivos no siempre respetan un orden universal en su distribucin de pines. Es decir, en algunas oportunidades el punto central es el comn a GND y en otros es alguno de los extremos. La manera de saber el correcto conexionado puede ser resuelto de dos maneras muy sencillas. Una es mirando el PCB de donde extraemos el dispositivo y observando la distribucin de vas (ser muy sencillo descubrir cul es GND). La otra es utilizando el multmetro hasta descubrir el pin comn a ambos interruptores. Porque en realidad es eso lo que posee un encoder en su interior, dos interruptores con una conexin comn a GND. 2. Limitaciones.Como todo en la vida, las ventajas de facilidad de uso que brinda un encoder se ven opacadas por la rapidez en que estos componentes presentan algunas fallas. El deterioro de los contactos mecnicos internos y los problemas de ruidos elctricos cuando son afectados por la suciedad, son las primeras causas de fallos en este tipo de dispositivos. Esos dos fantasmas siempre acechan a ladurabilidad y eficiencia de un encoder. 3. Funcionamiento.El funcionamiento bsico de un encoder se sustenta, como mencionamos antes, en dos llaves individuales con una conexin comn a GND y que se activan una tras otra con un desfasaje de 90 grados. En uno de los sentidos de funcionamiento, uno de los impulsos obtenidos en los resistores pull-up (A) se adelantar 90 al otro (B) y en el sentido inverso B se adelantar a A. As de simple y sencillo. Lo mismo ocurre con el programa del microcontrolador, cuando uno de los pines conectados a cada llave recibe el impulso antes que el otro, determina el modo de trabajo en que el software resolver el sentido de giro y la cantidad de impulsos contados.
M-Smart
2013
4. Desarrollo.En esta etapa inicial no hablaremos de ninguna aplicacin definida, sino que nos limitaremos a asignarle valores a una variable con el simple hecho de girar hacia un lado y hacia otro, la rueda de mando. Ahora veamos como reciclar y usar el Encoder Mecnico rotatorio del Mouse.
4.1.
La Identificacin de pines del Encoder del Mouse es igual a los pines del Encoder Rotatorio tipo Potencimetro.
M-Smart
2013
Estas seales son aplicadas a las entradas del microcontrolador de la siguiente manera: PIN.A0A PIN.A1B
M-Smart
2013
5. Circuito a Implementar.-
#include <16f877A.h> #FUSES HS,NOWDT, NOLVP, NOCPD, NOWRT, NODEBUG, NOPROTECT, NOBROWNOUT #use delay(clock=20M, oscillator) #byte porta = 0x05 #byte portb = 0x06 #byte portC = 0x07 #byte portD = 0x08 // Asignamos PortA. // Asignamos PortB. // Asignamos PortC. // Asignamos PortD.
M-Smart
2013
#use fast_io(A) #use fast_io(B) #use fast_io(C) #use fast_io(D) // ---------- Programa Principial ----------
void main() { set_tris_a(0b11111111); // Puerto A como entradas. Slo usamos RA0 y RA1.
set_tris_b(0b00000000); // Puerto B como salidas, para los 8 LEDs. set_tris_C(0b00000000); // Puerto C como salidas, para los 8 LEDs. set_tris_D(0b00000000); // Puerto D como salidas, para los 8 LEDs. disable_interrupts(global); disable_interrupts(int_timer1); disable_interrupts(int_rda); disable_interrupts(int_ext); setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_spi(FALSE); setup_counters(RTCC_INTERNAL,RTCC_DIV_2); setup_timer_2(T2_DISABLED,0,1); port_b_pullups(FALSE); port_b_pullups(FALSE);// Sin resistencias pullups a las salidas del puerto B. setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); // Al no usar el TIMER configuramos lo ms bsico. // Inicializo el Micro y ... // deshabilitando todo lo no necesario ...
x=0;
enc=0; // Se almacenar el valor actual de RA0 y RA1, hasta la siguiente comparacin. aux; // Se almacenar el valor anterior de RA0 y RA1, hasta la siguiente comparacin.
M-Smart
2013
portC=0;
While (true) { aux=enc; enc=porta & 3; // Igualamos 'AUX' y 'ENC' para luego comparar cuando cambie 'ENC'. // Aislamos RA0 y RA1 como un nmero de 2 bits y se carga en la variable 'ENC'.
If (((aux==2)&&(enc==3)) || ((aux==1)&&(enc==0)))// Si en la comparacin hay flanco de subida, { DELAY_MS(10); x++; } If (((aux==3)&&(enc==2)) || ((aux==0)&&(enc==1))) { DELAY_MS(10); x--; } portC = x; } // El valor de X sale por el puerto B, los 8 LED de salida. // entonces decrementar una unidad el valor de X. // entonces incrementar una unidad el valor de X.