mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik NRF24L01 löscht meine packete weil es denkt diese wären ein resend


Autor: box25 (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Hallo,
mein Problem ist, das ich ein eigenes Protokoll auf dem NRF24L01 
geschrieben habe, jetzt ist das problem: alle module loggen sich in das 
Hauptmodul ein, sobalt sie starten, wenn jetzt aber ein modul startet 
und sich anmeldet, und aus beispielsewisen Spannungsproblemen neustartet 
und sich nochmal anmeldet, kommen die Packete nicht an. ich habe 
verzweifelt über eine Woche versucht den Fehler zu finden, und jetzt 
hoffe ich, das ich ihn gefunden habe: Das loginn besteht aus relativ 
wenigen Datenübertragungen zwischen den 2 Modulen. Wenn jetzt das 
neugestartete Modul sich anmeldet, denkt die haupteinheit, das das 
empfangene paket ein altes nochmals gesendetes ist, und bestätigt somit 
dem sendenden Modul, das es angekommen ist (ack), gibt dem uC aber nicht 
weiter das etwas empfangen wurde, weil diese Datenpaket entwertet wurde. 
Diese theorie klingt für mich logisch, da das packet, die adresse und 
selbst der CRC exakt die gleichen sind.

1. Jetzt ist die frage: klingt das für euch auch so plausibel wie für 
mich?
2. kann ich irgendwie den CRC Wert selbst ändern, weil dann könnte ich 
mir einen Wert im EEPROM meines UC speichern, und diesen bei jedem 
neustart um eins erhöhen, und als startwert für den CRC in das NRF24L01 
Modul laden. Somit wären war bei erneutem einloggen alle Daten gleich 
wie davor, aber das CRC bit würde eben beim 1. mal auf 0 stehen, danach 
auf 1, dann 2, dann 3, und erst dann wieder auf 0 stehen.

Schonmal im Vorraus vielen dank für eure Hilfe, und entschuldigt bitte 
meine Rechtschreibung.

Autor: Nop (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem ist, daß Deine Haupteinheit unsinnig reagiert. Die sollte 
nicht nur ein ACK schicken, wenn sie einen erneuten Login sieht, sondern 
an den Stand zurückspringen, wo der Login eben losgeht, und ALLES 
nochmal schicken.

Mit anderen Worten, statt da in den Modulen was zurechtzupfuschen, 
solltest Du den Fehler da beheben, wo er ist, und zwar in der 
Statemachine der Haupteinheit.

Autor: Arduino Fanboy D. (ufuf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der CRC Wert wird aus den Daten berechnet.
Jedes mal neu.
Änderst du die Daten, ändert sich der CRC Wert.
Zwangsläufig.

Nein, du hast da einen anderen Bock geschossen!

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hatte genau das selbe Problem und habe es durch zusätzliche Daten in 
den Paketen gelöst. Einerseits einen Zähler, der bei jedem Paket erhöht 
wird (der muss natürlich über Neustarts hinweg gesichert) und zusätzlich 
die NodeId des sendenden Moduls.

Das Problem mit den Nrf24l01 Modulen ist, dass sie ein Resend nur anhand 
des crc Feldes und einem 2Bit Counter erkennen. Diese Info wird für das 
letzte empfangene Paket gespeichert, egal wie lang es her ist. Wenn der 
Sender dann neustarten, der 2Bit Counter zufällig bei 0 war und die 
gleichen Daten
(=gleicher crc) gesendet werden, denkt der Empfänger es ist ein Resend 
und verwirft das Paket.

Die SourceId war bei mir notwendig weil ich mehrere Module auf einem 
Channel hatte, was so eigentlich nicht gedacht ist.

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.