Muy buenas tarde
me encuentro un poco estancado con una aplicion que estoy desarrollando.
bueno el problema radica en que tengo dos rutinas en mi programa una para leer distancias con los SRF05 y otra para mover dos servos con los datos obtenidos y calculados por los sensores ultrasonido, estas dos rutinas me funcionan pero si las coloco a las dos en un solo programa genreran conflicto no funciona ninguna.
para los sensores SFR05 manipulo el timer , para los servo utilizo el timer2, tambien utilizo una interrupcion serial no he podio encontrar el error y lo unico que se me ocurre es que los timer son los que generan el problema me gustaria ver algunas opiniones y sugerencias para que estas dos subrutinas funcionen en un solo codigo.
gracias
RUTINA PARA SRF05
void sensor2()
void sensor1()
{
output_high(pin_b6);
//bit_set(PORTB,6);
delay_us(20);
//bit_clear(portb,6);
output_low(pin_b6);
DO
{
}WHILE(bit_test(portb,0)==0);
set_timer1(0);
DO
{
}WHILE(bit_test(portb,0)==1);
Tpulso=get_timer1();
med1=Tpulso/58;
IF(med1<=2.0) { med11=10;}
else if(med1>=20.0) {med11=-10;}
ELSE {med11=((-1.11*(med1))+12.22);}
}
void sensor2()
{
output_high(pin_b7);
//bit_set(PORTB,7);
delay_us(20);
//bit_clear(portb,7);
output_low(pin_b7);
DO
{
}WHILE(bit_test(portb,1)==0);
set_timer1(0);
DO
{
}WHILE(bit_test(portb,1)==1);
Tpulso=get_timer1();
med2=Tpulso/58;
IF(med2<=2.0) { med22=10;}
else IF(med2>=20.0) { med22=-10;}
ELSE {med22=((-1.11*(med2))+12.22);}
}
RUTINA PARA LOS SERVOS
void motores()
{
if((motor1>=0)&&(motor1<0.2)) motor1=0.2;//minimo valor
if((motor1<0)&&(motor1>-0.2)) motor1=-0.2;//mínimo valor
temp=36.48*motor1+366;//máximo hasta
valor1=temp;
set_pwm1_duty(valor1); //a Duty de PWM
if((motor2>=0)&&(motor2<0.2)) motor2=0.2;
if((motor2<0)&&(motor2>-0.2)) motor2=-0.2;
temp=36.48*motor2+366;
valor2=temp;
set_pwm2_duty(valor2);
}
MAIN
void main()
{
set_tris_b(0x03);
lcd_init();
enable_interrupts(int_rda);
enable_interrupts(global);
setup_timer_1(T1_INTERNAL| T1_DIV_BY_1);
setup_timer_2(T2_DIV_BY_16,255,1);
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
set_pwm1_duty(0);
set_pwm2_duty(0);
i=0;
while(true)
{
m=m+1;
rx_asm();
if(ini_f==10000 && fin_f==-10000)
{
bit_32a=make32(dat[4],dat[5],dat[6],dat[7]); //el arreglo de cuatro bytes
bit_32b=make32(dat[8],dat[9],dat[10],dat[11]); //lo paso a entero de 32bits
motor1=f_IEEEtoPIC(bit_32a);
motor2=f_IEEEtoPIC(bit_32b);
printf(lcd_putc "\f %f %f "motor1,motor2);
delay_ms(500);
}
srf_1=f_PICtoIEEE(med11);
srf_2=f_PICtoIEEE(med22);
printf(lcd_putc "\f %f \n %f %u "med11,med22,m);
send_asm();
delay_ms(500);
motores();
sensor1();//sensor1 es el que esta conectado a PB0, se activa con PB6
sensor2();//sensor2 es el que esta conectado a PB1, se activa con PB7
}
}