yo tambien estoy realicando algo parecido a ti, tengo dos pulsadores uno para incrementar, B1, y el otro para decrementar, B2, el problema es que el pulsador 1 funciona bien, va incrementando de 0 grados hasta 180 grados, mientras que el pulsador b2, que tiene que funcionar igual pero restando de 180 a 0 grados, no funciona, ha veces se queda pillao el pic. si a la rutina de b2 le pongo lo mismo pero sumando, funciona a las mil meravillas, pero restando no funciona, ya no se que puedo hacer mal.
adjunto el proyecto. si alguien me puede hechar una mano se lo agradeceria.
saludos.
mi codigo:
(no se como ponerlo en una ventana deslizante, perdonen las molestias)
#include <16f84a.h>
#include <math.h>
#use delay(clock=4000000)
#byte portb= 0x06
#byte porta= 0x05
#bit rb0= 0x06.0
#bit ra0=0x5.0
#bit ra1=0x5.1
int cont;
long int angulo1;
long int angulo2, angulo3;
#int_timer0
interr()
{
rb0=1;
delay_us(angulo2);
rb0=0;
delay_us(angulo3);
}
void calcular_servo(long int angul, long int& angulo2, long int& angulo3)
{
long int a=11;
long int b=300;
long int z=20000;
angulo2=a*angul+b;
angulo3=z-(a*angul+b);
return;
}
void main()
{
set_tris_b(0); // puerto rb0
set_tris_a(0xFF); // puerto ra0 y ra1
portb=0;
porta=0;
cont=0;
setup_timer_0(rtcc_internal);
enable_interrupts(int_rtcc);
enable_interrupts(GLOBAL);
set_timer0(200);
angulo1=0;
calcular_servo(angulo1,angulo2,angulo3);
while(1)
{
if(ra0==0) // testeamos RA0.
{
angulo1=angulo1+5;
calcular_servo(angulo1,angulo2,angulo3);
if (angulo1>=179)
{
angulo1=179;
}
}
if(ra1==0) // testeamos RA1.
{
angulo1=angulo1-5;
calcular_servo(angulo1,angulo2,angulo3);
if (angulo1<=1)
{
angulo1=1;
}
}
delay_ms(1);
}
}