@test man*~ Bacana esse Pca9685, entrei pra ver na internet, não conhecia, parece ser uma alternativa mesmo. Muito obrigado pela dica, vou tentar um pouco mais sem usar esse driver ai, mas se não rolar mesmo vou partir pra ele.
Muito obrigado.
adicionado 9 minutos depois
@Isadora FerrazAinda estou tentando melhorar a garra por comandos prontos antes de mexer com o potenciometro, e descobri que o servo tem força sim para fazer a garra ter mais pressão, colocando no programa apenas o comando para fechar a garra, ela fica sempre forçando a garra para fechar, e ela funciona perfeitamente. Então tentei colocar como uma interrupção apenas o comando de fechar a garra, para que rapidamente ela força o objeto para que não caia. Funcionou legal, porém quando add no programa no loop normal, outro comando em outro servo, ele não reproduz, porque parece que fica o tempo inteiro na interrupção forcando a garra, diminui o tempo do timer para a interrupção, porém mesmo assim não funciona.
Vi que o servo que estou usando, precisa do sinal de pwm em uma frequências de 50Hz, 20 ms. Então no programa para enviar um comando para que o servo gire, fica algo assim:
void girar0(){
unsigned int i;
for(i=0,i<50,i++)
{
PORTB.RB0 = 1;
Delay_us(1500);
PORTB.RB0 = 0;
Delay_us(18500);
}
}
Pelo o que eu entendi essa função for é necessária, para que o comando seja enviado 50 vezes, por causa da frequências de 50Hz.
Acho que o esquema da interrupção não deu certo, pelo fato de esse comando para o outro servo girar demorar muito, 1 segundo aparentemente, pois seria 50*20ms, certo? e a interrupção sempre interrompera o comando para o outro servo girar, e assim ele nunca vai girar.
Não sei se estou certo, é o que eu acho, alguma sugestão?
Muito obrigado pela atenção.