Interfaz del módulo XBee con ATMEGA 168

2

He configurado 2 módulos xbee serie 1 para que uno reciba datos en serie de cualquier otro módulo de la misma ID de bandeja y el otro envíe datos al mencionado anteriormente.

Ahora cuando uso un software de terminal (XCTU) para verificar la transmisión de datos está bien. Quiero enviar datos en serie usando un ATMEGA 168 usando xbee como transmisor. Y otro xbee recibirá los datos y los enviará a una plataforma basada en ATMEGA 2560. No tengo ninguna plataforma para atmega 168, así que construí un quemador (circuito del gestor de arranque). El gestor de arranque funciona. He conectado el pin 3 (TXD de USART0) del atmega 168 con datos en (pin 3) del módulo xbee. También he hecho las conexiones de alimentación necesarias (Vcc = 3.3V & GND). Pero el xbee no parece enviar nada. Hay algo que este olvidando ? Por favor, ayúdenos, ya que ya se han dado cuenta de que soy un novato completo.

PD: antes de reducir mi reputación, hazme saber qué estoy haciendo mal para que pueda rectificar eso.

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

void uart0_init(void)
{
 UCSR0B = 0x00; //disable while setting baud rate
 UCSR0A = 0x00;
 UCSR0C = 0x06;
 UBRR0L = 0x5F; //set baud rate lo
 UBRR0H = 0x00; //set baud rate hi
 UCSR0B = 0x98;
}

void init_devices()
{
 cli();              
 uart0_init();  
 sei();              
}


 int main(void)
{
 unsigned char data; 
 init_devices();
 data =1;  

 while(1)
 {
     data =0x21;
     UDR0 = data;
    _delay_ms(2000);
    data =0x55;
     UDR0 = data;
    _delay_ms(2000);


 }

}
}

Este es el código que usé.

    
pregunta Rambo partyush

2 respuestas

1

El problema estaba en la programación. A menos que se cambie la configuración del fusible, el microcontrolador utiliza su oscilador predeterminado de 8 MHz con un escalador previo de 8. Por lo tanto, efectivamente debería tener una frecuencia de sistema de 1 MHz en lugar de 12 MHz. Así que para 9600 baudios tienes que poner:

UBRR0L = 0x06; //set baud rate lo

en lugar de

UBRR0L = 0x5F; //set baud rate lo

Esto debería solucionar el problema. Aunque no sé cómo configurar los fusibles o lo que sea.

    
respondido por el Subhankar Ganguly
2

Algunos problemas:

  • init_devices() debe llamarse desde main() , de lo contrario no se ejecutará

  • data = 0; y data = 1; no envían los caracteres '0' y '1' respectivamente. Envían NUL y SOH: vea enlace , y estos caracteres se mostrarán como nada en un emulador de terminal. En su lugar, incluya los valores entre comillas, por ejemplo, data = '0'; , para enviar los caracteres '0' y '1' respectivamente.

  • Comprueba la velocidad en baudios. Con UCSR0A = 0x00; UBRR0 debe configurarse como: (F_CPU / 8 / baud - 1) / 2; (fuente: biblioteca serial de Arduino) donde F_CPU es su frecuencia de CPU en Hertz. Con eso en mente, 005F parece un valor divertido. Verifique la frecuencia de la MCU y calcule en consecuencia.

Algunas sugerencias:

  • Los caracteres divertidos en la salida en serie sugieren una velocidad de transmisión incorrecta, sin embargo, no aparecen siempre .

  • Descargue el IDE de Arduino y eche un vistazo a / pedir prestado su código de serie.

  

Por lo tanto, creo que hay algún problema con la configuración del hardware

  • No se anticipa a su solución de problemas, sino a la hora de decidir cuál es el problema antes de tiempo, o podría pasar por alto el problema real. ¡Todavía hago este error! :)
respondido por el geometrikal

Lea otras preguntas en las etiquetas