Autor Tema: Problema delay  (Leído 3075 veces)

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

Desconectado antoniojdobarro

  • PIC12
  • **
  • Mensajes: 84
Problema delay
« en: 13 de Febrero de 2011, 16:48:55 »


void retroceso (void) {                     /
output_high (avance_derecha);
output_high (avance_izquierda);
output_low (retroceso_derecha);
output_low (retroceso_izquierda);}


void avance (void) {               
output_high (retroceso_derecha);
output_high (retroceso_izquierda);
output_low (avance_derecha);
output_low (avance_izquierda);
}


void rota_derecha (void) {           
output_high (avance_derecha);
output_high (retroceso_izquierda);
output_low (avance_izquierda);
output_low (retroceso_derecha);
delay_ms(15);
output_high (avance_izquierda);
output_high (retroceso_derecha);
delay_ms(15);
output_low (avance_izquierda);
output_low (retroceso_derecha);

}

void main(void) {
int8 x;
x=0;

do{
      switch(getchar()){
     
      case 'q':
      giro_izquierda();
      break;

      case 'w':                       
      avance();
      break;
               
      case 'e':
      giro_derecha();
      break;
     
     
      case 'z':
      retrocede_izquierda();
      break;
     
     
      case 'x':
      retroceso();
      break;
     
     
      case 'c':
      retrocede_derecha();
      break;
     
     
      case 'a':
      rota_izquierda();
      break;
   
     
      case 'd':
      rota_derecha();
      break;
     
      case 'p':
      output_high(led);     
      break;
     
      case 'o':
      output_low(led);     
      break;
     
     
      case 's':
      detencion();
      break;
         
     
      }
   
}

while (x<10);
}




El problema viene con las rutinas que tienen delay ya que si cambio de una a otra rápido se me queda el microchip bloqueado.

El pic está conectado al pc por COM.

Alguien tiene alguna idea de lo que puede pasar?

Desconectado korpaztk

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 202
Re: Problema delay
« Respuesta #1 en: 13 de Febrero de 2011, 18:55:31 »
no entiendo a que te refieres con los problema de los delay... es la primera vez que escucho que un chip se bloque por eso jeje...  :shock: explica un poco mas, yo no veo mucho problema en tu codigo, aunque yo en las subrutinas pondria pequeños delay en (us) entre una instruccion y otra (por costumbre nada mas)... :)
Korpaz.
Técnico Electronico.

El Papel Es Mi Mejor Psicologo

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: Problema delay
« Respuesta #2 en: 13 de Febrero de 2011, 19:07:09 »
Yo emplearía un timer ya que si usas el puerto serie su interrupción te puede falsear el tiempo del delay, si estas en un delay y se va a la interrupción del puerto serie hasta que no termine  ese codigo no terminara de hacer el delay
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado antoniojdobarro

  • PIC12
  • **
  • Mensajes: 84
Re: Problema delay
« Respuesta #3 en: 13 de Febrero de 2011, 19:08:08 »
Bien, en las rutinas avance y retroceso puedo cambiarlas tan rápido y tantas veces como quiera avance-retroceso-avance-....

Pero en cuanto hago lo mismo con rota_derecha-rota_izquierda-rota_derecha pues se bloquea, es como si antes de que terminase la subrutina y la mando otra instrucción se quedase pillado.

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: Problema delay
« Respuesta #4 en: 13 de Febrero de 2011, 19:29:42 »
Bien, en las rutinas avance y retroceso puedo cambiarlas tan rápido y tantas veces como quiera avance-retroceso-avance-....

Pero en cuanto hago lo mismo con rota_derecha-rota_izquierda-rota_derecha pues se bloquea, es como si antes de que terminase la subrutina y la mando otra instrucción

 se quedase pillado.

Que electrónica usas? Puede ser que estés haciendo algún tipo de corto? Lo estas simulando con leds, o de verdad, ayudaría que enseñases algún esquema ya que hay un momento después del delay que pones a high el retroceso y el avance a la vez no se si eso te puede probocar un corto y que el micro se reinicie
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado antoniojdobarro

  • PIC12
  • **
  • Mensajes: 84
