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.
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.
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!
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.