Entrar
¿Usuario nuevo? Regístrate
microbotica · Microbótica: El nuevo enfoque.
? ¿Ya estás suscrito? Entrar en Yahoo!

Consejos de Yahoo! Grupos

¿Sabías que...?
Puedes determinar el orden de los mensajes. Pulsa el enlace en la columna correspondiente a la fecha. Tus preferencias serán guardadas y no tendrás que introducirlas de nuevo.

Mensajes

  Mensajes Ayuda
Avanzado
Control de servos con PIC   Lista de mensajes  
Responder | Reenviar Mensaje #7657 de 11820 |
Re: [microbotica] Control de servos con PIC

Ok. Muchas gracias Luis.
 
Lo probaré a ver qué tal. Usas el puerto A del PIC. Supongo que con cambiar al puerto C lo tendre listo. Ya te contaré qué tal me ha ido.
 
Un saludo y gracias,
Alberto
----- Original Message -----
From: luis luis
Sent: Wednesday, July 07, 2004 12:33 PM
Subject: Re: [microbotica] Control de servos con PIC

Es mejor usar asm en la rutina para tener menor codigo y mayor control del tiempo
Las he usado en Pic 16F84
 
//****************************************************************************
// las dos rutinas mueven el servo a la posicion con movimiento en
// sentido de las agujas del reloj de 0 a 180
//*****************************************************************************
 
// **************************************
// Rutina que mueve el servo lentamente *
// el valor grados es la posicion a la  *
// que ira el servo entre 0 y 180 *
//***************************************

 void  mueve_servo_lento(grados)
   {     int cero,veces,servo,Pdel0,Pdel1;
         veces=25;
         #asm

         // retarda 20 mseg entre pulso y pulso de control al servo
Bucle10: movlw     40         ; 1 set number of repetitions (B)40
         movwf     PDel0      ; 1 |
PLoop21: movlw     141        ; 1 set number of repetitions (A)141
         movwf     PDel1      ; 1 |
PLoop22: clrwdt               ; 1 clear watchdog
         decfsz    PDel1, 1   ; 1 + (1) is the time over? (A)
         goto      PLoop22    ; 2 no, loop
         decfsz    PDel0,  1  ; 1 + (1) is the time over? (B)
         goto      PLoop21    ; 2 no, loop
PDelL21: goto PDelL22         ; 2 cycles delay
PDelL22: nop              ; 1 cycle delay
 
        bsf    PORTA,0  ; Pone a 1 la salida
   movlw    220   ; pulso minimo de sincronismo del servo, depende del servo que sea
   movwf  cero
Bucle11: nop
   decfsz cero,1
   goto     Bucle11
   movf   grados,0       ; carga grados en w
   movwf  servo      ; carga w en grados_servo
   incf   servo,1   ; suma 1 al valor de grados por problemas de assembler
Bucle12: nop
   nop
   nop
   nop
   nop
   nop
   nop
   decfsz   servo,1   ; si grados_servo ha llegado a cero se salta la siguiente instruccion
         goto     Bucle12
         bcf    PORTA,0       ;pone a 0 la salida
   decfsz   veces,1   ; si veces ha llegado a cero se salta la siguiente instruccion
   goto     Bucle10
         #endasm
         return;
 }
 

