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

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

Desconectado NoSepComo

  • PIC18
  • ****
  • Mensajes: 305
xbee maxstream con pic 18f45k20
« en: 24 de Noviembre de 2011, 10:01:47 »
Hola a todos,
estoy tratando de hacer una comunicación sencilla, por un lado tengo un pic 18f45k20 conectado a un xbee pro (simple, Dout con RX y din con tx) funcionando a 2400 baudios y lo que quiero es comunicarlo con otro modulo xbee conectado al PC mediante una placa de desarrollo de las que te da digi cunado adquieres el kit. Lo que intento es que cuando pulse un interruptor mande un simple "hola" al PC y lo recoja y verlo en el programa que da digi (X-CTU). El caso es que es imposible, no reacciona cunado envío datos y cuando recibe alguno se satura (creo que genera interrupciones de UART constantemente). Los módulos están funcionando en modo transparente y punto a punto.
Mi pregunta es si alguien a desarrollado con estos módulos y pic algún programa, yo desarrollo en CCS pero me valdrían ejemplos en cualquier compilador para comprender un poco como se hace correctamente por que estoy desesperando.
Gracias por vuestra ayuda.

Desconectado NoSepComo

  • PIC18
  • ****
  • Mensajes: 305
Re: xbee maxstream con pic 18f45k20
« Respuesta #1 en: 25 de Noviembre de 2011, 10:50:27 »
Hola otra vez, os comento mis mini-avances, he conseguido que se hablen, es decir que dos módulos se comuniquen, el problema que tenía y no veía es que uno estaba en modo API y el otro no, por eso no podía hacer nada.
Ahora tengo muchos otros problemas, como por ejemplo, que no se entiende lo que mando a uno en el otro, es decir, yo mando una h desde un módulo conectado al pic, y en el PC con la aplicación X_CTU se ve: "..", además cuandoenvío desde el PC algo al módulo del PIC, es como que se satura, se queda bloqueado, yo creo que es por que no para de recibir interrupciones de la UART, porque si comento el código del RDA sigue funcionando.
Alguien me podría echar una mano o pasar algún ejemplo de código.
Gracias de antemano.

Desconectado fabianjsm

  • PIC18
  • ****
  • Mensajes: 255
    • fabianjsm is on twitter
Re: xbee maxstream con pic 18f45k20
« Respuesta #2 en: 27 de Noviembre de 2011, 01:52:48 »
Si envías un dato y recibes dos, tal vez los puertos series estén configurados a velocidades distintas.
porque si comento el código del RDA sigue funcionando.
Viendo tu código, alguno con más experiencia podría percatarse del error.
@fabianjsm is on twitter

Desconectado cristian_elect

  • PIC18
  • ****
  • Mensajes: 453
Re: xbee maxstream con pic 18f45k20
« Respuesta #3 en: 27 de Noviembre de 2011, 02:38:59 »
Yo con los xbee no tuve problemas, primero se prueba la comunicación de pic a PC con cable si funciona bien hay pruebo con los xbee.
Con un diagrama del circuito puede puede ver mejor el problema.

Desconectado NoSepComo

  • PIC18
  • ****
  • Mensajes: 305
Re: xbee maxstream con pic 18f45k20
« Respuesta #4 en: 28 de Noviembre de 2011, 05:56:50 »
Hola, como te dije, las pruebas ahora las estoy haciendo entre un módulo xbee mas un PIC y el PC con otro xbee y el entrenador que incluye el kit de digi.
En el PC, mediante el software X-CTU, envío un paquete al módulo enganchado al PIC con una palabra y ya. El pic en la rutina de la RDA, simplemente recoge lo que entra con un gets(recibido) (recibido es un vector de chars), y eso es lo que lo deja colgado al PIC.
Por que cuando hago la comunicación en otro sentido, del PIC al PC, va bie, no se satura, utilizo un puts("hola"), lo único que lo que le llega al PC son cosas muy raras, pero imagino que será la codificación o algo de eso.
Por eso si alguien me pudiese facilitar algún ejemplo de código le estaría muy agradecido.

Desconectado wannaky

  • PIC12
  • **
  • Mensajes: 92
Re: xbee maxstream con pic 18f45k20
« Respuesta #5 en: 28 de Noviembre de 2011, 08:44:11 »
Hola NoSepComo, a mi me pasó lo mismo que a ti... resulta que de un día para otro me dejó de funcionar la comunicación... y probando los módulos resulta que solo recibía ".." tuve que cambiar los dos módulos porque estaban estropeados, yo creo que fue por culpa de una descarga que le di yo de estática, ya que los tenia por encima de la mesa del taller y no los cuidé mucho, fue comprar unos nuevos, ponerlos, y listo... funcionando.

