NRF24L01+ Modul

Hallo zusammen,

ich brauche eure Hilfe in Sachen Funkmodul NRF24L01+

Ein Modul hängt an Mega und ein weiteres an einem Nano, soweit läuft auch alles.

Verwende meine eigenen geschriebenen Funktionen, so nun zu meinem Problem.

Mega TX Mode sendet getH=1 zu Nano der jede Sekunde prüft ob Daten vorhanden sind. Funktiniert ohne Probleme. Nach erfolgreichem Versand schaltet das Modul am Mega auf RX Mode und wartet bis zu 2 Sekunden ob ein Paket von Nano, der dann im TX Mode ist, gesendet und angekommen ist.

Und genau das geht nur wenn ich zwischen Nano RX und TX Mode, ein delay(2000) einbaue.

Doch warum ist das so? Dauert das umschalten von TX in RX Mode so lange?

Hat jemand eine Idee woran das liegen könnte?

Channel 65 DataRate 250kbs Entries 15 Output Power HIGH

Haben einen Kondensator mit 1µF an den Modulen hängen, so sollte die Stromversorgung stabil sein.

Vielen Dank im vorraus

Grüße Stefan

EDIT: Wenn ich das delay(2000) raus nehme, löst immer MAX_RT am Nano TX Mode aus

Hallo Stefan,

ich habe eine ähnliche Konstellation laufen und habe festgestellt dass die Übertragung nicht immer auf Anhieb funktioniert. Gründe dafür habe ich nicht gefunden. Vielleicht hängt es daran dass der 2,4 GHz Bereich ziemlich voll ist. Bluetooth und WLAN arbeiten auch in dem Bereich.

Ein anderer Kanal wie 65 könnte Besserung bringen.

Warum bei dir ein delay(2000) nötig ist verstehe ich nicht. Wenn ich auf eine Datenanforderung sofort los sendete ging bei mir das erste Paket meistens verloren weil der Mega wohl noch nicht von TX auf RX umgeschaltet hatte. Wenn ich aber auf der Sendeseite 4ms warte bis ich sende, klappt es auch meist mit dem ersten Transfer. Zudem sende ich die Antwort nicht nur einmal sondern gleich fünf mal im Abstand von 100ms. In weit mehr als 99% aller Anfragen ist mindestens eine der fünf Antworten dann brauchbar. Sollte dennoch nach einer Sekunde keine brauchbare Antwort gekommen sein frage ich nochmal nach.

Gruß Peter

Hallo Peter,

erstmal Danke für deine Hilfe,

Den Kanal wechseln habe ich schon probiert, ich kann mir ja auch nicht vorstellen das dies solange dauert, nur mal so eine Idee kann es sein das der Kondensator 1µF zu klein ist? Messe 3,29V - 3,31V

Also das Senden von Mega zu Nano geht zu 100% doch dann umschalten von Nano zu Mega funkt nicht.

Wie hast du das mit den Adress RX und TX gelöst? Bei mir haben RX und TX die selbe Adresse, liegt da der Hund begraben? Hmm

Gruß Stefan

Hallo Stefan,

es könnte sein, dass 1µF etwas knapp bemessen ist. Ich habe 22µF Elkos oder Tantal parallel zu 100nF Kerko verbaut. Ich versorge die Module aber auch nicht aus den 3,3V des Arduino sondern mache mit LF33CV-Reglern eine eigene 3,3V Versorgung. Dies auch weil meist noch weitere Sensoren 3,3V benötigen. Die 3,3V der Arduinos sind glaube ich nur mit 50mA belastbar.

Ich habe einen Empfänger (MEGA 2560) der zyklisch mehrere (derzeit 2-3) Sender abfragt. Meine Sender sind selbst zusammen gebaute Platinen mit einem 328 Controller im DIP28 Gehäuse.

Man kann den NRF24-Modulen bis zu 6 Adressen mitgeben. Die erste Adresse ist immer Sende- und Empfangsadresse zugleich. Auf fünf weiteren Adressen kann nur empfangen werden.

Mein MEGA 2560 fragt immer auf einer festen Adresse alle Sender an. Die Sender lauschen nur an dieser Adresse, senden aber jeweils auf einer anderen. Der Mega lauscht aber an allen 6 Adressen auf eine Antwort der Sender.

Ich habe Retries(15,0); eingestellt weil ich eh fünf mal sende. Ich hatte den Eindruck dass es so besser läuft als mit Retries(15,15);.

Welche Library verwendest du für NRF24?

Gruß Peter

Hallo Peter,

vielen Dank für deine Hilfe wirklich bin sehr froh darüber.

Also bzgl. Strom werde dann wohl mal einen 100µF probieren, ich hole mir beim Mega vom 9V Pin die 9 V ;) gehe dann weiter in einen Transmitter von 9V runter auf 3,3V und weiter dann zu dem 1µF Kondensator, dass ist mein momentaner Aufbau.

Werde dann mal mit den Entries spielen :o)

Ich verwende meine eignen programmierten Funktionen, also keine Library. Grund ich möchte Schritt für Schritt den NRF24L01+ verstehen, und so fahre ich eigentlich gut.....

