Hola.
Vengo referenciado del foro Todopic.
Primero quiero felicitarlos por el proyecto. Es muy interesante. Algún día seguramente también lo haga. aunque tal vez utilice un ARM para ello.
En cuanto a la lectura e interpretación del Quadrature, lo mejor sería utilizar dos pines de entre los [RB4-RB7] ya que ellos permiten configurar una interrupción de cambio de estado(sin importar el flanco). Por ende interrumpirían ante cualquier cambio, y sólo habría que manipular una interrupción en lugar de 2.
Con respecto al problema de tener más de una interrupción y ambas sucedan al mísmo tiempo:
Hasta la serie 16F e inferiores, sólo poseen un nivel de prioridad de interrupciones, por lo que se levantarían ambos flags a la vez, y se ingresaría al vector de interrupción(0x004) y el código del usuario sería quien elija cuál de ambas se atiende primero según el orden ingresado(en caso de utilizar un compilador el orden será elegido por defecto por el compilador, aunque por lo general permiten especificar el orden de atención de las interrupciones).
En la serie 18F y superiores ya aparecen niveles de prioridad, en el caso de los 18F, uno puede elegir seleccionar ciertas interrupciones como de baja prioridad y otras como de alta. En caso de tener dos interrupciones que se produzcan a la vez pero ambas están configuradas con el mísmo nivel de prioridad(sea tanto bajo como alto) se aplicaría el caso que explico anteriormente.
En caso de que una sea configurada con nivel bajo y la otra con alto:
- De producirse ambas exáctamente a la vez, se atenderá primero a la alta y luego se atenderá la baja.
- En caso de producirse la alta mientras el uC está atendiendo la baja, se interrumple la baja, se atiende la alta y se la procesa. Luego una vez que se sale de la alta, se continúa con la baja, siempre y cuando no vuelva a ocurrir una de alto nivel.
- En caso de producirse una baja mientras se atiende una alta, sólo una vez que se retorna de la alta se atenderá a la baja.
Digamos que como bien dice la palabra "prioridad", lo que está más arriba puede interrumpir a lo que está más abajo, pero no al reves.
Interrupción alta prioridad
Interrupción baja prioridad
Flujo de código normal
P.D. Los jogwheel estaría bueno hacerlos con ruedas capacitivas, no?
Saludos.