mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik XBee - Datenverluste über AVR-µC (ATmega32L)


Autor: Mario Spyridon (spyridon)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Mario Spyridon (spyridon)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dazu müsstest du erstmal schreiben, wie du die Daten denn derzeit
ausliest.

Sinnvoll wäre ein interruptgesteuertes Auslesen.

Ich schiebe das mal ins µC-Forum, denn es ist ja ganz offensichtlich
ein Controller- und kein HF-Problem.

Autor: Mario Spyridon (spyridon)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Mario Spyridon (spyridon)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für deine Antwort.

Was sollte ich als Puffer verwenden?
Wie könnte so etwas aussehen?

Freundliche Grüße
Mario Spyridon

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mario Spyridon wrote:

> Was sollte ich als Puffer verwenden?

Sinnvollerweise SRAM. ;-)

> Wie könnte so etwas aussehen?

Bitte suche mal die Weiten des Internet (und der Codesammlungen)
nach dem Stichwort "Ringpuffer" (bzw. ring buffer) ab.

Autor: Mario Spyridon (spyridon)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay, danke.

So versuche ich es mal.

Mit freundlichen Grüßen
Mario Spyridon

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.