Prueba de leer en la rutina del RDA con el fgetc(); en lugar de con el gets();, ya que el gets() creo que espera un 0 de final de trama y creo que el X-CTU no lo envía, y por eso se te queda colgado. Ten en cuenta que el fgetc() solo recibe un caracter...

Si no te funciona, prueba de intercambiarlos entre ellos, por lo que dices uno emite y recibe bien y el otro no...

Has probado de leer la configuración de los módulos con el X-CTU en la pestaña "Modem Configuration"?!?!?! prueba de leer la configuración y luego de escribirla...

Para que puedas descartar si los módulos están estropeados, a mi el X-CTU ni me los detectaba cuando le daba al botón "Test/Query"... si te detecta la versión de firmware del módulo y todo lo demás... seguro que funciona ok...

ya dirás que tal va...

Saludos...

PD: si ves que se continua quedando colgado en la rutina del RDA, te busco el código que utilicé y te lo subo...

Desconectado NoSepComo

  • PIC18
  • ****
  • Mensajes: 305
Re: xbee maxstream con pic 18f45k20
« Respuesta #6 en: 28 de Noviembre de 2011, 09:38:49 »
Hola de nuevo,
wannaky gracias por tu respuesta, he probado con el getc y almacenarlo en un entero y efectivamente ahora no se me cuelga, pero recibe cosas raras, porque hago un eco de lo que llega y es algo raro. Después, en cuanto a la transmisión , si pongo un putc o un puts llega siempre el punto que mencionas. Estoy desconcertado, voy a probar a intercambiar módulos a ver que sucede o a usar otros.
Gracias por vuestra ayuda, si alguien me pudiese adjuntar un codigo que funcione estaría bien.

Desconectado NoSepComo

  • PIC18
  • ****
  • Mensajes: 305
Re: xbee maxstream con pic 18f45k20
« Respuesta #7 en: 28 de Noviembre de 2011, 10:06:25 »
Hola otra vez, sigo frustrado con esto, a ver, he cambiado los módulos de posición y sigue en lo mismo, e igual si uso otros. En la rutina de recepción serie, simplemente con un getc() recojo lo que me mandan, lo almaceno en un char y lo reenvío con un putc, y para este caso, si que se reenvía un caracter aunque no coincide en muchos casos con lo que llega, pero lo raro es que si en el main, yo envío un putc del caracter que sea, solo llegan "." al xctu. No entiendo nada.
Gracias por vuestra ayuda por adelantado.

Desconectado NoSepComo

  • PIC18
  • ****
  • Mensajes: 305
Re: xbee maxstream con pic 18f45k20
« Respuesta #8 en: 29 de Noviembre de 2011, 09:14:00 »
Hola a todos, sigo con mi desesperación con este tema, os comento las experiencias que voy teniendo a ver si a alguien le resultan familiares o me puede echar una mano.
He probado en la rutina de interrupción a recibir con un getc() un simple caracter y retransmitirlo al xbee (con un putc()) que va con el PC, y en la mayoría de los caracteres el eco que retransmito es otro caracter distinto, pero no varía.
Sin embargo cuando yo utilizo el putc dentro del main para mandar un caracter, lo único que se recibe en el xctu es un "." o en hexadecimal "FF".
Asique no entiendo nada.
He probado el código entre dos PICs conectados en serie y no hay problema alguno con las comunicaciones.
Agradezco cualquier ayuda, un saludo.

Desconectado wannaky

  • PIC12
  • **
  • Mensajes: 92
Re: xbee maxstream con pic 18f45k20
« Respuesta #9 en: 29 de Noviembre de 2011, 11:55:07 »
Hola NoSepComo, esta tarde pruebo de hacer el eco con el pic hacia el xbee, que me han operado de la rodilla y estoy algo distanciado del taller...  :5] :5] :5]
pero de todos modos prueba de cambiar el putc() por el printf()... pero que ya te digo que yo lo hice y no me resultó ningún problema de los que te da a ti...

saludos...

Desconectado wannaky

  • PIC12
  • **
  • Mensajes: 92
Re: xbee maxstream con pic 18f45k20
« Respuesta #10 en: 29 de Noviembre de 2011, 17:52:07 »
Hola NoSepComo,

Aquí tienes un código que acabo de probar y funciona bien... el pic hace un eco de lo que escribes en el terminal del X-CTU y te vuelve a salir escrito en el terminal

