Autor Tema: problema de comunicación entre xbee  (Leído 1937 veces)

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

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
problema de comunicación entre xbee
« en: 05 de Junio de 2011, 02:16:55 »
hola, les comento que estoy implementando una comunicación entre 2 pic, por medio de 2 módulos xbee. lo que hace el programa es sencillo, en el xbee 1 tengo 2 botones, mas 2 led, y en el xbee 2 tengo 2 relés. y lo que hace todo esto es que ´por medio del xbee 1 al pulsar un botón se enciende un rele y al apretar el otro botón se enciende el otro rele, apagando el rele que estaba encendido. ahora el xbee2 al recepcionar estos comando de encendido y apagado de los rele, de vuelve los comando para encender los led del xbee1 para ver físicamente que el dato fue recibido y actuó bien en el rele. asta aquí todo bien, porque e probado con una conexión directa entre los pic y funciona bien, tambien probe los modulo y la comunicación y anda más o menos, porque hace lo de encender y apagar los rele por medio de los botones. pero no enciende los led (xbee1) indicadores de que estado esta los reles. y no sé por qué será. es por esto que dejo los codigo para que me puedan ayudar a ver dónde está el error.

xbee1 botonera y Led:
Código: [Seleccionar]
#include <16f648a.h>            //pic a utilizar
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP,NOBROWNOUT      //ordenes para el programador
#use delay (clock=4000000)         //clock=20Mhz
#use rs232(baud=9600, PARITY=N, BITS=8, xmit=PIN_B2, rcv=PIN_B1)   //manejo del RS232
#include <string.h>
#include <stdlib.h> //Libreria de manego de string

////////////////////////////////////////////////////////////////////////////////
/************************VARIABLES GLOVALES************************************/
////////////////////////////////////////////////////////////////////////////////
char lectura_antena=0x00;
char cadena_antena[30];
char comando_antena[30];
int identificadorIP2=0;
int incremento_antena=0;
int1 procesar_antena=0;

int y=0;

/******************************************************************************/
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
/****************FUNCIONES DE MANEJO  DE RECEPCION DE DATOS********************/
////////////////////////////////////////////////////////////////////////////////
void proceso_antena(char b);
void borrar_cadena_antena(void);
void copia_cadena_antena(void);
/******************************************************************************/
////////////////////////////////////////////////////////////////////////////////

#INT_RDA      
void rda_isr()
{
lectura_antena=0x00;
 if(kbhit()) {   //Esto es para que no se cuelgue el pic
             lectura_antena=GETC();  //guarda el valor enviado por el puerto serie
             proceso_antena(lectura_antena);
             }
}

void proceso_antena (char b){

if(b==0x0D){
 procesar_antena=1;
}
else{
cadena_antena[incremento_antena++]=b;
}
}


void main(){

   enable_interrupts(INT_RDA);                   // Habilita Interrupción RDA  
   enable_interrupts(GLOBAL);      //todas las interrupciones activadas
  
output_low(PIN_A0);
output_low(PIN_A1);  

while(TRUE){


if(procesar_antena==1){
copia_cadena_antena();
}
 if(!input(PIN_A2)){                  //¿se ha pulsado el boton?
         do{                           //SI -> eliminar...            
         }while(!input(PIN_A2));            //...rebotes del boton
                delay_ms(20);
                printf("01.06.2011");
                delay_ms(20);
                putc(0x0D);
                delay_ms(20);
                printf("color verde");    //indica al pc que se ensendio rele..
                delay_ms(20);
                putc(0x0D);                
                comando_antena[0]=1;              //salgo de mi funcion switch.
 }
 if(!input(PIN_A3)){                  //¿se ha pulsado el boton?
         do{                           //SI -> eliminar...            
         }while(!input(PIN_A3));            //...rebotes del boton
                delay_ms(20);
                printf("01.06.2011");
                delay_ms(20);
                putc(0x0D);
                delay_ms(20);                
                printf("color rojo");
                delay_ms(20);
                putc(0x0D);                
                comando_antena[0]=1;
 }
                                          
}}

////////////////////////////////////////////////////////////////////////////////
/******************************************************************************/
/*      TRASPASO DE DATOS DE LOS BUFFER DE RECEPCION A NUEVAS CADENAS         */
/******************************************************************************/
////////////////////////////////////////////////////////////////////////////////

void copia_cadena_antena(void){
switch (cadena_antena){
case "01.06.2011":
y=1;
identificadorIP2=0;
//fprintf(antena,"oki doki");
break;
default:
identificadorIP2++;
}
if(y==1 && identificadorIP2==1){
strcpy(comando_antena,cadena_antena);

switch (comando_antena){                          //adquiere la operacion a
                                                  // realizar, por medio de la antena
case "verde":                                  //accede al relé hi.......                            
                output_high(PIN_A0);
                output_low(PIN_A1);
                break;
case "rojo":
                output_low(PIN_A0);
                output_high(PIN_A1);              
                break;            
default:
//fprintf(antena,"\rerror");
                }

y=0;
identificadorIP2=0;
}
borrar_cadena_antena();
}
////////////////////////////////////////////////////////////////////////////////
/************************************FIN***************************************/
////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////
/******************************************************************************/
/*          BORRAN BUFFER DE RECEPCION SERIAL DE LA UART 1 Y UART2            */
/******************************************************************************/
////////////////////////////////////////////////////////////////////////////////
void borrar_cadena_antena(void){
int e=0;
procesar_antena=0;
for(e=0;e<=incremento_antena;e++){
cadena_antena[e]=0;
}
incremento_antena=0;
}
////////////////////////////////////////////////////////////////////////////////
/************************************FIN***************************************/
////////////////////////////////////////////////////////////////////////////////

