Autor Tema: servomotor  (Leído 1711 veces)

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

Desconectado cristianpalta1

  • PIC10
  • *
  • Mensajes: 5
servomotor
« en: 12 de Marzo de 2016, 18:24:56 »
Muy buenas tardes a todos, ando iniciando mi aprendizaje en micro controladores en este caso ando haciendo un brazo robotico de 4 ejes o 3 ejes aun no lo defino bien porque a medida que vaya logrando programar un servo seguire con los demas. El control de los servo se hara mediante una aplicacion en app inventor2 que sera controlada por la voz. En este caso comenzare programando solo la base y su desplazamiento sera de 0,90,180 grados como si fuera de izquierda, centro, derecha por asi decirlo. En el codigo ando simulando botones como el pulso de la señal que debo enviar desde el celular y recibirlo en el modulo HC-06. Ajunto codigos, gracias por cualquier ayuda
Envia:
Código: CSS
  1. int8 x;
  2.  
  3. void main()
  4. {
  5.  set_tris_d(0xFF);
  6.  
  7.  
  8.  while(TRUE)
  9.  {
  10.   if(input(pin_d0) == 1)
  11.   {
  12.   x='I';
  13.   }
  14.   putc(x);
  15.   if(input(pin_d1) == 1)
  16.   {
  17.   x='D';
  18.   }
  19.   putc(x);
  20.  }
  21. }
Recibe:
Código: CSS
  1. void izquierda ()
  2. {
  3.  for(i=0;i<60;i++)
  4.   {
  5.    output_high(pin_d0);
  6.    delay_us(500);
  7.    output_low(pin_d0);
  8.    delay_ms(20);
  9.   }
  10. }
  11. void derecha ()
  12. {
  13.  for(i=0;i<60;i++)
  14.   {
  15.    output_high(pin_d0);
  16.    delay_us(2000);
  17.    output_low(pin_d0);
  18.    delay_ms(20);
  19.   }
  20. }
  21.  
  22. void main()
  23. {
  24.  
  25.  
  26.  while(TRUE)
  27.  {
  28.   dato = getc();
  29.   switch(dato)
  30.   {
  31.    case 'I':
  32.    izquierda();
  33.    break;
  34.    case 'D':
  35.    derecha();
  36.    break;
  37.   }
  38.  
  39.  }
  40. }

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:servomotor
« Respuesta #1 en: 12 de Marzo de 2016, 19:26:07 »
El problema que tu codigo tiene 2 problemas:

1 - Deja de enviar señal al servo si es que no recibe nada desde aplicacion
2 - Si recibe muchas cosas desde la aplicacion tendrias problemas, ya que tendrias un overrrun.

Solucion y queda para que lo investigues:


1 - Usar interrupcion para la recepcion de datos
2 - Usar un timer, o CCP+timer para controlar los servos, hay ejempls en el foro de sobra, lamentablamente no tengo ninguno a mano


 

anything