Código: [Seleccionar]
#include <16f877.h>
#fuses HS,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP,NOCPD,NOWRT
#use delay(clock=3686400)

#use RS232 (baud=4800, bits=8, parity=N, xmit=PIN_C6, rcv=PIN_C7)

int1 flag_rf;
char dato_rx;

#int_RDA
void RDA_isr()
{
   dato_rx=fgetc();
   flag_rf=1;
}

void main()
{
   delay_ms(50);
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   flag_rf=0;

   while(true)
   {
      if(flag_rf==1)
      {
         flag_rf=0;
         printf("%c",dato_rx);
      }     
   }
}

Que oscilador estas utilizando?!?!?! te pregunto esto porque cuando estaba haciendo el código este he recordado que yo tuve problemas con la velocidad de comunicación cuando transmitía a 9600bps por utilizar un oscilador de 4MHz, miré el datasheet y ponía que con ese clock la tasa de error a 9600bps era cercana al 7%, lo puse a 4800bps y con un oscilador de 3.6864MHz (el fabricante te da una tasa de error del 0%) y todo fue de maravilla :-/ :-/ :-/

Prueba y ya nos dirás...

Saludos...

Desconectado NoSepComo

  • PIC18
  • ****
  • Mensajes: 305
Re: xbee maxstream con pic 18f45k20
« Respuesta #11 en: 30 de Noviembre de 2011, 08:39:46 »
Hola wannaky, muchas gracias por tu ayuda, con el fgetc() me funciona mejor, no se porque, que con el getc(), ahora ya recibo y envío cosas coherentes. Tambien tendrá que ver que ahora trabajo a 2400 en vez de a 9600.
Ahora me falta pulir alguna cosilla, porque estoy intentando comparar los caracteres que recojo con un vector de chars pero aun no he conseguido hacerlo bien, de todas formas ya estoy mucho más tranquilo, gracias por vuestra ayuda, si me atsco otra vez ya volveré por aquí a dar la coña ;).
Gracias.

Desconectado Leonid@s

  • PIC10
  • *
  • Mensajes: 2
Re: xbee maxstream con pic 18f45k20
« Respuesta #12 en: 09 de Diciembre de 2011, 13:33:51 »
Nosepcomo sera que porfavor puedes subir tu codigo para que todos podamos aprender de el?

Gracias  :lol:

Desconectado wannaky

  • PIC12
  • **
  • Mensajes: 92
Re: xbee maxstream con pic 18f45k20
« Respuesta #13 en: 10 de Diciembre de 2011, 09:17:25 »
Leonid@s, el código de NoSepComo lo único que hacía es enviar un carácter vía seria por el XBee, y el PIC hacía un eco y retornaba el mismo carácter.

este es el código que hace eso, solo sirve para verificar que hay comunicación entre los módulos y es correcta...
Código: [Seleccionar]
#include <16f877.h>
#fuses HS,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP,NOCPD,NOWRT
#use delay(clock=3686400)

#use RS232 (baud=4800, bits=8, parity=N, xmit=PIN_C6, rcv=PIN_C7)

int1 flag_rf;
char dato_rx;

#int_RDA
void RDA_isr()
{
   dato_rx=fgetc();
   flag_rf=1;
}

void main()
{
   delay_ms(50);
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   flag_rf=0;

   while(true)
   {
      if(flag_rf==1)
      {
         flag_rf=0;
         printf("%c",dato_rx);
      }     
   }
}


que necesitas tú exactamente?!?!?!

Saludos...

Desconectado NoSepComo

  • PIC18
  • ****
  • Mensajes: 305
Re: xbee maxstream con pic 18f45k20
« Respuesta #14 en: 12 de Diciembre de 2011, 09:43:31 »
Hola. Tengo un problemmilla al comunicarme con el x-ctu, yo estoy haciendo un programita que recoja lo que mando, entonces voy llenando un buffer de chars, caundo ese buffer llega a tres posiciones rellenas lo comparo con otra palabra que yo tengo almacenada en otro buffer para ver si coincide, sin embargo no hace nada, y es que creo que manda mas caracteres el xctu cuando utilizas el send, pongo el código para que lo veáis a ver si se entiende mejor:
dentro de la isr:
    if(kbhit())
    {
      recibido = fgetc();
      delay_ms(20);
                i++;
    }
        if(i >= 2)
   {
      bandera = 1;
      for(i=0;i<3;i++)
      {
         if(recibido != clave)
         {
            bandera = 0;
         }
      }
      i = 0;
      if(bandera == 1)
      {
         printf("ok");
      }
      else
      {
         printf("no");
      }
      limpia();
   }


 

anything