Autor Tema: sensores SRF05 y servomotores  (Leído 2487 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado hectdiaf

  • PIC10
  • *
  • Mensajes: 18
sensores SRF05 y servomotores
« en: 01 de Diciembre de 2010, 16:52:51 »
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

Código: CSS
  1. void sensor2()
  2. void sensor1()
  3. {
  4.    output_high(pin_b6);
  5.    //bit_set(PORTB,6);                    
  6.    delay_us(20);                            
  7.    //bit_clear(portb,6);                    
  8.    output_low(pin_b6);
  9.    DO
  10.    {                                                
  11.    }WHILE(bit_test(portb,0)==0);      
  12.    set_timer1(0);                            
  13.    DO
  14.    {
  15.    }WHILE(bit_test(portb,0)==1);
  16.    Tpulso=get_timer1();
  17.    med1=Tpulso/58;
  18.    IF(med1<=2.0) { med11=10;}
  19.    else if(med1>=20.0) {med11=-10;}
  20.    ELSE {med11=((-1.11*(med1))+12.22);}
  21. }
  22. void sensor2()
  23. {  
  24.    output_high(pin_b7);
  25.    //bit_set(PORTB,7);
  26.    delay_us(20);
  27.    //bit_clear(portb,7);
  28.    output_low(pin_b7);
  29.    DO
  30.    {
  31.    }WHILE(bit_test(portb,1)==0);
  32.    set_timer1(0);  
  33.    DO
  34.    {
  35.    }WHILE(bit_test(portb,1)==1);
  36.    Tpulso=get_timer1();
  37.    med2=Tpulso/58;
  38.    IF(med2<=2.0) { med22=10;}
  39.    else IF(med2>=20.0)  { med22=-10;}
  40.    ELSE {med22=((-1.11*(med2))+12.22);}
  41. }

RUTINA PARA LOS SERVOS

Código: C
  1. void motores()
  2. {
  3.    if((motor1>=0)&&(motor1<0.2))   motor1=0.2;//minimo valor
  4.     if((motor1<0)&&(motor1>-0.2))   motor1=-0.2;//mínimo valor
  5.    temp=36.48*motor1+366;//máximo hasta
  6.    valor1=temp;
  7.    set_pwm1_duty(valor1);         //a Duty de PWM
  8.  
  9.    if((motor2>=0)&&(motor2<0.2))   motor2=0.2;
  10.     if((motor2<0)&&(motor2>-0.2))   motor2=-0.2;
  11.    
  12.    temp=36.48*motor2+366;
  13.    valor2=temp;
  14.    set_pwm2_duty(valor2);
  15. }

MAIN

Código: CSS
  1. void main()
  2. {
  3.  set_tris_b(0x03);
  4.  lcd_init();
  5.  enable_interrupts(int_rda);
  6.  enable_interrupts(global);
  7.  setup_timer_1(T1_INTERNAL| T1_DIV_BY_1);
  8.  setup_timer_2(T2_DIV_BY_16,255,1);
  9.  setup_ccp1(CCP_PWM);      
  10.  setup_ccp2(CCP_PWM);
  11.  
  12.    set_pwm1_duty(0);
  13.    set_pwm2_duty(0);
  14.  i=0;
  15.    while(true)
  16.    {
  17.    m=m+1;
  18.    rx_asm();
  19.       if(ini_f==10000 && fin_f==-10000)
  20.       {
  21.       bit_32a=make32(dat[4],dat[5],dat[6],dat[7]); //el arreglo de cuatro bytes
  22.       bit_32b=make32(dat[8],dat[9],dat[10],dat[11]); //lo paso a entero de 32bits
  23.       motor1=f_IEEEtoPIC(bit_32a);
  24.       motor2=f_IEEEtoPIC(bit_32b);
  25.       printf(lcd_putc "\f %f %f "motor1,motor2);
  26.       delay_ms(500);
  27.       }
  28.    srf_1=f_PICtoIEEE(med11);
  29.    srf_2=f_PICtoIEEE(med22);
  30.    printf(lcd_putc "\f %f \n %f  %u "med11,med22,m);
  31.    send_asm();
  32.    delay_ms(500);
  33.    motores();
  34.    sensor1();//sensor1 es el que esta conectado a PB0, se activa con PB6
  35.    sensor2();//sensor2 es el que esta conectado a PB1, se activa con PB7
  36.    }
  37. }

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: sensores SRF05 y servomotores
« Respuesta #1 en: 02 de Diciembre de 2010, 18:53:30 »
Has usado prioridades? Y... Que PIC usas?


Desconectado hectdiaf

  • PIC10
  • *
  • Mensajes: 18
Re: sensores SRF05 y servomotores
« Respuesta #2 en: 07 de Diciembre de 2010, 22:26:39 »
el micro es pic16f877A y que interrupcion deberia tener prioridad frente a las otras

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: sensores SRF05 y servomotores
« Respuesta #3 en: 08 de Diciembre de 2010, 03:17:20 »
Veo que activas las interrupciones pero luego en el código no las veo asignadas.
Tampoco veo la parte de inicialización del micro, imprescindible para saber a qué velocidad oscila.
Si puedes pega el código entero para que no queden dudas y podamos echarte una mano.


 

anything