Ich habe 2 Module der xbee-Serie 1 so konfiguriert, dass eines serielle Daten von jedem anderen Modul mit derselben Pan-ID empfängt und das andere Daten an das zuvor erwähnte sendet.
Wenn ich jetzt eine Terminalsoftware (XCTU) verwende, um die Datenübertragung zu überprüfen, ist es in Ordnung. Ich möchte Daten seriell mit einem ATMEGA 168 mit xbee als Sender senden. Und ein weiterer xbee empfängt die Daten und sendet sie an eine auf ATMEGA 2560 basierende Plattform. Ich habe keine Plattform für Atmega 168, also habe ich irgendwie einen Brenner (Bootloader-Schaltung) gebaut. Der Bootloader funktioniert. Ich habe Pin 3 (TXD von USART0) von atmega 168 mit Daten in (Pin 3) des xbee-Moduls verbunden. Ich habe auch die notwendigen Stromanschlüsse hergestellt (Vcc = 3,3 V & GND). Aber der xbee scheint nichts zu senden. Gibt es etwas, das ich vermisse? Bitte helfen Sie, wie Sie vielleicht bereits herausgefunden haben, bin ich ein absoluter Neuling.
PS: Bevor Sie meinen Ruf reduzieren, lassen Sie mich bitte wissen, was ich falsch mache, damit ich das korrigieren kann.
#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);
}
}
}
Dies ist der Code, den ich verwendet habe.
Das Problem lag in der Programmierung. Sofern die Sicherungseinstellungen nicht geändert werden, verwendet der Mikrocontroller seinen standardmäßigen 8-MHz-Oszillator mit einem Vorteiler von 8. Sie sollten also effektiv eine Systemfrequenz von 1 MHz anstelle von 12 MHz haben. Für 9600 Baud müssen Sie also Folgendes eingeben:
UBRR0L = 0x06; //set baud rate lo
anstatt
UBRR0L = 0x5F; //set baud rate lo
Dies sollte das Problem beheben. Obwohl ich nicht weiß, wie ich die Sicherungen oder was auch immer konfigurieren soll.
Ein paar Probleme:
init_devices()
muss von innen aufgerufen werden main()
, sonst wird es nicht ausgeführt
data = 0;
und data = 1;
senden Sie nicht die Zeichen '0' bzw. '1'. Sie senden NUL und SOH aus: siehe http://www.asciitable.com , und diese Zeichen werden in einem Terminalemulator als nichts angezeigt. Schließen Sie stattdessen die Werte in Anführungszeichen ein, zB data = '0';
, um die Zeichen '0' bzw. '1' zu senden.
Überprüfen Sie die Baudrate. Mit UCSR0A = 0x00;
UBRR0 sollte eingestellt werden auf: (F_CPU / 8 / baud - 1) / 2;
(Quelle: Arduino Serial Library) wo F_CPU
ist Ihre CPU-Frequenz in Hertz. In Anbetracht dessen 005F
scheint es ein lustiger Wert zu sein. Überprüfen Sie die MCU-Frequenz und berechnen Sie entsprechend.
Einige Vorschläge:
Komische Zeichen am seriellen Ausgang deuten zwar auf eine falsche Baudrate hin, erscheinen aber nicht immer .
Laden Sie die Arduino IDE herunter und sehen Sie sich den Seriencode an / leihen Sie ihn aus.
Also meine Vermutung ist, dass mit der Hardwareeinstellung etwas nicht stimmt
geometrisch
Rambo-Partyrausch
geometrisch
init_devices()
von Ihrermain
Routine aus anrufen, also wird der UART nicht eingerichtet. Ich habe dies im Internet gefunden, was nützlich sein könnte www2.ee.ic.ac.uk/t.clarke/projects/Resources/zigbee/AVR/… ... es enthält Beispielcode für eine serielle Schnittstelle. Haben Sie auch daran gedacht, den Arduino-Bootloader zu brennen und dann die Arduino IDE / Bibliotheken usw. zu verwenden?Rambo-Partyrausch
geometrisch
init_devices
in hinzuzufügenmain
?Rambo-Partyrausch