TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Miquel_S en 27 de Abril de 2009, 17:56:31

Título: Centrado de servos
Publicado por: Miquel_S en 27 de Abril de 2009, 17:56:31
Hola a todos dos preguntitas:
1º ¿Se pueden centrar todos los servos a la vez ?
2º Lo estoy simulando en proteus y por el pin RA4 no tengo señal ¿tiene algo de especial la configuracion de dicho pin?


#include <16F873A.h>
#device *=16                                   //pic a utilizar
#fuses HS,NOWDT,NOPROTECT,NOPUT,BROWNOUT      //ordenes para el programador
#use delay (clock=20000000)                  //Fosc=20Mhz
#use standard_io(A)                         //Puerto A como salida

 ///PROGRAMA
       
   void Centra_1(int Repeticiones)
{
   int Bucle;
   for(Bucle=0;Bucle<=Repeticiones;++Bucle)
   {
   output_high(pin_A0);
   delay_us(1500);
   output_low(pin_A0);
   delay_ms(20);
   }
}
   void Centra_2(int Repeticiones)
{
   int Bucle;
   for(Bucle=0;Bucle<=Repeticiones;++Bucle)
   {
   output_high(pin_A1);
   delay_us(1500);
   output_low(pin_A1);
   delay_ms(20);
   }
}
   void Centra_3(int Repeticiones)
{
   int Bucle;
   for(Bucle=0;Bucle<=Repeticiones;++Bucle)
   {
   output_high(pin_A2);
   delay_us(1500);
   output_low(pin_A2);
   delay_ms(20);
   }
}   
   void Centra_4(int Repeticiones)
{
   int Bucle;
   for(Bucle=0;Bucle<=Repeticiones;++Bucle)
   {
   output_high(pin_A3);
   delay_us(1500);
   output_low(pin_A3);
   delay_ms(20);
   }
}
   void Centra_5(int Repeticiones)
{
   int Bucle;
   for(Bucle=0;Bucle<=Repeticiones;++Bucle)
   {
   output_high(pin_A4);
   delay_us(1500);
   output_low(pin_A4);
   delay_ms(20);
   }
}
    void Centra_6(int Repeticiones)
{
   int Bucle;
   for(Bucle=0;Bucle<=Repeticiones;++Bucle)
   {
   output_high(pin_A5);
   delay_us(1500);
   output_low(pin_A5);
   delay_ms(20);
   }
}
   void main()
{
 
   output_a(0x00);
   set_tris_a(0x85);
   
   Centra_1(25);     //Llamamos a la funcion y generamos 25 pulsos.
   Centra_2(25);     //Llamamos a la funcion y generamos 25 pulsos.
   Centra_3(25);     //Llamamos a la funcion y generamos 25 pulsos.
   Centra_4(25);     //Llamamos a la funcion y generamos 25 pulsos.
   Centra_5(25);     //Llamamos a la funcion y generamos 25 pulsos.
   Centra_6(25);     //Llamamos a la funcion y generamos 25 pulsos.
 
   while(1);         //Bucle infinito.
}   

Gracias.
Título: Re: Centrado de servos
Publicado por: Suky en 27 de Abril de 2009, 18:24:46
Citar
2º Lo estoy simulando en proteus y por el pin RA4 no tengo señal ¿tiene algo de especial la configuracion de dicho pin?

RA4/TOCKI cuando es salida se comporta como colecto abierto, por lo tanto debes poner una resistencia Pull-up a Vdd. Cuando se configura como entrada, funciona como disparador Schmitt Trigger por lo que puede reconocer señales con un poco de distorsión.

Agrega ademas al main la configuración del conversor analógico, ósea todos los pines como entradas/salidas digitales.

Código: C
  1. setup_adc_ports(NO_ANALOGS);
  2. setup_adc(ADC_OFF);


Y servos no he manejado, así que no puedo ayudarte...
Título: Re: Centrado de servos
Publicado por: Miquel_S en 28 de Abril de 2009, 04:40:35
Muchas gracias de nuevo Suky, lo del pin A4 me habia pasado por alto, tienes razon cuando es salida se comporta como colector abierto, para lo de los servos esperare un poco a ver si tengo respuesta.  :mrgreen:
Título: Re: Centrado de servos
Publicado por: pocher en 29 de Abril de 2009, 05:29:16
A ver si me acuerdo, si meto la pata avisar.

- No hace falta definir las entradas como digitales, el CCS por omisión ya las toma como digitales.

- Respecto a si se pueden centrar todos los servos a la vez, ya lo has hecho, ¿no?, lo único que hay que mantener el pwm encerrandolo en un while.

Un saludo