//***********************************
// Rutina que mueve el servo rapido *
//***********************************
void  posicionar_servo(grados)
   {     int cero,veces,servo,Pdel0,Pdel1;
         veces=10;
         #asm

         // retarda 20 mseg entre pulso y pulso de control al servo
Bucle10: movlw     40         ; 1 set number of repetitions (B)40
         movwf     PDel0      ; 1 |
PLoop21: movlw     141        ; 1 set number of repetitions (A)141
         movwf     PDel1      ; 1 |
PLoop22: clrwdt               ; 1 clear watchdog
         decfsz    PDel1, 1   ; 1 + (1) is the time over? (A)
         goto      PLoop22    ; 2 no, loop
         decfsz    PDel0,  1  ; 1 + (1) is the time over? (B)
         goto      PLoop21    ; 2 no, loop
PDelL21: goto PDelL22         ; 2 cycles delay
PDelL22: nop              ; 1 cycle delay
       bsf    PORTA,0  ; Pone a 1 la salida
      movlw    220   ; pulso minimo de sincronismo del servo, depende del servo que sea
   movwf  cero
Bucle11: nop
   decfsz cero,1
   goto     Bucle11
    movf   grados,0       ; carga grados en w
   movwf  servo      ; carga w en grados_servo
   incf   servo,1   ; suma 1 al valor de grados por problemas de assembler
Bucle12:    nop
   nop
   nop
   nop
   nop
   nop
   nop
   decfsz   servo,1   ; si grados_servo ha llegado a cero se salta la siguiente instruccion
          goto     Bucle12
         bcf    PORTA,0       ;pone a 0 la salida
   decfsz   veces,1   ; si veces ha llegado a cero se salta la siguiente instruccion
   goto     Bucle10
         #endasm
         return;
 }

Alberto Caballero <kavan@...> wrote:
Gracias Luis. Pues te agradecería que me enviases la rutina que dices. ¿Qué problemas hay al utilizar C? ¿Genera demasiado código? ¿Hay otros problemas?
 
Saludos,
Alberto
----- Original Message -----
From: luis luis
Sent: Wednesday, July 07, 2004 12:26 PM
Subject: Re: [microbotica] Control de servos con PIC

Yo he trabajado con los servos en C y con asm, lo mejor es usar una rutina asm en el programa C. Si quieres te paso la rutina que yo uso y veras como funciona perfectamente. La he usado con servos Hitec en un robot y con un control programable para una valvula de escape de un motor de 2 tiempos de una moto de competicion.
En los dos casos funciono siempre bien.
Pideme la rutina y no tendre problemas en enviartela

Alberto Caballero <kavan@...> wrote:
Buenas. Estoy intentando controlar un servo con la salida PWM de un PIC (16f876A), pero no me salen las cuentas para configurar el timer2. Estoy utilizando C con el compilador CCS, y según la ayuda de los métodos setup_timer_2, set_pwx1_duty, el programa de ejemplo ex_pwm.c y demás, no puedo obtener un ciclo de 20 ms con el timer2 para poder generar la señal de reloj correspondiente.
 
¿Alguien que se haya peleado con ésto me podría echar una mano para ver cómo hay que configurar el timer2?
 
Muchas gracias
 
Alberto



Nuevo Yahoo! Búsquedas




Nuevo Yahoo! Búsquedas



Mié, 7 de Jul, 2004 10:44 am

kavan@...
Enviar mensaje Enviar mensaje

Reenviar Mensaje #7657 de 11820 |
Desplegar mensajes Autor Ordenar por fecha

Buenas. Estoy intentando controlar un servo con la salida PWM de un PIC (16f876A), pero no me salen las cuentas para configurar el timer2. Estoy utilizando C...
Alberto Caballero
kavan@...
Enviar mensaje
7 de Jul, 2004
9:58 am

Yo he trabajado con los servos en C y con asm, lo mejor es usar una rutina asm en el programa C. Si quieres te paso la rutina que yo uso y veras como funciona...
luis luis
mas_19_59
Sin conexión Enviar mensaje
7 de Jul, 2004
10:27 am

Gracias Luis. Pues te agradecería que me enviases la rutina que dices. ¿Qué problemas hay al utilizar C? ¿Genera demasiado código? ¿Hay otros problemas? ...
Alberto Caballero
kavan@...
Enviar mensaje
7 de Jul, 2004
10:29 am

Es mejor usar asm en la rutina para tener menor codigo y mayor control del tiempo Las he usado en Pic 16F84 ...
luis luis
mas_19_59
Sin conexión Enviar mensaje
7 de Jul, 2004
10:33 am

