Bueno Ya funciona.
Despues de varias semanas de pruebas encontré el fallo.
Para aquellos que tienen el mismo problema semejante a los míos y aun no lo han resuelto y se tiran de los pelos. Espero que esto os ayude.
El lenguaje de programación que empleo es el Proton Basic.
Los caracteres raros que veía en la pantalla en la consola de comunicación que no tenían nada que ver con los datos que enviaba a través del XBEE al Xbee que estaba conectado a la PC, eran por culpa de la configuración en los fuses del micro y alguna desentonación en el código del programa. Al final tuve que ponerme de codos en la mesa y leer el datasheet del PIC . Os lo recomiendo cuando se ha probado todo y el circuito esta bien montado etc…
Aprendí y vi que hay mucha gente en los foros que comenten el error en sus programas que mezclan comandos tipo Hardware y comandos de Software e inflan sus códigos de más. Esto pude dar error en la ejecución de código en el micro y que el programa no fluya como tal.
También me fije que hay gente que en sus programas no tienen en cuenta los parámetros en los fuses y sus ajustes, cuando se trata al menos de la comunicación sea UART, USART,EUSART todo es lo mismo pero hay ciertas mejoras o XTAL.
Cuando queremos desarrollar un proyecto con ciertas características y ahorrar tiempo vamos haber si hay algún ejemplo que se aproxime al que tenemos en mente y nos dirigimos a los foros o a la web y nos encontramos miles y miles, no habrá ningún tipo de problema si el diseñador da fe de que ese circuito funciona con ese código. Si da la casualidad que el hardware que utiliza es el que necesitamos y es justamente ese pues adelante y WALA!! funciona.
Pero que pasa si en ese proyecto que encontramos el hardware que emplea es pequeño y el micro tiene pocas I/O etc… o no es el que teníamos en mente y necesitamos un micro más potente. Pues nada lo cambiamos y alteramos un poco el código a nuestras necesidades etc… y a veces funciona o no!!.
En mi caso no funciono ya que había cierta prisa en hacer y acabar el proyecto y no vi algunas cosas obvias, también me enfrentaba por primera vez a los XBEE y comunicaciones inalámbricas (todo un reto) pero en cierto modo el Hardware esta bien montado y el código en cierta manera estaba correcto, a veces los pequeños detalles no se aprecian.
Aprendí que hay una cierta relación entre la CPUDIV (Sistema de reloj de la CPU Postscaler), USBDIV (Reloj USB Selección de bits) y el FOSC, si sobretodo es un reloj externo y no *interno que llevan algunos micros. Bueno pues el resultado de todo esto más las declaraciones en el código del programa pueden hacernos travesuras ya que los tiempos precisos y el sincronismo entre ellos pierden relación.
Es muy Importante tener en cuenta esta relación ya que cuando se emplea un oscilador (Xtal) externo seguramente esos parámetros haya que modificarlos para que todas las operaciones que tiene que hacer el Micro y el sincronismo con periféricos externos se han correctos.
También encontré muchos errores por la web en las declaraciones y en el cálculo de SPBRG (Caudal Baud Rate),la relación que hay en la velocidad del Micro y la de comunicación serial en BPS (Baudios por segundos) y la configuración optima de los registros (RCSTA, TXSTA).
TXSTA: TRANSMISION (REGISTRO DE CONTROL) OUT
RCSTA: RECEPCION (REGISTRO DE CONTROL) IN
BAUDCON: VELOCIDAD DE REGISTRO DE CONTROL (NO Disponible en Proton Pero hay otros Comandos).
Todas estas relaciones y repito!! son muy importantes para que todo vaya en armonía (sincronizidad) y evitemos sorpresas. En el DataSheet del micro en el apto Comunicación Serial hay una formula para el ajuste de SPBRG y las características del puerto de ese micro especifico para tenerlo en cuenta a la hora de escribir el código y emplear comandos adecuados que se adapten al hardware y sacar mas provecho al hardware a través del software.
También nos encontramos tablas calculadas con diferentes ejemplos, acordaros de (SYNC,BRGH y BRG16) y si es modo ASYNCHRONOUS o SYNCHRONOUS.
Para el cálculo del SPBRG: (ejemplo)
Para un FOSC de 16 MHz, velocidad de transmisión de 9600, Modo Asíncronos, 8-bit BRG:
Caudal Baud Rate = FOSC/(64 ([SPBRGH:SPBRG] + 1))
Ejemplo para SPBRGH:SPBRG:
X = ((FOSC/Desired Baud Rate)/64) – 1
= ((16000000/9600)/64) – 1
= [25.042] = 25
Tasa calculada en baudios = 16000000/(64 (25 + 1))
= 9615
Error = (Calculo Baud Rate - velocidad de transmisión deseada) / velocidad de transmisión deseada
= (9615 – 9600)/9600 = 0.16%
Espero que os haya ayudado…
Saludos.