Hallo Zusammen, ich habe eine Platine herstellen lassen, deren Aufgabe es ist, ein Gewicht zu messen und dieses periodisch per Funk weiter zu senden. Nun zum Problem: Wenn das Funkmodul wie vorgesehen direkt aufgesteckt wird, wird nichts empfangen. Wenn ich den Finger auf die Antenne des NRF24L01+ Moduls lege, kommt beim Empfänger etwas an. Weiterhin habe ich versucht, das Modul mit Kabeln an der Platine anzustecken. Damit funktioniert das ganze, auch in der nähe von der Platine. (Um abschirmung durch Massefläche der Platine auszuschließen). Wackelkontakt und Stromversorgung kann ich ausschließen, das Problem tritt auch bei verlötetem Modul und mit diversen Kondensatoren auf. Das Funkmodul selbst habe ich auch gegen andere, definitiv funktionierende getauscht. Hat jemand eine Idee, was man da tun könnte? Freundliche Grüße, Valentin
Der NRF24 braucht auf jeden Fall einen Abblock-Kondensator (Elko 10uF-47uF), besser noch unterstützt durch einen HF- tauglichen 100nF Kerko. Die "weiche" Stromversorgung durch Batterie verschlechtert die Stabilitäts-Situation noch mehr. Eine stabile Versorgung über einen Spannungsregler wäre sicherlich hilfreich. Du kennst sicher meine Testaufbauten, so wird's gemacht: Beitrag "Re: NRF24L01+ test program for Arduino Uno" Mir fehlt auch noch die Demonstration des Testaufbaus deines Kommunikationspartners, auch da kann noch viel schief gegangen sein.
Ja ohne Kondensatoren geht gar nichts! Ausserdem sind die billigen Module alles Fälschungen! Und gehen bestenfalls ein paar Meter... Gruss Chregu
Christian M. schrieb: > Ja ohne Kondensatoren geht gar nichts! > Ausserdem sind die billigen Module alles Fälschungen! Und gehen > bestenfalls ein paar Meter... > > Gruss Chregu Ich glaube auch, dass diese Module Faelschungen sind. Aber die Distanzen, die ich erreiche, sind i.O. Mit den Modulen des TO überbrücke ich ca. 10m (dazwischen 2 Waende).
Meine gehen mit Sichtverbindung nur so 3-4m, Signalstärke ändert fast nichts. Ich werde mal mit Originalen probieren. Hoffe die von TME sind original. Gruss Chregu
Danke für die Antworten. Das komische ist, dass die Module, wenn sie wie im Bild gezeigt mit Kabel dazwischen angeschlossen sind, problemlos über 20 Meter mit Wänden dazwischen überbrücken. Ebenfalls funktioniert das, wann man mit dem Finger an die PCB-Antenne fasst. Die Stromversorgung hat bereits 10uF und 100nF direkt am Funkmodul. Iat davon auszugehen, dass meine Platine zusammen mit Originalen NRF24L01+ funktioniert? Wo bekomme ich denn sicher gute?
Valentin Schlegel schrieb: > ich habe eine Platine herstellen lassen Da hättest du wohl lieber selbst Hand anlegen sollen bzw. vor Beauftragung mal hier auf uC.net nachfragen sollen ob alles so richtig ist. Hier gibt es nämlich Leute die wissen wie man ein Layout richtig macht. Zu deinem speziellen Layout hätte ich zu bemängeln dass die Abblock-Kondensatoren wild verstreut auf der Platine liegen anstatt dem zu stabilisierenden IC nahe zugeordnet zu sein. Der Quarz gehört näher an den Prozessor und die Last- kapazitäten des Quarzes dem Prozessor zugewandt damit die Leitungslängen und damit die Stromwege kurz bleiben. Wie kritisch das ist hängt von der verwendeten Frequenz ab die wir nicht kennen. Dann stellt sich natürlich noch die Frage wie dein (ver- mutlich) extern angeschlossender Sensor deine schwächliche Batterie-Versorgung belastet bzw verkraftet .... wissen wir nicht da du ja weder Layout noch Schaltplan geliefert hast. Bei einer Batterie-Versorgung braucht man auf jeden Fall einen dickeren Elko als Unterstützung der Stabilisierung, eher auch noch zusätzlich (wie bereits erwähnt) einen Spannungsregler der die Versorgungslage sicherer macht.
Danke für die Kritik der Platine, bis auf das Funkmodul läuft sie jedoch ohne Probleme. Die Kondensatoren, die wild verstreut sind, sind unter anderem zwischen Stiftleiste und Reset sowie in den Messleitungen der Wägezelle und müssen so platziert sein. Der Quarz ist dort Platziert, damit er mit seinem Metallgehäuse weiter weg vom NRF Modul ist. Die Spannungsversorgung ist stabil und bricht auch beim Messsen der Wägezelle (über einen HX711 angeschlossen) und beim Senden nicht ein, sagt zumindest mein Oszi. 10uF und 100nF habe ich direkt am Funkmodul angelötet (im Bild ist ein anderes Modul zu sehen) Würde ein Original die Situation verbessern? Wo bekomme ich die?
Valentin Schlegel schrieb: > Die Kondensatoren, die wild verstreut sind, sind unter > anderem zwischen Stiftleiste und Reset sowie in den Messleitungen der > Wägezelle und müssen so platziert sein. So betrachtet/definiert hat dein Prozessor gar keinen Kondensator. Valentin Schlegel schrieb: > Der Quarz ist dort Platziert, > damit er mit seinem Metallgehäuse weiter weg vom NRF Modul ist. Das macht keinen Sinn. Lange Quarz-Leitungen fangen tendenziell Störungen von aussen ein. Sie stören selbst nach aussen kaum da der Signalpegel dort klein und die Signalform oberwellen- arm (da nicht rechteckförmig) ist.
Wenn die Dinger separat getestet problemlos funktionieren ist wohl dein Design vermurkst. Ich habe hier schon dutzende verbaut, alle aus China von diversen Händlern und die funktionieren ausgezeichnet, bin immer wieder übgerrascht wie weit die Dinger zuverlässig funktionieren. Als Empfänger kann ich auch die Module mit PA+LNA+externer Antenne empfehlen, die erhöhen die Reichweite deutlich, da empfange ich auch die Einfachmodule mit PCB-Antenne durch drei Betongeschossdecken, das geht wenn man mit dem Standort experimentiert sogar den Einfachmodulen aber halt nicht so zuverlässig.
Demolition Man schrieb: > Ich habe hier schon dutzende verbaut, alle aus China von diversen > Händlern und die funktionieren ausgezeichnet, bin immer wieder > übgerrascht wie weit die Dinger zuverlässig funktionieren. Kann ich bestätigen. Und wenn ich drei bis fünf Euro pro Modul bezahlt habe kann ich mir nicht vorstellen dass es sich bei meinen um Originale handelt. Demolition Man schrieb: > Wenn die Dinger separat getestet problemlos funktionieren ist wohl dein > Design vermurkst. Wenn ich eine Platine "herstellen lasse" und dann daran messe dann zweifle ich in solch einem Zusammenhang die Messung selbst an. Valentin Schlegel schrieb: > Die Spannungsversorgung ist stabil und bricht auch beim Messsen der > Wägezelle (über einen HX711 angeschlossen) und beim Senden nicht ein, > sagt zumindest mein Oszi. Störungen auf Spannungsversorgung nachzuweisen ist durchaus schwierig, insbesondere wenn diese nicht zyklisch auftreten.
Valentin Schlegel schrieb: > Iat davon auszugehen, dass meine Platine zusammen mit Originalen > NRF24L01+ funktioniert? Nein. Es ist davon auszugehen dass mit einem soliden Design auch nicht-originale NRF24L01+ Module einwandfrei funktionieren.
Ich kann mit beim besten Willen nicht vorstellen, dass mein Layout etwas damit zu tun haben könnte. Wenn ich das Modul mit 20cm langen Kabeln anschließe, funktioniert es wie es soll. Ebenso funktioniert mein Breadboard-Aufbau. Diese beiden Aufbaute sind sicherlich schlechter als meine Platine. Wenn ich 20cm Kabel dazwischen habe, werden doch viel mehr Störungen eingestrahlt und die Stromversorgungssituation wird bestimmt auch nicht besser. Außerdem frage ich mich, warum es funktioniert, wenn ich den Finger auf die Antenne lege? Hilft da vielleicht eine Drahtantenne?
Valentin Schlegel schrieb: > Ebenso funktioniert mein Breadboard-Aufbau. Den du nicht zeigen willst. Valentin Schlegel schrieb: > Diese beiden > Aufbaute sind sicherlich schlechter als meine Platine. Ausserdem ist dir (wie uns) nicht klar welcher der beiden Teilnehmer schlechter bzw problematischer ist. Zum Senden/ Empfangen gehören ja immer zwei. Es können ja auch beide unzulänglich funktionell sein. Jetzt sage bitte nicht dass dein Daumentest der Nachweis ist ... Der Finger ist bei HF-kritischen Problemschaltungen fast immer hilfreich, es gilt dann die Unzulänglichkeiten der HF- Schaltung zu eliminieren sodass der Finger nicht mehr er- forderlich ist. Valentin Schlegel schrieb: > Wenn ich das Modul mit 20cm langen Kabeln anschließe, funktioniert es > wie es soll. Wie soll es denn funktionieren? Längere Kabel könnten in diesem Zusammenhang dabei helfen die HF-Masse (Gegengewicht zu Antenne) zu vergrössern und somit die Antennen-Eigenschaften zu verbessern.
Valentin Schlegel schrieb: > Iat davon auszugehen, dass meine Platine zusammen mit Originalen > NRF24L01+ funktioniert? Irgendwo hatte ich mal gelesen, dass die Chinesen beim Kopieren dieses Chips sich 1:1 an das Datenblatt gehalten haben. Das Datenblatt hatte aber bei der Beschreibung eines Registers einen Fehler (der beim naechsten Release korrigiert wurde). Da lief aber die Produktion der Chinesen bereits hochtourig. Deshalb funktionieren die Orginale nicht mit denen der Chinesen. Heisst es.
NRF Testguy schrieb: > Längere Kabel könnten in diesem Zusammenhang dabei helfen > die HF-Masse (Gegengewicht zu Antenne) zu vergrössern und > somit die Antennen-Eigenschaften zu verbessern. Naja, am HF Teil kann ich ja nichts ändern. Das heißt ja eigentlich, dass die Module Mist sind, oder?
Die Top-Seite der Platine liegt übigens auf GND, die Bottom Seite auf Vbat
Valentin Schlegel schrieb: > Bilder Nach https://zeptobars.com/en/read/Nordic-NRF24L01P-SI24R1-real-fake-copy hast Du Fälschungen. Gruss Chregu
Hallo, wenn jetzt noch der Abstand zwischen Antenne und Kuper-Fläche der Leiterplatte im passend ungünstigen Verhältnis zur Wellenlänge bei 2,4GHz liegt, möchte ich nicht über das Abstrahlverhalten der nRF-Antenne nachdenken... Bei mir wäre das Modul mit der Antenne über einer Leiterplattenecke gelandet und unterhalb der Antenne kein Kuper und möglichst auch keine Bauteile und Leiterbahnen. Gruß aus Berlin Michael
:
Bearbeitet durch User
Ich hab mein Modul jetzt mit einer Stiftreihe verlängert und das bringt schon erhebliche Verbesserung mit sich. Jetzt gehen etwa 5 Meter. Mit dem gleichen Modul hab ich aber auch schon mehr geschafft. Wenn es also an der Massefläche liegt, sollte ja eine gewinkelte Buchsenleiste das Problem lösen können, oder? Damit könnte ich das Funkmodul nach oben abstehen lassen (wie im Foto gezeigt). Das sollte ja dann helfen?
Hallo, Valentin Schlegel schrieb: > Mit dem gleichen Modul hab ich aber auch schon mehr geschafft. Wenn es > also an der Massefläche liegt, sollte ja eine gewinkelte Buchsenleiste > das Problem lösen können, oder? Damit könnte ich das Funkmodul nach oben > abstehen lassen (wie im Foto gezeigt). Das sollte ja dann helfen? mach es so. Wenn die Modulantenne senkrecht über der Platine steht, dürfte der Einfluß praktisch kaum noch nachweisbar sein. Gruß aus Berlin Michael
Habe jetzt auch Module von TME bekommen und getestet. Unterschied ist fast keiner, auch nur ca. 5m Sichtverbindung. Alle Kanäle durchprobiert. Die Oberen scheinbar ein bisschen besser. Bei allen Modulen 10uF und 100nF nachgerüstet. Auf dem Bild links von TME, rechts aus ebay. Vielleicht interessiert's ja jemanden, trotz Negativ-Bewerter-Idiot. Gruss Chregu
Christian M. schrieb: > Unterschied ist fast keiner, auch nur ca. 5m Sichtverbindung. Wenn du mit den 5 Metern deine Maximalreichweite meinst dann ist bei dir am Aufbau bzw der übrigen Schaltung etwas grob faul. Es sei denn du hast bei dir eine bei um die 2.4 GHz herum stark versaute Umwelt. Allerdings fehlen bei dir die Angaben ein paar wichtiger Parameter wie Baudrate, Acknowledge (enabled) und Retries. Und die Schaltung und der Aufbau (den die meisten NRF24- "Meckerer" nicht herzeigen wollen) kann massgeblich über Störpegel und HF-Eigenschaften mitbestimmen. Da hilft dann auch das beste Abblock-C-Duo nicht.
Christian M. schrieb: > Unterschied ist fast keiner, auch nur ca. 5m Sichtverbindung. Wie sieht dein Aufbau aus? Abstand zu anderen Cu-Flächen, Polarisation Sende-/Empfangsantenne, andere 2.4GHz Nutzer (WLAN, BT, ...)?
Sender: Mit einem Arduino Pro Micro auf einem Print (Bild), Antenne schaut über Print raus. Empfänger: In 3D-gedrucktem Gehäuse ausserhalb eines Aluminiumgehäuses (Bild), Antenne schaut über Gehäuse raus. Library ist: https://github.com/TMRh20/RF24 Code Sender:
1 | #include <SPI.h> |
2 | #include <nRF24L01.h> |
3 | #include <RF24.h> |
4 | |
5 | RF24 radio(7, 8); // CE, CSN |
6 | const byte address[6] = "00001"; |
7 | int led = 10; |
8 | int _CSN = 8; |
9 | int _MOSI = 11; |
10 | int _CE = 7; |
11 | int _SCK = 13; |
12 | int _MISO = 12; |
13 | char inputString[10]; |
14 | int zaehler = 0; |
15 | |
16 | void setup() { |
17 | radio.begin(); |
18 | radio.openWritingPipe(address); |
19 | // PALevelcan be one of four levels:
|
20 | // RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH and RF24_PA_MAX
|
21 | radio.setPALevel(RF24_PA_MAX); |
22 | radio.setChannel(127); |
23 | radio.stopListening(); |
24 | Serial.begin(9600); |
25 | Serial1.begin(9600); |
26 | // irgendwo stand, dass besser alle Ausgänge
|
27 | // als solche deklariert werden sollen:
|
28 | pinMode(led, OUTPUT); |
29 | pinMode(_CSN, OUTPUT); |
30 | pinMode(_MOSI, OUTPUT); |
31 | pinMode(_CE, OUTPUT); |
32 | pinMode(_SCK, OUTPUT); |
33 | }
|
34 | |
35 | void loop() { |
36 | |
37 | if (Serial1.available()) { // hat die TTL-Schnittstelle Zeichen? |
38 | digitalWrite(led, HIGH); // LED anzünden |
39 | char inChar = Serial1.read(); // das neue Byte einlesen |
40 | inputString[zaehler] = inChar; // und an die nächste Position im String |
41 | zaehler++; // dec(Position) |
42 | if (inChar == '\n') { // wenn LF (chr$(10) (Enter) |
43 | inputString[zaehler] = '\0'; // NULL zum Beenden des Strings |
44 | Serial1.print(inputString); // an die TTL-Schnittstelle schicken und |
45 | radio.write(&inputString, sizeof(inputString)); |
46 | zaehler = 0; |
47 | }
|
48 | digitalWrite(led, LOW); // LED auslöscchen |
49 | }
|
50 | |
51 | }
|
Code Empfänger:
1 | #include <SPI.h> |
2 | #include <nRF24L01.h> |
3 | #include <RF24.h> |
4 | |
5 | #include <Ethernet.h> |
6 | #include <EthernetUdp.h> |
7 | |
8 | #include <TimerOne.h> |
9 | |
10 | byte mac[] = { 0x00, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; |
11 | IPAddress ip(192, 168, 1, 99); |
12 | |
13 | unsigned int localPort = 23; // local port to listen on |
14 | |
15 | EthernetUDP Udp; |
16 | |
17 | char packetBuffer[24]; //buffer to hold incoming packet, |
18 | |
19 | RF24 radio(9, 53); // CE, CSN |
20 | //CE Chip Enable Activates RX or TX mode
|
21 | //CSN SPI Chip Select
|
22 | |
23 | const byte address[6] = "00001"; |
24 | int EIN = 1; |
25 | int AUS = 0; |
26 | |
27 | //LEDs Frontplatte:
|
28 | int led_gruen_oben = 30; |
29 | int led_gelb_oben = 31; |
30 | int led_gruen_mitte = 32; |
31 | int led_gelb_mitte = 33; |
32 | int led_rot = 34; |
33 | |
34 | //nRF24L01 ist angeschlossen:
|
35 | int _CSN = 53; |
36 | int _MOSI = 51; |
37 | int _CE = 9; |
38 | int _SCK = 52; |
39 | int _MISO = 50; |
40 | int _INT = 8; |
41 | |
42 | int verzug_led_gruen_oben = 0; |
43 | int verzug_led_gelb_oben = 0; |
44 | int verzug_led_gruen_mitte = 0; |
45 | int verzug_led_gelb_mitte = 0; |
46 | |
47 | void setup() { |
48 | Serial.begin(9600); |
49 | Serial2.begin(2400); |
50 | radio.begin(); |
51 | radio.openReadingPipe(0, address); |
52 | radio.setPALevel(RF24_PA_MIN); |
53 | radio.setChannel(127); |
54 | radio.startListening(); |
55 | |
56 | Ethernet.begin(mac,ip); |
57 | Udp.begin(localPort); |
58 | |
59 | pinMode(led_gruen_oben, OUTPUT); |
60 | pinMode(led_gelb_oben, OUTPUT); |
61 | pinMode(led_gruen_mitte, OUTPUT); |
62 | pinMode(led_gelb_mitte, OUTPUT); |
63 | pinMode(led_rot, OUTPUT); |
64 | pinMode(_CSN, OUTPUT); |
65 | pinMode(_MOSI, OUTPUT); |
66 | pinMode(_CE, OUTPUT); |
67 | pinMode(_SCK, OUTPUT); |
68 | pinMode(_INT, INPUT); |
69 | Serial.println("Setup"); |
70 | //digitalWrite(led_rot, EIN);
|
71 | |
72 | Timer1.initialize(10000); |
73 | Timer1.attachInterrupt(verzug); |
74 | }
|
75 | |
76 | void verzug() { |
77 | if (verzug_led_gruen_oben) { |
78 | verzug_led_gruen_oben--; |
79 | digitalWrite(led_gruen_oben, EIN); |
80 | } else { |
81 | digitalWrite(led_gruen_oben, AUS); |
82 | }
|
83 | |
84 | if (verzug_led_gruen_mitte) { |
85 | verzug_led_gruen_mitte--; |
86 | digitalWrite(led_gruen_mitte, EIN); |
87 | } else { |
88 | digitalWrite(led_gruen_mitte, AUS); |
89 | }
|
90 | |
91 | if (verzug_led_gelb_oben) { |
92 | verzug_led_gelb_oben--; |
93 | digitalWrite(led_gelb_oben, EIN); |
94 | } else { |
95 | digitalWrite(led_gelb_oben, AUS); |
96 | }
|
97 | |
98 | if (verzug_led_gelb_mitte) { |
99 | verzug_led_gelb_mitte--; |
100 | digitalWrite(led_gelb_mitte, EIN); |
101 | } else { |
102 | digitalWrite(led_gelb_mitte, AUS); |
103 | }
|
104 | }
|
105 | |
106 | void loop() { |
107 | // nRF24L01 Packete empfangen:
|
108 | if (radio.available()) { |
109 | char text[32] = ""; |
110 | radio.read(&text, sizeof(text)); |
111 | Serial.print("From nRF24L01 Data: "); |
112 | String newString = text; |
113 | newString.trim(); |
114 | newString.toUpperCase(); |
115 | Serial.println(newString); |
116 | if (newString.startsWith("XL") || newString.startsWith("XF")) { |
117 | verzug_led_gruen_oben = 10; |
118 | ausgabe(newString); |
119 | } else { |
120 | verzug_led_gelb_oben = 10; |
121 | }
|
122 | }
|
123 | |
124 | // EthernetShield mit UDP empfangen:
|
125 | int packetSize = Udp.parsePacket(); |
126 | if(Udp.available()) { |
127 | char packetBuffer[24] = ""; |
128 | Udp.read(packetBuffer,24); |
129 | String newString = packetBuffer; |
130 | newString.replace("$", ","); //alle $ durch Komma ersetzen |
131 | newString.trim(); //aller Scheiss entfernen |
132 | newString.toUpperCase(); //und in Grossbuchstaben wandeln |
133 | Serial.print("From IP: "); |
134 | IPAddress remote = Udp.remoteIP(); |
135 | Serial.print(remote); |
136 | Serial.print(" Data: "); |
137 | Serial.println(newString); |
138 | if (newString.startsWith("XL") || newString.startsWith("XF")) { |
139 | verzug_led_gruen_mitte = 10; |
140 | ausgabe(newString); |
141 | } else { |
142 | verzug_led_gelb_mitte = 10; |
143 | }
|
144 | }
|
145 | }
|
146 | |
147 | void ausgabe(String newString) { |
148 | Serial2.println(newString); |
149 | }
|
Gruss Chregu
Christian M. schrieb: > Empfänger: In 3D-gedrucktem Gehäuse ausserhalb eines Aluminiumgehäuses > (Bild), Antenne schaut über Gehäuse raus. Für eine Wellenlänge von 12.5 cm ist das Alu-Gehäuse heftig dicht dran. Das wird das HF-Feld kräftig verbiegen. Probier mal mit einem losen Empfänger.
Christian M. schrieb: > radio.setPALevel(RF24_PA_MIN); PA_MAX > radio.setChannel(127); Darfst du auf 2,527 GHz senden? radio.setDataRate(RF24_250KBPS); radio.setRetries(15,15);
Funker schrieb: > radio.setDataRate(RF24_250KBPS); > radio.setRetries(15,15); NRF Testguy schrieb: > Allerdings fehlen bei dir die Angaben ein paar wichtiger > Parameter wie Baudrate, Acknowledge (enabled) und Retries. Funker schrieb: > Darfst du auf 2,527 GHz senden? Honi soit qui mal y pense. Allerdings könnte es durchaus sein dass manche Chips gerade an der oberen Frequenzgrenze ein bisschen "schwach auf der Brust" sind. Vielleicht sind sie dort auch gar nicht ausgetestet. Christian M. schrieb: > Sender: Mit einem Arduino Pro Micro auf einem Print (Bild), Antenne > schaut über Print raus. > > Empfänger: In 3D-gedrucktem Gehäuse ausserhalb eines Aluminiumgehäuses > (Bild), Antenne schaut über Gehäuse raus. Aus diesen Angaben heraus ist zu bemängeln: - dass es kein Schaltbild gibt - die Stromversorgung ein elementarer Bestandteil der Funktionalität einer Schaltung ist (sie fehlt) - die Schaltungen kein klar definiertes Massepotential haben (Kettenschaltung verschiedener Teilbaugruppen, wobei die Massenverhältnisse am Blechgehäuse überhaupt nicht klar sind) Damit haben solche Schaltungen "Steckbrett-Charakter" mit all seinen "Vorteilen".
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.