Geplant sind auch weitere Module, aber erst wenn das EINE stabil läuft ;)

Habe mir jetzt mal die MAX_RT vorgenommen und sende jetzt max. 10x mit 100ms Pause dazwischen bis RX_DR anschlägt. Dies geht soweit ganz gut und das ohne delay(2000); :D

Grüße Stefan

Hallo Peter,

also ich habe das Entrie jetzt auch disabled und sende wenn MAX_RT kommt einfach erneut UND es funkt ohne Probleme, ok das erste Paket geht meist verloren, denke liegt dann bei mir auch am Mega, doch das zweite kommt immer an :o) und das alles läuft jetzt endlich ohne das delay(2000);

Vielen Dank nochmals für deine Denkanstöße

Grüße
Stefan

Hallo zusammen,

so die Funkverbindung mit zwei Nanos geht, doch bei einem weiteren klemmt es einwenig…

1 Nano am Mega
1 Nano am Nano1
1 Nano am Nano2

jetzt möchte ich das Mega Nano1 anspricht und die Anwort abwartet und dann anschließen das Mega den Nano2 anspricht. Doch irgendwie komme ich den ganzen Pipes durcheinander.

Bis jetzt probiert:
Mega RX und TX Adresse 1 setzen
Nano1 RX und TX Adresse 1 setzen

dann

Mega RX und TX Adresse 2 setzen
Nano1 RX und TX Adresse 2 setzen

das geht aber leider nicht.

Wäre super wenn mir da jemand licht ins dunkle bringen könnte.

Vielen Dank

Gruß
Stefan

Hallo,

ich versuche dann mal Licht ins Dunkel zu bringen und erkläre mal wie ich das derzeit handhabe. Zur Vereinfachung nehmen wir an ich hätte auch einen MEGA und zwei NANOs.

Mega: Pipe 0 --> Adr. 0 Pipe 1 --> Adr. 1 Pipe 2 --> Adr. 2 Pipe 3 --> Adr. 3 Pipe 4 --> Adr. 4 Pipe 5 --> Adr. 5

NANO 1: Pipe 0 --> Adr. 1 Pipe 1 --> Adr. 0 Rest egal, nicht initialisiert.

NANO 2: Pipe 0 --> Adr. 2 Pipe 1 --> Adr. 0 Rest egal, nicht initialisiert.

Die Adressen 0 bis 5 sind bei allen Teilnehmern identisch. Die Adresseinstellung bleibt immer gleich und wird im setup() vorgenommen. Im loop() ändere ich daran nichts mehr.

1.Fall Der MEGA fordert in einem Anforderungstelegramm (32 Byte) über Adr. 0 bei NANO 1 Daten an. Im Anforderungstelegramm steht in den ersten paar Bytes dass der MEGA der Anfordernde ist und dass NANO 1 das Ziel ist. Dann wird der MEGA von TX auf RX umgeschaltet. Beide NANOs empfangen die Anforderung auf Pipe 1 NANO 2 empfängt das Anforderungstelegramm und verwirft es weil es nicht für ihn bestimmt ist. NANO 1 fühlt sich angesprochen, wartet 4ms und sendet dann über Pipe 0 (Adr. 1 des MEGA) seine Daten. Der Mega empfängt die Antwort auf Pipe 1.

2.Fall Der MEGA fordert in einem Anforderungstelegramm (32 Byte) über Adr. 0 bei NANO 2 Daten an. Im Anforderungstelegramm steht in den ersten paar Bytes dass der MEGA der Anfordernde ist und dass NANO 2 das Ziel ist. Dann wird der MEGA von TX auf RX umgeschaltet. Beide NANOs empfangen die Anforderung auf Pipe 1 NANO 1 empfängt das Anforderungstelegramm und verwirft es weil es nicht für ihn bestimmt ist. NANO 2 fühlt sich angesprochen, wartet 4ms und sendet dann über Pipe 0 (Adr. 2 des MEGA) seine Daten. Der Mega empfängt die Antwort auf Pipe 2.

Auf diese Art und Weise brauche ich keine RX und TX Adressen umzuschalten. Der MEGA empfängt immer auf allen Pipes und die NANOs immer auf Pipe 1. MEGA und NANOs senden immer auf Pipe 0, wobei Pipe 0 der NANOs immer unterschiedliche Adressen haben. Nämlich die von Pipe 1+2 des MEGA.

Der Trick ist also, dass ich an den einmal gemachten Zuweisungen der Adressen zu den Pipes nichts mehr ändere. Das Ziel der Anforderung steht im Anforderungstelegramm. Alle NANOs empfangen jedes Anforderungstelegramm, aber nur derjenige für den es bestimmt ist reagiert darauf.

Gruß Peter

Hallo Peter,

erstmal :o du beschreibst ganz genau das was ich machen will :)

Es läuft nun auch einwandfrei, nur das ich im loop die entsprechenden Adressen setze, somit spreche ich immer nur den Nano an der auch gemeint ist. Das ist aber auch schon der einzige Unterschied.

Peter nochmals vielen Dank für deine Hilfe.

Grüße Stefan