Igual ya se ha dicho en la serie de replys q no son pocos, la idea es conectar el led emisor con una resistencia para ajustar una intensidad q sea buena, luego creo q hay dos fototransistores donde la luz q llega actua como base y modula la intensidad q pasa a traves de ellos de modo q cuando pasa luz el transistor conduce y leemos una tension proxima a tierra pq se satura y cuando se obstruye se queda en corte y leemos algo proximo al nivel alto de tension. Entonces se cogen las 2 señales de salida una para cada encoder y se conectan al microcontrolador en dos entradas digitales (o se usa un buffer si se quiere ser muy puritano) y entonces se programa q se vaya comprovando de modo ciclico la lectura de las dos señales o si el micro dispone de interrupciones generadas por un cambio de señal de entrada se hace cuando eso ocurra. Y se hace lo siguiente.. a ver...
una variable le digo E contiene el estado de la maqina de estados, esto almacena en cual de los bloques del grafo nos encontramos, en mi implementacion uso solo 4 estados de modo q son suficientes 2 bits para almacenarlo entonces...
los dos fototransistores estan situados uno al lado del otro de modo q cuando gira la ruedecilla uno se oscurece antes q el otro y todo eso... pongamos q cuando unos esta descubierto vale 0 y cuando algo obstruye la luz da 1... entonces la cosa va así....
la tabla de verdad que se implementa... realiza la funcion logica de la maqina de estados.. como entrada coge 2 bits q representan la lectura de los 2 encoders... y luego 2 bits q representan el estado actual. La salida es... 2 bits para el estado actualizado y yo hago por ejemplo como tengo hasta 8 bits para sacar... hago q un bit indique que hay q sumar al contador y otro bit q diga q hay q descontar al contador. Los casos principales son los siguientes
entrada 1 | entrada 2 | estado 1 | estado 0 | salida: final1 final0 subir | bajar
0 0 0 0 ---> 0 0 | 0 0
0 1 0 0 ---> 0 1 | 1 0
1 0 0 0 ---> 1 0 | 0 1
1 1 0 0 ----> lectura ilegal algun fallo hay... mi opcion es poner el estado en 1 1 y hacer como si no pasara nada (se puede cambiar y poner codigos de error y tonterias, habrá varias combinaciones "ilegales" así
1 1 | 0 0
0 0 0 1 ---> 0 0 | 0 1
0 1 0 1 ---> 0 1 | 0 0
1 0 0 1 ---> ilegal 1 0 | 0 0
1 1 0 1 ---> 1 1 | 1 0
0 0 1 0 ---> 0 0 | 1 0
0 1 1 0 ---> ilegal 1 0 | 0 0
1 0 1 0 ---> 1 0 | 0 0
11 1 0 ---> 1 1 | 0 1
se entiende la dinamica? la idea es ir saltando de un estado a otro en una direccion u otra en un grafo circular de 4 estados y si se gira en una direccion se incrementa el contador y si se gira en la otra se decrementa
0 0 1 1 --> ilegal 0 0 | 0 0
0 1 1 1 ---> 0 1 | 0 1
1 0 1 1 ----> 1 0 | 1 0
1 1 1 1 ---> 1 1 | 0 0
la manera de implementar esto es pillar la variable de estado.. y hacerle un or con las lecturas bitshiftadas para formar un byte con los 4 primeros bits q indiquen la entrada a la tabla ... pasarlo a una tabla implementada para el microcontrolador (hay varios ejemplos en applicatiion notes y en el manual del pic)... y luego hacer q devuelva un byte con la salida q se trata para actualizar el estado y subir o bajar le contador....
he sido caotico pero es algo relativamente simple papel y lapiz y se entiende enseguida
la lectura 0 0 corresponde a _ _
la lectura 0 1 corresponde a _ @
la lectura 1 1 corresponde a @@
la lectura 1 0 corresponde a @_
lo digo para ilustrar lo de tapar o no el paso de la luz.
ale espero q te sirva