Forum: HF, Funk und Felder nRF24L01(+) Problem & Fragen


von Jan G. (jan80)


Lesenswert?

Ich hatte diese Frage schon in einem anderen Thread gestellt:

Beitrag "Bidirektionaler Funk-IO-Expander für Raspberry Pi"

Ich denke aber, dass sie dort wegen des unpassenden Titels untergeht. 
Daher nochmal die Frage hier:

Ich muss nochmal nerven. Da die Reichweite der nRF24L01 Module (Betrieb 
mit 1 MBit) nicht zufriedenstellend war (aber nur knapp), habe ich mir 
einige nRF24L01+ Module bestelltl. Zu meiner Überraschung musste ich 
feststellen, dass die neuen Module exakt genau so aussahen wie meine 
bereits vorhanden nRF24L01 Module (ohne das +). Bei näherer Betrachtung 
stellte sich heraus, dass auch auf den alten Modulen der verbaute IC mit 
nRF24L01+ beschriftet ist. (zumindest vermute ich das, wirklich 100% 
sicher lesen kann ich es wegen der extrem kleinen Schrift nicht, könnte 
statt + auch * oder so sein).

Wie sehen die ICs ohne das + aus? Ist da hinter dem nRF24L01 noch ein
Zeichen? Habe ich jetzt nur nRF24L01+ Module? Ich bin da jetzt doch
etwas verunsichert!

Ich habe versucht eine Kommunikation mit 250 kbit/s herzustellen. Leider
funktioniert das nicht sauber. Ich sende die Daten und warte dann mit
einem Loop darauf, dass ein Interrupt gefeuert wird. Entweder wurden die
Daten erfolgreich übertragen, oder die maximale Anzahl von erfolglosen
Versuchen wurde erreicht. Leider ist bei 250 kbit/s beides nicht der
Fall. Der Loop wird dadurch zur Endlosschleife. Ich initialisiere die
Module so:

1
//Datenrate auf 250 KBit festlegen
2
mirf_write_register(RF_SETUP, RF_DR_LOW, 1);
3
mirf_write_register(RF_SETUP, RF_DR_HIGH, 0);
4
5
//Auto Retry Delay auf 1 MS festlegen
6
mirf_write_register(SETUP_RETR, ARD, 1);
7
mirf_write_register(SETUP_RETR, ARD+1, 1);
8
9
//Auto Retry Count auf 15 festlegen
10
mirf_write_register(SETUP_RETR, ARC, 1);
11
mirf_write_register(SETUP_RETR, ARC+1, 1);
12
mirf_write_register(SETUP_RETR, ARC+2, 1);
13
mirf_write_register(SETUP_RETR, ARC+3, 1);

Das ist natürlich nur ein Auszug. ;)

Sobald ich RF_DR_LOW auf 1 setze, tritt das beschriebene Problem auf.

Kann mir jemand weiterhelfen?

von Timmo H. (masterfx)


Lesenswert?

Bist du sicher das "mirf_write_register" wirklich nur ein Bit in das 
Register Schreibt?
Soweit ich das ergooglen konnte sieht der Prototyp so aus:
1
void mirf_write_register(uint8_t reg, uint8_t * value, uint8_t len);
Du schreibst als mit jedem Zugriff in "reg" den Wert der an "value" 
steht mit der Länge "len"

Gleiches bei den anderen Dingern. Du überschreibst jedes mal wieder das 
komplette Register mit falschen Werten. Das ist IMHO murks.

Es müsste wohl eher so aussehen:
1
uint8_t buf[10];
2
buf[0] = RF_DR_LOW;
3
mirf_write_register(RF_SETUP, buf, 1);
4
buf[0] = 0x30 | 0x0F;//1ms + 15 Retry
5
mirf_write_register(SETUP_RETR, buf, 1);

von Sascha (Gast)


Lesenswert?

Hallo Jan,
ich arbeite und entwickle nun schon bald seit 3 Jahren auch mit den 
nRF24L01 und nRF24L01+.
Ich kenne dein Modul jetzt nicht aber es gibt im Aufbau schon kleine 
feine Unterschiede.
Also der nRF24L01+ ist kaum besser als sein Vorgänger (nRF24L01) auch 
die Reichweite bei 250KBaud ist nicht wirklich größer.
Ich arbeite mit einer kleinen SMD Keramik Antenne und habe ungefähr eine 
Reichweite von realistischen 15 Meter.
Ich war anfangs auch etwas entäuscht, aber es heist ja auch SRD (Short 
Range Device).
Bei 250KBaud muss es bei dir an der Software liegen, bei mir geht der 
nRF24L01+ ohne jegliche Probleme.
Das wichtigste auf einem solchen Modul sollte der Quarz sein, je ganauer 
der stimmt um so besser die Reichweite. Nordic schreibt hier für die low 
cost Industrie 30ppm vor, was aber nicht wirklich ausreicht. Als ich 
10ppm Quarze eingesetzt habe, waren viele Probleme gelöst. Auch das 
Matching zur Antenne ist nicht ganz ohne. Dort verwende ich einen 
speziellen Balun.
Mit einer guten WLAN Stabantenne a la Reichelt gehts sogar sehr gut.

