Controlando un servo con PWM, PICmicro y C

Jurrr, y buscando videos mios en youtube me encuentro con este otro vídeo que habia olvidado, controlando un servo (trucado de ahi los giros de 360 grados) con un microcontrolador PIC programado en C, compilado con CSS.

//***********************************************************************************
//
//       Programa. Generador pulsos PWM
//       Descripción. Generador de pulsos PWM para
//       controlar un servo motor. Cristal 4Mhz. El servo gira a derecha si PIN_A0=0 y PIN_A1 =1
//       y a izquierdas si PIN_A0=1 y PIN_A1 =0 en ambos casos con resolucion 12.96. Si no se
//       cumplen estas condiciones el servo permanece en posición STOP
//       Autor. N4v4jo/Atsea
//       Fecha. 05/04/06
//
//************************************************************************************

#include <16F877A.h>
#define SERVO PIN_C2
#use delay(clock=4000000)

void MoveServo (int Direction);

/*—————— Main Program ——————–*/

void main(void)
{
while (1)
{
if ((input(PIN_A0)==1) && (input(PIN_A1)==0))    //if pin RA0=1 and RA1=0 turn left
MoveServo(1);

if ((input(PIN_A0)==0) && (input(PIN_A1)==1))    //if pin RA0=1 and RA1=1 turn right
MoveServo(3);

if ((input(PIN_A0)==0) && (input(PIN_A1)==0))    //if pin RA0=0 and RA1=0 stop
MoveServo(2);
}
}

/*——————– FUNCTIONS ———————*/

void MoveServo (int Direction)    // values for Direction 1 to 3
{
int i;

if (Direction == 1) // move to the left
{
// generate a pwm with period of 20ms and a pulse with 1ms
for (i = 0; i < 50; i++)
{
output_high (SERVO);
delay_ms (1);
output_low (SERVO);
delay_ms (19);
}
}

if (Direction == 2) // move to the center
{
// generate a pwm with period of 20ms and a pulse with 1,5ms
for (i = 0; i < 50; i++)
{
output_high (SERVO);
delay_ms (1);
delay_us (500); // note this is microseconds

output_low (SERVO);
delay_ms (18);
delay_us (500);
}
}

if (Direction == 3) // move to the right
{
// generate a pwm with period of 20ms and a pulse with 2ms
for (i = 0; i < 50; i++)
{
output_high (SERVO);
delay_ms (2);

output_low (SERVO);
delay_ms (18);
}
}

return;
}

… y lo mismo con Arduino en cuatro líneas de código… bendito Arduino!.

7 comentarios to “Controlando un servo con PWM, PICmicro y C”

  1. It’s amazing in support of me to have a site,
    which is good in support of my know-how.
    thanks admin

  2. Your mode of explaining all in this paragraph is truly pleasant, every one be able
    to effortlessly be aware of it, Thanks a lot.

  3. I like the helpful info you provide in your articles.
    I’ll bookmark your blog and check again here regularly. I’m quite certain I will learn lots of
    new stuff right here! Good luck for the next!

  4. This article is really a fastidious one it helps new internet visitors, who are wishing
    for blogging.

  5. Hi, every time i used to check website posts here early in the daylight, because i love to learn more and more.

  6. Hello, i believe that i saw you visited my web site thus i got here
    to return the want?.I am attempting to in finding things to improve my site!

    I assume its ok to make use of some of your ideas!
    !

  7. You’re so cool! I do not believe I have read through anything like this before. So great to discover someone with a few unique thoughts on this subject. Really.. thank you for starting this up. This website is one thing that is required on the internet, someone with a bit of originality!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: