Un circuito más simple es mediante divisores de voltaje con resistencias considerando el voltaje al que esté operando el encoder.
Digamos que lo alimentas a 12V. Entonces las resistencias del divisor podrían ser de 4K7 del pin del PIC a tierra y de 6K8 del mismo pin a la señal del encoder. Este circuito se repite para cada señal.
Por otro lado el tipo de encoder que describes probablemente tenga salidas TOTEM-POLE y ademas las salidas sean diferenciales. Esto último se refiere a que además de las señales A, B y Z tendrás las complementarias de las mismas -A, -B y -Z. La idea es que utilices los pares diferenciales con cables trenzados para el mejor funcionamiento minimizando inducciones por ruidos eléctricos externos sobre todo cuando las distancias entre el encoder y el lector son largas.
En particular sugiero utilizar las señales diferenciales acopladas a chips DS9637A (tiene dos canales, perfecto para las señales A y B de un encoder) y luego conectar las salidas de esos chips al PIC. Los DS reciben señales diferenciales y generan señales únicas.
Si el encoder está alimentado a un voltaje no mayor de 15V entonces te puedes ahorrar los divisores y conectar directamente al DS9637A que tolera ese voltaje. Yo utilizo esta configuración.
Con respecto al contador, si utilizas el flanco de una de las señales, digamos de A y el estado de la señal B al recibir el flanco de A entonces podrás realizar fácilmente un contador que funcione p/e como sigue:
1. Espere por el flanco de subida de A.
2. Al detectar el flanco de subida de A lea el estado de B.
3. Si B es bajo entonces decremente el contador y vaya a <5>.
4. Si B es alto entonces incremente el contador y vaya a <5>.
5. Espere por el flanco de bajada de A.
6. Al detectar el flanco de bajada de A vaya a <1>.
Es una descripción sencilla pero es como funcionan mis contadores tanto en PICS como en programas para PC. La selección de uno u otro depende de la velocidad y los encoders utilizados. Si la frecuencia generada es muy alta (>120KHz) utilizo los PICS. Si es menor me conecto directamente a través del puerto LPT de la PC que utilizo para realizar mis controles CNC.
En los links siguientes los encoders conectan a chips DS. En el primer caso directamente al puerto LPT de la PC. En el segundo a PICS con reloj de 20MHz y de ahí a través del puerto LPT a la PC. Son aplicaciones reales.
Espero que esto te ayude y te dé ideas de lo que puedes lograr.