Hola, tengo un problema con este código (en proteus sí funciona pero en el circuito físico no),
Ya me he asegurado de que el problema no sea con los componentes electrónicos.
Dependiendo de las frecuencias iniciales el servo se posiciona en la posición correspondiente, pero al momento de utilizar los push button para moverlo simplemente hace un pequeño giro (como 3 grados) y regresa a su posición.
Quiero saber si es necesario implementar algún tipo de interrupción o si pasé por alto algo en el código.
NOTA: PIN B0 es para la linea de control del servo, PIN B1 es para aumentar los grados del eje, PIN B2 es para disminuir los grados del eje.
Saludos.
Gracias.
Ya me he asegurado de que el problema no sea con los componentes electrónicos.
Dependiendo de las frecuencias iniciales el servo se posiciona en la posición correspondiente, pero al momento de utilizar los push button para moverlo simplemente hace un pequeño giro (como 3 grados) y regresa a su posición.
Quiero saber si es necesario implementar algún tipo de interrupción o si pasé por alto algo en el código.
Código:
#include <16f886.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,XT,INTRC_IO,INTRC,RC_IO,RC,WDT,NOPUT,PUT,NOWRT,NOMCLR
#use delay (internal = 4,000,000)
void main(){
int x=0;
int16 y=0;
int16 uno=1500; //frecuencia
int16 cero=18500; //frecuencia
int check=1;
while(TRUE){
//aumento los grados de eje del servo
if(!input(PIN_B1)){
if (uno<2400){
uno=uno+100;
cero=cero-100;
check=1;
}
}
//disminución de los grados del eje del servo
if(!input(PIN_B2)){
if (uno<2400){
uno=uno+100;
cero=cero-100;
check=1;
}
}
//envio de frecuencias al servo
if(check==1){
check=0;
for(x=0;x<=25;x++){
output_high(PIN_B0);
delay_us(uno);
output_low(PIN_B0);
delay_us(cero);
}
}
}
}
Saludos.
Gracias.
Última edición por un moderador: