He configurado 2 módulos xbee serie 1 de modo que uno recibirá datos en serie de cualquier otro módulo del mismo ID de pan y el otro enviará 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 de cargador de arranque). El gestor de arranque funciona. He conectado el pin 3 (TXD de USART0) de atmega 168 con datos en (pin 3) del módulo xbee. También hice las conexiones de alimentación necesarias (Vcc = 3.3V y GND). Pero el xbee no parece enviar nada. Hay algo que este olvidando ? Por favor, ayuda, como ya te habrás dado cuenta de que soy un completo novato.
PD: antes de reducir mi reputación, hágame saber qué estoy haciendo mal para que pueda corregirlo.
#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é.
El problema estaba en la programación. A menos que se cambien los ajustes del fusible, el microcontrolador utiliza su oscilador predeterminado de 8 MHz con un preescalador de 8. De modo que debería tener una frecuencia de sistema de 1 MHz en lugar de 12 MHz. Entonces 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 se como configurar los fusibles o lo que sea.
Algunos problemas:
init_devices()
debe llamarse desde adentro, main()
de lo contrario no se ejecutará
data = 0;
y data = 1;
no envíe los caracteres '0' y '1' respectivamente. Envían NUL y SOH: consulte http://www.asciitable.com , y estos caracteres se mostrarán como nada en un emulador de terminal. En su lugar, encierre los valores entre comillas, por ejemplo data = '0';
, para enviar los caracteres '0' y '1' respectivamente.
Compruebe la tasa de baudios. Con UCSR0A = 0x00;
UBRR0 debe configurarse en: (F_CPU / 8 / baud - 1) / 2;
(fuente: biblioteca serial Arduino) ¿dónde F_CPU
está la frecuencia de su CPU en Hertz? Con eso en mente, 005F
parece un valor divertido. Compruebe la frecuencia de la MCU y calcule en consecuencia.
Algunas sugerencias:
Los caracteres divertidos en la salida en serie sugieren una tasa de baudios incorrecta, sin embargo, no siempre aparecen.
Descargue el IDE de Arduino y eche un vistazo / tome prestado su código de serie.
Supongo que hay algo mal con la configuración del hardware.
geométrico
fiesta rambo
geométrico
init_devices()
desde sumain
rutina, por lo que el UART no se está configurando. Encontré esto en la web que podría ser útil www2.ee.ic.ac.uk/t.clarke/projects/Resources/zigbee/AVR/… ... tiene un código de ejemplo para un puerto serie. Además, ¿ha pensado en grabar el cargador de arranque de Arduino y luego usar el IDE/bibliotecas de Arduino, etc.?fiesta rambo
geométrico
init_devices
enmain
?fiesta rambo