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?
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:
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
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
@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?
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.
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
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. :)
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?
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.
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...
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?
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.
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)
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!?
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?
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.
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
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?
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.
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
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.
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 ;-)