Autor Tema: xbee maxstream con pic 18f45k20  (Leído 5048 veces)

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

Desconectado fabianjsm

  • PIC18
  • ****
  • Mensajes: 255
    • fabianjsm is on twitter
Re: xbee maxstream con pic 18f45k20
« Respuesta #15 en: 12 de Diciembre de 2011, 10:14:43 »
Supongo que desaparecieron los corchetes porque 'codigo != clave' no es la forma de comparar cadenas  :oops: Utiliza GeSHi para insertar código.
Si todo ese código  esta dentro de la rutina que atiende la interrupción, te pierdes datos mientras se procesa el código, printf por ejemplo consume mucho recurso.
El código de wannaky después de leer el byte lo señala con un flag. Al detectar el flag lo guardas rápidamente y después lo procesas.
Con la ISR del codigo de wannaky algo como esto funciona en tu main:
Código: C
  1. for(;;)
  2.     if(flag_rf && dato_rx == 'x') {
  3.         flag_rf=0;
  4.         printf("ok");
  5.     }
@fabianjsm is on twitter

Desconectado wannaky

  • PIC12
  • **
  • Mensajes: 92
Re: xbee maxstream con pic 18f45k20
« Respuesta #16 en: 12 de Diciembre de 2011, 10:35:15 »
NoSepComo te recomiendo que dentro de la isr hagas las menos tareas posibles, ya que si pones delay_ms, printf, etc... todo esto hace que el micro esté mucho tiempo dentro de la interrupción, y piensa que mientras estés en la interrupción, si te llega otro carácter, no te vas a enterar.

Te recomiendo que hagas algo así...

Código: [Seleccionar]
void RDA_isr()
{
   if (kbhit())
   {
      dato_rx=fgetc();
      if(dato_rx=='Z')
      {
         bandera=1;
         cadena_rx[incremento_cadena]=dato_rx;
         incremento_cadena=0;
      }
      else
      {
         cadena_rx[incremento_cadena]=dato_rx;
         incremento_cadena++;
      }
   }
}

este código almacena en "cadena_rx" todo lo que llega por el serie hasta que recibe una 'Z' que yo he asignado como carácter de final de trama. Una vez ha recibido la 'Z' pone bandera=1, y es en tu main donde has de comparar las cadenas y hacer todo lo que tengas que hacer, pero no dentro de la interrupción.

dentro de tu main, has de tener algo así...

Código: [Seleccionar]

while(TRUE)
{
     if(bandera==1)
     {
          bandera=0;
          incremento_cadena=0;
     
          (...) aquí comparas tus cadenas de caracteres y lo que tengas que hacer
     }
}



Saludos...

Desconectado NoSepComo

  • PIC18
  • ****
  • Mensajes: 305
Re: xbee maxstream con pic 18f45k20
« Respuesta #17 en: 12 de Diciembre de 2011, 12:54:22 »
Gracias por vuestras respuestas, los corchetes se perdieron efectivamente.
Probaré a hacerlo fuera de la rutina de interrupción a ver que pasa y luego os lo cuento.
Un saludo.

Desconectado NoSepComo

  • PIC18
  • ****
  • Mensajes: 305
Re: xbee maxstream con pic 18f45k20
« Respuesta #18 en: 12 de Diciembre de 2011, 13:20:25 »
Hola otra vez, he hecho el código fuera de la rutina, en el bucle infinito y ahora funciona muy bien.
Muchas gracias por vuestra ayuda :).
Ahora intentaré mandarle comandos ya como ultima fase a ver que hace.