Gruß Sascha

von Sascha (Gast)


Lesenswert?

Hallo Jan,
sorry eine Frage von dir habe ich noch ganz übersehen.
Also auf dem nRF24L01 steht folgendes drauf NRF 24L01 und auf dem 
nRF24L01+ steht NRF 24L01+ drauf.
Wenn ein nRF24L01 Chip mit der Software des nRF24L01+ auf 250KBaud 
angesteuert wird sendet er auf 1MBaud und funktioniert somit auch.

Gruß Sascha

von Jan G. (jan80)


Lesenswert?

@Timmo H.: Danke, ich denke, das wird es gewesen sein! Manchmal sieht 
man den Wald vor lauter Bäumen nicht. Da wäre ich wahrscheinlich nie 
drauf gekommen.

@Sascha: Danke für die ausführliche Erläuterung. Das bringt mich schon 
einen ganzen Schritt weiter. Meinst du, es würde demnach Sinn machen, 
Die Quarze auf dem Modulen gegen hochwertigere zu tauschen? Gibt es eine 
Möglichkeit zu erkennen, was für Quarze verbaut sind? Außer dem Takt 
steht da ja idR nichts drauf...

Ich habe gesehen, dass es auch noch Module mit externen Verstärkern gibt 
(LNA / PA). Würde es sich bermekbar machen, wenn man in einem 1 to many 
Szenario die Basis mit einem solchen Modul ausstattet?

von Timmo H. (masterfx)


Lesenswert?

Jan Gatzke schrieb:
> Ich habe gesehen, dass es auch noch Module mit externen Verstärkern gibt
> (LNA / PA). Würde es sich bermekbar machen, wenn man in einem 1 to many
> Szenario die Basis mit einem solchen Modul ausstattet?
Ich habe Version 3.1 von den nRF24L01+ LNA + PA.
Die Dinger haben schon ordentlich Reichweite (benutze ich für meinen 
Quadcopter)
Die Ver 3.1 hat als Verstärker den MCP01 verbaut, der spuckt ~20dBm raus 
und der LNA macht ~12 dB Verstärkung.
Wenn du nur z.B. nur den Master damit ausstattest kannst du natürlich 
auch die Slaves über größere Distanzen ansprechen und von den Daten 
empfangen. Du musst aber bedenken, dass du nicht über die gleiche 
Distanz empfangen kannst über die du sendest, da die Slaves ja nur die 
0dBm machen und es nur durch den LNA im Master läuft.

von Sascha (Gast)


Lesenswert?

Hallo,
also den Quarz gegen einen besseren Quarz auszutauschen setzt auch 
Messgeräte voraus um die Kondensatoren anzupassen. Das würde ich so 
nicht machen. Der Erfolg ist trotz Aufwand sogar dann noch schlechter.
Ich habe ein Modem mit dem nRF24L01+ und dem MCP03 entwickelt geht sehr 
weit.
Ist aber meines Wissens in Deutschland mit +20dBm nicht zulässig.
Sonder nur 10mW EIRP oder bei Superbreitband 10mW/MHz.

Gruß Sascha

von Jan G. (jan80)


Lesenswert?

Ok, so tief wollte ich dann in die Welt der Funktechnik dann doch nicht 
einsteigen. Danke nochmal für eure Erklärungen. Ich denke, ich kann 
jetzt erst mal weitermachen. Ich denke mittlerweile, ich habe mir 
vielleicht etwas viel aufgehalst, als mit 1. AVR Projekt direkt mit Funk 
usw.. Da ist die Lernkurve echt steil. Aber langsam lichtet es sich. :)

von Jan G. (jan80)


Lesenswert?

Nachdem ich das Modul jetzt richtig initialisiere, funktioniert nun 
alles einwandfrei. Mit der Reichweite bin ich auch zufrieden. Ich denke, 
durch die falsche Initialisierung liefen die Module immer auf 2 MBit. 
Und da ist zu 250 kbps schon ein Unterschied zu merken. Ich denke, ich 
werde zusätzlich die Zentrale mit einem hochwertigeren Modul mit 
externer Antenne bestücken. Bisher verwende ich überalle die guten 1 
Euro Teile von Ebay.

