XBee - Datenverluste über AVR-µC (ATmega32L)

OP #986423
Hi,

ich habe zwei XBee-Module die über die Minimalbeschaltung (VCC, IN, OUT, 
GND) laufen. Einer ist als Coordinator und der andere als End Device 
eingestellt. Daten werden in beide Richtungen über das Terminal von 
X-CTU richtig gesendet und empfangen. Über den PC funktioniert es super!
Aber über zwei AVR-µC werden nur die ersten 3Bytes und das letzte Byte 
von insgesammt 6Bytes zum anderen AVR-µC übertragen. Die übrigen 2Bytes 
gehen auf der Strecke verloren. Warum?
Bin über jede Antwort erfreut.
Danke sehr.

Mit freundlichen Grüßen
Mario Spyridon
OP
Hallo,

ich habe wohl den Fehler gefunden und bräuchte weiterhin Hilfe.

Also der AVR-µC der als Transmitter arbeitet funktioniert super. Das 
X-CTU Terminalprogramm empfängt alles. Nur der AVR-µC der als Empfänger 
arbeitet empfängt nicht alle Daten. Egal ob die Daten vom X-CTU 
Terminalprogramm oder dem AVR-µC (Transmitter) stammen. Mein verdacht 
ist, dass der Empfangspuffer vom USART im ATmega32L nicht schnell genug 
entleert werden kann, wenn ein 6Byte Datenpacket gesendet wird. Wenn die 
Daten Byteweise übertragen werden, kommen die Daten richtig an. Hat 
jemand für mich eine Lösung?
Danke sehr.

Mit freundlichen Grüßen
Mario Spyridon
OP
Die Daten werden über USART mit folgender Routine empfangen:

USART_Receive:
; Wait for data to be received
sbis UCSRA, RXC
rjmp USART_Receive
; Get and return received data from buffer
in r16, UDR
ret

Die empfangenen Daten stehen dann in Register r16. Diese werden dann in 
einer anderen Routine auf einem LCD-Display angezeigt. Wie gesagt 
vermute ich, dass die Daten nicht schnell genug aus dem Puffer 
ausgelesen werden können, sodass noch nicht gelesene Daten überschrieben 
werden. Gibt es eine elegante Methode um mehrere Bytes hintereinander 
korrekt zu empfangen?

Freundliche Grüße
Mario Spyridon
Moderator Persönliche Seite
Mario Spyridon wrote:

> Die empfangenen Daten stehen dann in Register r16. Diese werden dann in
> einer anderen Routine auf einem LCD-Display angezeigt.

Klar: wenn die Anzeige aufs LCD dann wartet, bis das LCD die Daten
korrekt übernommen hat, dann sind inzwischen drei weitere Zeichen
zur UART reingelaufen...

Wie schon geschrieben: benutze eine UART-Interruptroutine, die die
Zeichen in einen Puffer füllt.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.