Gracias PICmouse por tu rápida respuesta.
El circuito se alimenta en su integridad a 3.3V. En cuanto a configuración, Sí, a 9600, MY=0, DH=0, DL=FFFF, de manera que uno emite y todos escuchan. Los dos módulos están configurados igual. Es como si el buffer Rx del xBee se colapsara con sólo 3 bytes (segun entiendo del manual tiene para 100). Mas datos:
-Circuito con PIC: -Alimentado directamente con un FA a 3.3V (la intención es que funciones con una pila de litio de 3V), -Ahora mismo desconectada la funcion sleep del xBee (después sí, con SM=4), el envio de una trama hacia el PC, es perfecta(p.e. "inicializando". Se recibe perfecta en el PC, acabando la trama con 0x0D y 0x0A), configuración como he dicho antes (MY=0, DH=0, DL=FFFF), incluso le he hecho el reset a traves del PIC (+++, ATRE), -1 ó 2 bytes los recibe perfectos. Con más de 2 ya se bloquea el xBee (p.e. 0x31, 0x32, 0x0D; ó: 0x31, 0x32, 0x33).
-Circuito PC: El chip conversor, autoalimentado; el xBee, a traves de un regulador.
Otros datos:
-También me he hecho un mando a distancia (fue uno de los motivos de provar lo del xBee). Éste, ahora solo emite un carácter más el 0x0D y 0x0A, con lo cual, también bloquea el xBee (el de destino). Este circuito tambien tiene un 16F913 y TAMPOCO funciona la función sleep en el pic. el xBee lo pongo a dormir y despierto por el pin 9 con SM=1.
El envío del PC al pic, lo que probado tanto los carácteres sólos, como acabando con 0x0D, como con 0x0D y 0x0A. En todos el mismo resultado.
Lo curioso es que el xBee del PC recibe la cadena completa perfecto y el del PIC no. Los pic tienen activado el wdt y desconectado el mclr. Ambos con oscilador interno a 8 Mhz y los pines como i/o. Tienen activada la interrupción de fallo de oscilador, RB, RDA y LowBatt. En los dos no funciona el sleep del PIC, pero eso, después. Lo comento por si tuviera alguna relación.
Según el manual del xBee, se puede bloquear si se llena el buffer, aunque teoricamente, lo único que haría es perder los datos sobrantes, pero no dice, y eso me parece, que pasa si al descargar el buffer del xbee hacia el pic, éste último fuera lento o pasara algo raro en el proceso. ¿Podría ser que el pic tardara demasiado entre interrupcion e interrupcion?, me explico y no se mucho, pero, el pic creo que tiene el buffer de entrada de 2 bytes, que deben ser los que yo leo, y luego que pasa? sale de la interrupcion y tiene que volver a entrar? o se queda ahí. En C, tanto he puesto while (kbhit()) ... y leer con getc(), como if (kbhit()) ... y leer tanto con getc, como gets y un monton de pruebas más.
Si falla el sleep del pic (incluso con todas las interrupciones deshabilitadas), podría fallar o ir lenta la del RDA? Por eso también prové a reducir la velocidad del pic-xbee a 1200, pero nada.
Estas han sido mis primeras experiencias con el xbee, pero también con el C y con el 16F913, así que voy un poco o más bien, bastante perdido.
El protocolo de comunicación, quisiera dejarlo así (del xBee), y ponerlo en la trama de datos, ya que el circuito del que hablamos, debe recibir datos del PC y del mando a distancia.
Confío en que podais darme alguna pista, porque le he dado muchísimas vueltas y no lo consigo.
Saludos, David.