Was mich jetzt noch leicht stört, ist die Begrenzung auf 6 Gegenstellen. 
Normal müsste ich damit vorerst hinkommen, aber langfristig könnte das 
knapp werden. Wenn die Satelitten nur nach Aufforderung durch die Basis 
senden, dann könnte ich doch die Basis jeweils vor dem Datenaustausch 
neu einstellen und so dieses Limit umgehen, oder? Wäre es auch möglich, 
zwei nRF24L01+ an einem SPI Bus zu betreiben? Haben die dann die gleiche 
Adresse und es wird nur über die CS-Leitung unterschieden?

von Timmo H. (masterfx)


Lesenswert?

Jan Gatzke schrieb:
> Was mich jetzt noch leicht stört, ist die Begrenzung auf 6 Gegenstellen.
> Normal müsste ich damit vorerst hinkommen, aber langfristig könnte das
> knapp werden.
Dann mache die Adressierung doch im Protokoll. Und/oder verwende 
zusätzlich noch verschiedene Hardware-Kanäle.

von Jan G. (jan80)


Lesenswert?

Das ist natürlich möglich. Nur muss ich dann auch alle Funktionen wie 
CRC, RT usw. in Software abbilden. Und da könnten meine ATTiny2313 etwas 
klein werden...

von Daniel (Gast)


Lesenswert?

Hallo,

ich habe gerade zwei diese Transceiver-Module mit je einem PIC 18F4620 
verbunden.
(für den Receiver habe ich sogar eine eigene Platine gefertigt)

Ich will nun eine Verbindung mit einem Testprogramm herstellen. 
(nrf24l01_tutorial_1_pic18 von Brennen Ball) - das ist für einen 
bidirektionalen Test gedacht, habe es auf eine einfache unidirektionäre 
Verbindung umgeschrieben, nachdem es unidirektinär schon nicht richtig 
funktioniert.

Mein Problem ist, dass ich regelmäßig ausgesendete Datenpakete nur hin 
und wieder empfange (zufällig).
Was habe ich bis jetzt gemacht: Registerwerte ausgelesen, weil sich 
Sende-PIC bei niedrigen fosc (und damit SPI-Takt) regelmäßig aufgehängt 
hat (in der Polling-Schleife für Abwarten des Sendebefehls), Abstand 
habe ich zwischen den Modulen verändert, Kanal (Frequenz) verändert, 
internen PIC-Oszillator verwendet um externe Störquellen auszuschließen.

Hat jemand eine Idee, was das Problem sein könnte.
Könnte ein Baustein defekt sein?

von Hans J. (step_up_mosfet)


Lesenswert?

Ja, ein Defekt ist bei den günstigen Dingern auch möglich, aber 
scheinbar liegt es oft nur an der Bodenplatte von dem Chip, die ist 
manchmal nicht richtig angelötet und kann über die Durchkontaktierung an 
der Rückseite mit Flussmittel, Lötzinn und einer etwas längeren 
Verweilzeit der Lötkolben auf der Duko angelötet werden.

von Jan Gatzke (Gast)


Lesenswert?

Hast du für eine vernünftige Stromversorgung gesorgt? Ich würde auf 
jeden Fall einen Kondensator zum Entstören einsetzen. Die Module können 
sonst etwas zicken. (Ich gehe jetzt mal davon aus, dass du auch die 2 
Euro Teile aus Asien benutzt)

von Hans J. (step_up_mosfet)


Lesenswert?

Jan Gatzke schrieb:
> (Ich gehe jetzt mal davon aus, dass du auch die 2
> Euro Teile aus Asien benutzt)

Wie kommst du auf 2 Euro?

http://www.ebay.de/itm/New-20Pcs-2-4GHz-NRF24L01-Antenna-Wireless-Transceiver-For-Microcontroller-ER99-/121049266956?pt=UK_BOI_Electrical_Components_Supplies_ET&hash=item1c2f193b0c

Die kosten pro Stück 96,5 Cent (inclusive Paypal-Umrechnungsfaktor).

von Daniel (Gast)


Lesenswert?

Mittlerweile kosten sie nur mehr 1,09 Euro :-)

Also: Soweit mit dem vorhandenen Lötkolben möglich, wurde an allen 
SMD-Widerständen und an der Durchkontaktierung (da gibts ja nur die 
8-polige Steuerpins-Stiftleiste für den NRF-Chip?) nachgelötet.

Ergebnis: Keine Veränderung der Lage!

Stromversorgung jeweils für Sender/Empfängerplatine:
Steckernetzteil auf 7805 (für PIC) und dann weiter auf LM1117 - 3V3, mit 
einem 33uF Kondensator am Ausgang und einem 100nF Kondensator.

Ich merke aber, dass, wenn man der Empfangsplatine von unten zu nahe 
kommt, die LEDs, die den Empfang anzeigen sollen, wie wild zu blinken 
beginnen. Danach muss ich den PIC resetten, damit ich aus einer 
Endlosschleife komme, bei der ein Register scheinbar nie mehr den Wert 
erreicht, der bei erfolgreichem Empfang drinstehen sollte. - ein 
EMV-Problem!?

