A ver, me consegui MikroC para pic Pro version 5.6.1 y me da errores de ficheros de cabecera, ya que no estan ni modbus.h ni pic1687x.h
¿Seguro que esto esta en mikroC?
No me compila el fichero tal y como esta sin hacer modificaciones y ese funciona bien ya que esta en mi modbus trabajando, aunque va mal en el tema del MPG de esa rutina que os digo.
El problema es que parece que Siliconio, cuando programo esto , considero que si el pin RB1 esta a 1 el encoder gira hacia un lado y si esta a cero es hacia el otro, y eso es erroneo, ya que el encoder MPG es como todos los demas encoders (he mirado en los manuales de MPGS) y genera codigo Gray, por lo que hay que hacer conversion a binario y testear el bit de chequeo de giro y de error, algo como esto que os pego y que funciona de lujo en CCS
// con esto se pasa a binario el valor de una variable Int que solo tiene los dos bits leidos del encoder en codigo Gray
byte pasa_a_binario(byte valor) // valor esta aqui en Gray leido de los dos pines de entrada
{
if(bit_test(valor,1)==1) // si el bit 1 de valor es 1
{
if(bit_test(valor,0)==0) // invierte el bit 0 de valor
bit_set(valor,0); // hace 1 el bit 0 de valor
else
bit_clear(valor,0); // hace cero el bit 0 de valor
}
return valor; // devuelve el valor ya en binario
}
// para calcular bits de sentido y error comparo el ultimo valor que guarde memorizado del encoder con el nuevo leido
// y hago el testeo de los bits de error y sentido de giro y hago la rutina correspondiente sumando o restando
if(actual_Z != anterior_Z) // si han variado las entradas....tened en cuenta que uso varios encoders en la misma interrupcion y puede haberse generado esta por pulsos de otro encoder.
{
// calcula la diferencia para ver los bits de signo y de error
diferencia_Z = actual_Z - anterior_Z;
// chequeo los bits de error y signo
if(bit_test(diferencia_Z,0) == 0) // si se ha producido un error se habra puesto a cero el bit 0
{
output_high(PIN_A2); // enciende el led de error
error_Z = 1;
}
else
{
if(bit_test(diferencia_Z,1) == 1) // chequea el bit de sentido de giro que sera 1 girando a derecha
contador_Z=contador_Z+1; // si es hacia un lado incrementa el contador
else
contador_Z= contador_Z-1; // hacia el otro lo decrementa
}
// memoriza en anterior_Z el estado actual
anterior_Z = actual_Z;
Esto funciona seguro y a mucha velocidad. Lo tengo mas que probado en varios montajes en hardware funcionando
Lo que tengo claro es que hacer el testeo de sentido de giro con elvalor que tiene uno de los bits del encoder no funcionara y necesito modificar esa rutina para que trabaje bien.
El problema sigue siendo que no puedo recompilar y tendria que rearmar todo para CCS con lo que ello conlleva, por lo que es mas simple modificar lo poco que hay que tocar, ya que el resto funciona bien y no necesito tocarlo.
Si el "fenomeno" de Siliconio estuviese operativo podria echarme una mano.
A ver quien sabe porque mi MikroC no tiene esos ficheros de cabecera o si es que esta compilado en otra cosa y por eso no va.
Una ayudita por favor. Ahora tengo tiempo y quiero poner eso en servicio y arreglarlo para publicar el Siliconio Modbus....como se merece, porque es un gran diseño