Comunicación entre computadora portátil y atmega2560 a través de dos Xbee S2C

0

Quiero enviar datos a atmega 2560 desde mi computadora portátil usando dos Xbee S2C.

  • El primer Xbee, llamémoslo A, se debe conectar con la computadora portátil.
  • El segundo Xbee, llamémoslo B, se conectará con el atmega 2560.

Quiero saber cómo configurar estos Xbees para que se comuniquen entre sí . Soy un principiante, solo sé algunas cosas:

  • El Xbee A se conectará con la computadora portátil mediante el adaptador USB Xbee, que facilitará la comunicación UART entre la computadora portátil y Xbee A.
  • El Xbee B se conectará con el Atmega2560 al proporcionarle potencia al Xbee B y conectar los Tx y Rx del microcontrolador al del Xbee B. Estos dos se comunicarán a través de UART.

Tampoco tengo claro que el pin Tx y Rx del controlador se conectará al pin Tx y Rx de Xbee B respectivamente o al revés . Por favor guíe.

Aquí está el código que estoy grabando en Atmega 2560, inicialmente para encender / apagar un led en PB6

#define F_CPU 14745600
#include<avr/io.h>
#include<avr/interrupt.h>
#include<util/delay.h>

unsigned char data; //to store received data from UDR1


//Function to initialize ports
void port_init()
{
DDRB = 0x40;

}


//Function To Initialize UART0
// desired baud rate:9600
// actual baud rate:9600 (error 0.0%)
// char size: 8 bit
// parity: Disabled
void uart0_init(void)
{
UCSR0B = 0x00; //disable while setting baud rate
UCSR0A = 0x00;
UCSR0C = 0x06;
// UBRR0L = 0x47; //11059200 Hz
UBRR0L = 0x5F; // 14745600 Hzset baud rate lo
UBRR0H = 0x00; //set baud rate hi
UCSR0B = 0x98;
}


ISR(_VECTOR(26))        // ISR for receive complete interrupt
{
data = UDR0;                //making copy of data from UDR0 in 'data'  variable 

UDR0 = data;                //echo data back to PC

if(data == 0x37)
    PORTB = 0x00;
if(data == 0x39)
    PORTB = 0x40;           

}


//Function To Initialize all The Devices
void init_devices()
{
cli(); //Clears the global interrupts
port_init();  //Initializes all the ports
uart0_init(); //Initailize UART0 for serial communiaction
sei();   //Enables the global interrupts
}

 //Main Function
 int main(void)
 {
 init_devices();
 while(1);
 }

    
pregunta shubham sharma

1 respuesta

0

Aquí hay buenas instrucciones para configurar los módulos:

enlace

La forma en que se configura el UART se describe claramente en la hoja de datos aquí:

enlace

Debe tener en cuenta que es posible que desee CTS y RTS, así como Tx y Rx. Puede usarlo con o sin él, pero debe tener mucho cuidado si no lo implementa. Si está enviando cantidades bajas de datos y no muy a menudo, probablemente saldrá sin ella.

Din en el módulo está conectado a Tx de la UART de la micro y la Tx y la UART de la PC. Sin embargo, tenga en cuenta que la UART de la PC estará en los niveles RS232 y necesitará usar un convertidor de nivel para llegar a 3V3.

De manera similar, Dout irá a los pines Rx de los UART en cada extremo, con la necesidad de una conversión de nivel en el extremo de la PC.

Debes leer sobre RTS y CTS y cómo se usan. Algunos micros tienen UART con control de flujo dedicado, otros deben implementarse en el software. El Mega2560 no tiene control de flujo de hardware, por lo que deberá implementarlo en el software. Este es un pequeño documento agradable:

enlace

Una vez más, al final de la PC, necesitarás convertidores de nivel.

Creo que esto debería ponerte en marcha una vez que hayas leído un poco más.

    
respondido por el DiBosco

Lea otras preguntas en las etiquetas