von Hans J. (step_up_mosfet)


Angehängte Dateien:

Lesenswert?

Daniel schrieb:
> an der Durchkontaktierung (da gibts ja nur die
> 8-polige Steuerpins-Stiftleiste für den NRF-Chip?) nachgelötet.

Nein, direkt unter dem Chip sollten 4 kleine Löcher sein.
Bei meinen alten Modulen war da noch ein richtiger viereckiger 
verzinnter Bereich, bei den neueren Modulen gibt es sowas scheinbar 
nicht mehr.

Im Anhang ist ein Bild von dem was ich meine.

Bist du dir sicher dass deine Software richtig funktioniert?

von Daniel (Gast)


Lesenswert?

Achso, das wird schwierig, da muss ich erst eine kleinere Lötspitze 
besorgen.

Ich habe noch ein unbenutztes Modul gefunden und es durch das als 
Empfänger arbeitende ersetzt.
Mir kommt das Ergebnis des Empfangs etwas besser vor, aber trotzdem 
fallen teilweise Datenpakete aus.
Habe auch den Sendebaustein durch den ursprünglichen Receiver 
ausgetauscht - bringt auch keine Verbesserung.


bezüglich Programm:
Ich habe es wie gesagt das Testprogramm aus einem Tutorial übernommen. 
Ich nehme daher an, dass es korrekt sein müsste.

von Timmo H. (masterfx)


Lesenswert?

Also wenn das hin und her tauschen praktisch immer das gleiche Ergebnis 
bringt, würde ich den Fehler wohl eher in der Software oder Beschaltung 
vermuten. Beispiele müssen ja nicht zwangsläufig fehlerfrei sein

von Jan Gatzke (Gast)


Lesenswert?

Stört da eventuell irgendwas rein? Die Teile funken ja im 2,4 Ghz 
Bereich. Genau wie WLAN usw.. Hast du mal einen sehr hohen Kanal 
versucht? Hast du das ganze mal in einem anderen Raum getestet?

von Daniel (Gast)


Lesenswert?

Ich bin auf 2,5 GHz hoch (damit müsste ich laut wikipedia außerhalb der 
benutzten WLAN-Kanäle sein), wlan war auch schon abgeschalten.

Den Sender hatte ich bis jetzt immer im selben Raum.

von Timmo H. (masterfx)


Lesenswert?

Ich hatte bisher noch keine Probleme mit den Modulen und Störungen durch 
WLAN. Bei mir sind über 10 WLANs in Reichweite und ein Modul liegt nur 
1m entfernt vom Router

von Joe (Gast)


Lesenswert?

Ich hatte auch mit den Chinamodulen Probleme beim Senden. In 50% aller 
Fälle wurde anscheinend nicht gesendet. Im Empfangsmodus liefen sie aber 
problemlos.

Der gleiche Code lief mit einem anderen Chinamodul (baugleich, 
allerdings mit SMA-Buchse für externe Antenne) ohne Paketverlust, sowohl 
Senden und Empfangen.

Abhilfe schaffte letztendlich eine saubere Versorgungsspannung, d.h. 
eine C-Gruppe 100nF X7R und 1uF Elko.

Ein Nachlöten der Durchkontaktierungen war nicht nötig. Das ganze 
Problem hab ich bei allen 20 Modulen reproduzieren und gleichermaßen 
beheben können.

von Daniel (Gast)


Lesenswert?

Hallo,

danke für deine Antwort.
Ich werde versuchen, die Versorgungsspannung beim Sendemodul mit noch 
ein paar Kondensatoren zu stützen.

Mittlerweile habe ich die Dinger beiseite gelegt.

Ich habe nämlich vor einer Woche ein ganz einfaches 
Sende-/Empfangsprogramm getestet. Das hat überhaupt nicht funktioniert, 
obwohl er scheinbar sendet - die Register beim Sender hab ich auch 
ausgelesen und kontrolliert. Ich wollte nur, dass der IRQ-Pin am 
Empfänger aktiv wird, falls er irgendwas empfängt - ... NICHTS!
Das Problem fängt ja schon damit an, dass ich nicht weiß, ob es am 
Sendebaustein oder Empfänger liegt.
Dann hatte ich "wie man so schön sagt" die Schnauze voll.

Interessanterweise funktioniert das komplexere Programm aus dem 
Tutorial, wenn auch mit dem Problem eines zufälliges Empfangs?- bzw. 
Sendemusters?, wesentlich besser ;-)

von Bastler (Gast)


Lesenswert?

Hallo Sascha,
könntest Du bitte Bezeichnung und Bezugsquelle der von Dir verwendeten 
"Keramik Antenne" nennen

Danke

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
Noch kein Account? Hier anmelden.