Ok. Muchas gracias Luis. Lo probaré a ver qué tal. Usas el puerto A del PIC. Supongo que con cambiar al puerto C lo tendre listo. Ya te contaré qué tal me...
Alberto Caballero
kavan@...
Enviar mensaje
7 de Jul, 2004
10:43 am

De nada. Si necesitas mas informacion te puedo ayudar en lo que quieras. Las rutinas son algo particulares ya que las hice para un uso muy especifico, pero...
luis luis
mas_19_59
Sin conexión Enviar mensaje
7 de Jul, 2004
11:44 am

Hola, He subido algunos artículos nuevos a www.easybots.com que creo que son interesantes. Como por ejemplo controlar un servo con un pic o la descripción a...
J. A. Casas
ihouses
Sin conexión Enviar mensaje
7 de Jul, 2004
1:24 pm

"J. A. Casas" <ihouses@...> wrote:Hola, He subido algunos artículos nuevos a www.easybots.com que creo que son interesantes. Como por ejemplo controlar...
david gonza
davio32000
Sin conexión Enviar mensaje
10 de Jul, 2004
3:13 am

Ya está disponible la edición de Julio 2004 del Libro Gordo de Sitios de Robótica en Internet. Esta publicación gratuita contiene multitud de links ...
Alejandro Alonso Puig
mundobot
Sin conexión Enviar mensaje
11 de Jul, 2004
12:09 am

Hola Alejandro te felicito por tu libro muy bien organizado. Te he enviado un correo a alejandro.alonso@... contéstame al mió si te ha llegado Un...
Francisco
robotpak
Sin conexión Enviar mensaje
13 de Jul, 2004
4:49 pm

Hola de nuevo Luis. Tengo una pequeña duda sobre tus rutinas para control de servos. En la parte de código en ensamblador utilizas la constante PORTA. ¿Es...
Alberto Caballero
kavan@...
Enviar mensaje
8 de Jul, 2004
1:16 pm

Es una definicion del compilador, se usa una de las salidas del puerto A, puedes usar la que quieras tu solo sustituyendo en el codigo. Puedes repetir la...
luis luis
mas_19_59
Sin conexión Enviar mensaje
8 de Jul, 2004
3:14 pm

Hola de nuevo Luis. He probado el código que me mandaste y me ha compilado. Sigo teniendo una pequeña duda acerca de la constante PORTA. En el compilador que...
Alberto Caballero
kavan@...
Enviar mensaje
9 de Jul, 2004
7:59 am

PORTA es todo el puerto A, como veo que ya lo has resuelto pues correcto. Yo en este caso utilizo la salida A0 porque el puerto B lo uso para otra cosa. ...
luis luis
mas_19_59
Sin conexión Enviar mensaje
9 de Jul, 2004
11:34 am

Bien, acabo de ver un manualillo del ensamblador del PIC y parece que bsf y bcf colocan a '1' o '0' un bit del registro apuntado por el primer parámetro....
Alberto Caballero
kavan@...
Enviar mensaje
9 de Jul, 2004
8:03 am

Exactamente Alberto Caballero <kavan@...> wrote:Bien, acabo de ver un manualillo del ensamblador del PIC y parece que bsf y bcf colocan a '1' o '0' un bit...
luis luis
mas_19_59
Sin conexión Enviar mensaje
9 de Jul, 2004
11:33 am

Hola a todos... En esta pagina teneis muchos ejemplos de codigo ensamblador PIC para el manejo de servos, el codigo viene comentado y documentado. Sus ejemplos...
Tomás C.
airtomasuco
Sin conexión Enviar mensaje
9 de Jul, 2004
12:45 pm
Avanzado

Copyright © 2009 Yahoo! Todos los derechos reservados.
Política de Privacidad Actualizada - Condiciones del servicio - Directrices - Ayuda