xbee 2 Relé:
Código: [Seleccionar]
#include <16f648a.h>            //pic a utilizar
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP,NOBROWNOUT      //ordenes para el programador
#use delay (clock=4000000)         //clock=4Mhz
#use rs232(baud=9600, PARITY=N, BITS=8, xmit=PIN_B2, rcv=PIN_B1)   //manejo del RS232
#include <string.h>
#include <stdlib.h> //Libreria de manego de string
#use fast_io(A)
#use fast_io(B)
////////////////////////////////////////////////////////////////////////////////
/************************VARIABLES GLOVALES************************************/
////////////////////////////////////////////////////////////////////////////////
char lectura_antena=0x00;
char cadena_antena[30];
char comando_antena[30];
int identificadorIP2=0;
int incremento_antena=0;
int1 procesar_antena=0;

int y=0;

/******************************************************************************/
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
/****************FUNCIONES DE MANEJO  DE RECEPCION DE DATOS********************/
////////////////////////////////////////////////////////////////////////////////
void proceso_antena(char b);
void borrar_cadena_antena(void);
void copia_cadena_antena(void);
/******************************************************************************/
////////////////////////////////////////////////////////////////////////////////

#INT_RDA      
void rda_isr()
{
lectura_antena=0x00;
 if(kbhit()) {   //Esto es para que no se cuelgue el pic
             lectura_antena=GETC();  //guarda el valor enviado por el puerto serie
             proceso_antena(lectura_antena);
             }
}

void proceso_antena (char b){

if(b==0x0D){
 procesar_antena=1;
}
else{
cadena_antena[incremento_antena++]=b;
}
}


void main(){
  
   set_tris_A(0xFC);
   set_tris_B(0xFB);
   enable_interrupts(INT_RDA);                   // Habilita Interrupción RDA  
   enable_interrupts(GLOBAL);      //todas las interrupciones activadas
  
output_low(PIN_A0);
output_low(PIN_A1);  

while(TRUE){


if(procesar_antena==1){
copia_cadena_antena();
}
                                        
}}

////////////////////////////////////////////////////////////////////////////////
/******************************************************************************/
/*      TRASPASO DE DATOS DE LOS BUFFER DE RECEPCION A NUEVAS CADENAS         */
/******************************************************************************/
////////////////////////////////////////////////////////////////////////////////

void copia_cadena_antena(void){
switch (cadena_antena){
case "01.06.2011":
y=1;
identificadorIP2=0;
//printf("oki doki");
break;
default:
identificadorIP2++;
}
if(y==1 && identificadorIP2==1){
strcpy(comando_antena,cadena_antena);
//printf("%s ",comando_antena);

switch (comando_antena){                          //adquiere la operacion a
                                                  // realizar, por medio de la antena
case "color verde":                                  //accede al relé hi.......                            
                output_high(PIN_A0);
                output_low(PIN_A1);
                printf("01.06.2011");
                delay_ms(20);
                putc(0x0D);
                delay_ms(20);                
                printf("verde");    //indica al pc que se ensendio rele..
                delay_ms(20);
                putc(0x0D);                
                //comando_antena[0]=1;              //salgo de mi funcion switch.
                break;
case "color rojo":
                output_low(PIN_A0);
                output_high(PIN_A1);
                printf("01.06.2011");
                delay_ms(20);
                putc(0x0D);
                delay_ms(20);                
                printf("rojo");
                delay_ms(20);
                putc(0x0D);                
                //comando_antena[0]=1;                
                break;            
default:
//fprintf(antena,"\rerror");
   }

y=0;
identificadorIP2=0;
}
borrar_cadena_antena();
}
////////////////////////////////////////////////////////////////////////////////
/************************************FIN***************************************/
////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////
/******************************************************************************/
/*          BORRAN BUFFER DE RECEPCION SERIAL DE LA UART 1 Y UART2            */
/******************************************************************************/
////////////////////////////////////////////////////////////////////////////////
void borrar_cadena_antena(void){
int e=0;
procesar_antena=0;
for(e=0;e<=incremento_antena;e++){
cadena_antena[e]=0;
}
incremento_antena=0;
}
////////////////////////////////////////////////////////////////////////////////
/************************************FIN***************************************/
////////////////////////////////////////////////////////////////////////////////

espero que me puedan ayudar.
saludos cordiales  :oops:

Desconectado Rogil

  • PIC10
  • *
  • Mensajes: 41
Re: problema de comunicación entre xbee
« Respuesta #1 en: 18 de Junio de 2011, 13:38:50 »
japifer_22, pues la verdad en tu caso, lo que haría seria investigar mas acerca de los Xbees, si lees bien los withe papers o buscas en la red, te darías cuenta de que en realidad no necesitas un pic para hacer esto, solo con el Xbee tendrías, además el circuito te quedaría diminuto, de bajo consumo y muy, pero muy simple.

Mucha suerte con tu proyecto

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2060
Re: problema de comunicación entre xbee
« Respuesta #2 en: 18 de Junio de 2011, 16:57:58 »
Hola japifer 22!
Amigo aqui te dejo un link donde explican como configurar el xbee serie 2.
No indicas de que serie es tu xbee pero si es de la serie 2 debes configurarlo en el video te indican una forma de hacerlo, ya que, la configuracion de la serie 1 y 2 no es igual  :mrgreen:
Te recomendaria que una vez configurado los xbee los pruebes como si quisieras comunicar dos pc por puerto serial, si la comunicacion te funciona bien entonces ya el resto es sencillo  :D

Saludos