Re: Problema delay
« Respuesta #5 en: 14 de Febrero de 2011, 07:04:12 »


No se que ocurre con los delays, si los quito bien, de lo contrario si utilizo varias veces repetidamente esas órdenes se bloquea.

Desconectado korpaztk

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 202
Re: Problema delay
« Respuesta #6 en: 14 de Febrero de 2011, 10:10:27 »
hay posibilidad de que pegues el codigo completo, o que subas el codigo con proteus para que lo podamos ver, y capaz que corregir de esa forma??
Korpaz.
Técnico Electronico.

El Papel Es Mi Mejor Psicologo

Desconectado antoniojdobarro

  • PIC12
  • **
  • Mensajes: 84
Re: Problema delay
« Respuesta #7 en: 14 de Febrero de 2011, 13:05:25 »
Sustituyo el RS232 por una consola, ya que el fallo sigue dándolo igual.

Es un cursor QWE--AD--ZXC (S- Detención).

El problema viene cuando pulso rápido diagonales ya que tienen delays QE o QC o ZC o ZE, se queda bloqueado mientras no termina alguna subrutina con delays.

Desconectado korpaztk

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 202
Re: Problema delay
« Respuesta #8 en: 14 de Febrero de 2011, 14:41:12 »
porque en una misma sub rutina pones por ej:void rota_derecha (void) {             //El tanque rota derecha
output_high (avance_derecha);
output_high (retroceso_izquierda);
output_low (avance_izquierda);                        (en estado bajo)
output_low (retroceso_derecha);
delay_ms(50);
output_high (avance_izquierda);                       (en estado alto)
output_high (retroceso_derecha);
delay_ms(50);
output_low (avance_izquierda);                        (y de nuevo en estado bajo)
output_low (retroceso_derecha);

}

es por algun inconveniente que hace el motor o que?, porque lo veo medio innecesario, para mi que dejaria solo como estado bajo, pero bueno si tiene algun porque y me lo podrias explicar te lo agradeceria =)

adjunto la modificacion que hice yo...
« Última modificación: 14 de Febrero de 2011, 14:47:31 por korpaztk »
Korpaz.
Técnico Electronico.

El Papel Es Mi Mejor Psicologo

Desconectado antoniojdobarro

  • PIC12
  • **
  • Mensajes: 84
Re: Problema delay
« Respuesta #9 en: 14 de Febrero de 2011, 15:32:31 »
Bien, pasa primero que en este caso output_high se comporta como apagado debido a varias configuraciones que no vienen al caso.

La historia del low-high-low es que para que el tanque se desplace a la derecha al avanzar, realmente es como si la rueda derecha frenase-no frenase-frenase-no frenase, para no tener un todo uno. La rueda derecha es enciende-apaga-enciende y de ahí viene el problema con los delay, no lo entiendo muy bien, ya que si durante esa llamada a la subrutina el micro recibe otra orden, finiquito, se queda como esta y no reacciona.

Desconectado korpaztk

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 202
Re: Problema delay
« Respuesta #10 en: 14 de Febrero de 2011, 15:43:47 »
los delay de cuanto tienen que ser especificamente????
Korpaz.
Técnico Electronico.

El Papel Es Mi Mejor Psicologo

Desconectado antoniojdobarro

  • PIC12
  • **
  • Mensajes: 84
Re: Problema delay
« Respuesta #11 en: 14 de Febrero de 2011, 16:12:05 »
En principio no lo se, los delay los pongo para no tener que girar todo o nada mientras avanzo.

Al principio cuando lo tenía directo con cable y pulsadores a las entradas perfecto.

Lo solucioné controlando cada rueda por separado y listo, sin delays, pero ahora me intriga eso de por que leches se queda clavado en una posición y no sale de su bucle.