Autor Tema: Codigo C control de servomotor (GRADOS) con PIC16F84A  (Leído 14207 veces)

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

Desconectado Kurt Cobain

  • PIC10
  • *
  • Mensajes: 29
Codigo C control de servomotor (GRADOS) con PIC16F84A
« en: 29 de Enero de 2013, 16:11:32 »
Hola a todos, tengo un proyecto el cual con el pic16f84a se tiene que controlar las grados de un servomotor (sg90) a Rb0. Explico: con 2 pulsadores conectados a ra0 y ra1 se tiene que manipular los grados (ya sea un pulsador para mas grados y el otro para menos).

Hice este código que tiene una parte de lo que necesito por que solo tengo un pulsador a ra0, pero no funciona, (no soy muy bueno en esto :( )

# include <16F84A.h>
# use delay(clock=4000000)
# fuses XT,NOWDT
# byte puerto_b=06 
# byte puerto_a=05

int contador=0,estado=1;

 void main() {

set_tris_b(0x00);   
set_tris_a(0x1F); 

puerto_b=0;
 
 if (input(pin_a0)) estado=0;     //Si se pulsa.
 if (estado==0 && (input(pin_a0))) { //Si se pulsa y se libera.
 contador++;
   if (contador>4) contador=1;
   estado=1;
  }
  switch (contador){
    case 1:{output_high(PIN_B0);
           delay_us(1499);     //1.500us (neutral)
           output_low(PIN_B0);
           delay_us(8500);
           break;}
    case 2:{output_high(PIN_B0);
           delay_us (1949);   //1.950us (-45 grados)
           output_low(PIN_B0);
           delay_us(18050);
           break;}
    case 3:{output_high(PIN_B0);
           Delay_us(1049);   //1.050us (+45 grados)
           output_low(PIN_B0);
           Delay_us(18950);
           break;}
    case 4:{output_high(PIN_B0);
           Delay_us(599);    //600us (+90 grados)
           output_low(PIN_B0);
           Delay_us(19400);
           break;}
         
  }
 }


Agradeceré cualquier ayuda.
Saludos

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Codigo C control de servomotor (GRADOS) con PIC16F84A
« Respuesta #1 en: 29 de Enero de 2013, 19:17:40 »
  A simple vista, el ciclo del programa sólo se ejecuta una vez. Tendrías que incorporar un while(TRUE) que encierre todo el código a partir del testeo de la tecla.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado thegame

  • PIC18
  • ****
  • Mensajes: 439
    • Mcu Tronics
Re: Codigo C control de servomotor (GRADOS) con PIC16F84A
« Respuesta #2 en: 29 de Enero de 2013, 19:25:24 »
Yo quitaria las llaves que estas poniendo en los casos,yo utilizo la estructura switch de la siguiente manera los que saben mas me corregiran:

Código: [Seleccionar]
switch(opcion)
{
       case x:
             aqui lo que quieras que haga en este caso
             break;
       case x2:
             aqui lo que quieras que haga en este caso
             break;
       default:
             aqui lo que quieras que haga en el caso default
             break;
}
             

digo...asi me lo enseñaron a mi,aparte de lo que bien dice angelgris,que solo se ejecuta el programa una sola ves
Nunca se deja de aprender

Desconectado Kurt Cobain

  • PIC10
  • *
  • Mensajes: 29
Re: Codigo C control de servomotor (GRADOS) con PIC16F84A
« Respuesta #3 en: 30 de Enero de 2013, 00:28:32 »
Ya modificado el código, en proteus el servomotor va a +117 y el pulsador no responde.
Aquí les dejo adjuntados los archivos

Saludos.

Desconectado thegame

  • PIC18
  • ****
  • Mensajes: 439
    • Mcu Tronics
Re: Codigo C control de servomotor (GRADOS) con PIC16F84A
« Respuesta #4 en: 30 de Enero de 2013, 02:42:38 »
Haber Kurt,prueba este codigo lo modifique un poco,sinceramente tus tiempos de activacion no se como los calculas los deje igual,pero pruebalo y me dices,modifique tambien el archivo de proteus,comentas
Nunca se deja de aprender

Desconectado Kurt Cobain

  • PIC10
  • *
  • Mensajes: 29
Re: Codigo C control de servomotor (GRADOS) con PIC16F84A
« Respuesta #5 en: 01 de Febrero de 2013, 00:44:02 »
Haber Kurt,prueba este codigo lo modifique un poco,sinceramente tus tiempos de activacion no se como los calculas los deje igual,pero pruebalo y me dices,modifique tambien el archivo de proteus,comentas


Hola, gracias por modificarlo, resolvió muchas de mis dudas y errores aunque ahora el problema es posicionar a el servomotor en cualquier grado que quiera con 2 pulsadores (para + y - grados) con el código anterior tengo mas idea de como debe ir conformado, espero lograrlo, agradezco mucho tu ayuda.

De antemano muchas gracias y saludos.

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Codigo C control de servomotor (GRADOS) con PIC16F84A
« Respuesta #6 en: 01 de Febrero de 2013, 09:03:48 »
Código: [Seleccionar]
output_high(PIN_B0);
delay_us (x);   //1.950us (-45 grados)
output_low(PIN_B0);
delay_us(y);

Con poner los valores de los retardos mediante una variable tendria que funcionar.
En otra parte del programa tendrias que hacer los cálculos y variar los valores de "x" e "y" en función de los pulsadores.

Lo que tendrías que hacer es sacar el switch.
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado Kurt Cobain

  • PIC10
  • *
  • Mensajes: 29
Re: Codigo C control de servomotor (GRADOS) con PIC16F84A
« Respuesta #7 en: 02 de Febrero de 2013, 15:05:46 »
Código: [Seleccionar]
output_high(PIN_B0);
delay_us (x);   //1.950us (-45 grados)
output_low(PIN_B0);
delay_us(y);

Con poner los valores de los retardos mediante una variable tendria que funcionar.
En otra parte del programa tendrias que hacer los cálculos y variar los valores de "x" e "y" en función de los pulsadores.

Lo que tendrías que hacer es sacar el switch.

Listo, ahora el programa funciona bien  ((:-)) ahora a seguir con el siguiente proyecto que es el control de un motor a pasos.

Saludos.