Mico_pepe, me echas una mano?
Estoy queriendo hacer un analizador de servos, y voy a utilizar un encoder para seleccionar la posicion del servo. Esto de los encoders la verdad me marea un poco, y a pesar de haber leido un poco de informacion de todos lados todavia no lo tengo claro del todo.
Por lo que dices tu codigo funciona, yo tenia pensado hacer algo muy parecido a lo que tu haces aqui:
if ((bit_test(last,4)) ^ (bit_test(current,5))){
encoder++; //sentido agujas del reloj
if(encoder > 40)
encoder = 40;
}
else {
encoder--; //sentido contrario agujas del reloj
if(encoder == 0xFF)
encoder = 0;
}
Pero pensaba activar un flag en vez de incrementar la variable directamente, ademas queria implementarlo en el INT_EXT para el pin A del encoder. Creo que esto me reduciria la precision a la mitad con respecto a usar INT_RB comprobando los pines A y B, aunque al ser solo para incrementear y decrementar variables no creo que influya mucho...
Algo que no entiendo de tu codigo es esto:
if ((bit_test(current,4)) && (bit_test(current,5)))
Para que esperas a que los dos pines sean 1?
Por cieto, crees que es necesario el filtro RC que pone en el datasheet? Dara mucho error si no lo uso?
Salu2!