Forum: Mikrocontroller und Digitale Elektronik nRF24L01+ und PA Kombi gibt kein Acknowledge


von Karl K. (karl2go)


Lesenswert?

Ich habe hier 2 Module nRF24L01+ mit Leiterbahnantenne und 2 Module 
nRF24L01+ PA+LNA mit Verstärker und Stabantenne.

Außerdem habe ich ein AD8318 Modul mit logarithmischen Detektor und 
Stabantenne, welches mir die Funkpakete auf dem Oszi zeigt.

Als Sender hängt ein nRF24 an einem ATmega328, sendet jede Sekunde ein 
Datenpaket. Als Empfänger hängt ein nRF24 an einem Raspberry, der zeigt 
die empfangenen Pakete an. Die Übertragung läuft mit Enhanced 
ShockBurst, AutoPaylen, Acknowledge und AutoRetransmit, CRC ist ein.

Das funktioniert soweit auch wunderbar, wenn Sender und Empfänger die 
einfachen nRF24L01+ sind, inklusive Acknowledge, und ich sehe im Oszi 
die gesendeten und gleich darauf die Acknowledge-Pakete.

Ersetze ich den Empfänger am Raspi durch einen nRF24L01+ PA+LNA, ohne 
irgendwas am Programm zu ändern, werden die Daten auch empfangen, aber 
es wird kein Acknowledge gesendet. Der Sender schickt darauf die Daten 
bis 15mal erneut raus, bevor er mit einem Max Retransmits abbricht. 
Komischerweise werden die Daten aber korrekt empfangen, der richtigen 
Pipe zugeordnet, die Paylen stimmt und der Inhalt stimmt.

Ok, dachte ich dass halt der Sender am nRF24L01+ PA+LNA kaputt ist und 
er nur empfangen kann. Also habe ich nRF24L01+ PA+LNA und nRF24L01+ 
getauscht, so dass jetzt der nRF24L01+ PA+LNA am ATmega hängt und 
sendet. Funktioniert aber auch, die Daten werden korrekt empfangen, 
alles stimmt, am Oszi ist der Signalpegel etwa doppelt so hoch 
(logarithmisch) wie ohne PA... aber jetzt schickt der nRF24L01+ der das 
vorher ganz brav gemacht hat kein Acknowledge zurück. Häh?

Also hab ich an ATmega und Raspberry je ein nRF24L01+ PA+LNA gesteckt 
und... tada, es wird wieder normal übertragen mit Acknowledge.

Also Kurzform:
Sender nRF24L01+ und Empfänger nRF24L01+: Daten werden übertragen, und 
Acknowledge
Sender nRF24L01+ und Empfänger nRF24L01+ PA+LNA: Daten werden 
übertragen, aber kein Acknowledge
Sender nRF24L01+ PA+LNA und Empfänger nRF24L01+: Daten werden 
übertragen, aber kein Acknowledge
Sender nRF24L01+ PA+LNA und Empfänger nRF24L01+ PA+LNA: Daten werden 
übertragen, und Acknowledge

Jetzt weiss ich nicht weiter:
- elektrisch: sollte ok sein, Daten gehen problemlos, 10µF Keramik an 
den Modulen ist nachgerüstet
- Kanal: stimmt, sonst würden keine Daten übertragen
- Adresse: stimmt, Daten landen in der richtigen Pipe
- CRC: bei beiden gleich, sonst würden keine Daten in die Pipe 
geschrieben
- Sendeleistung: Änderung bringt bis auf eine andere Amplitude am Oszi 
keinen Effekt
- Datenrate: stimmt auch, sonst würden ja keine Daten empfangen

Woran kann das liegen, dass gleichartige Module sich ein Acknowledge 
zusenden, gemischte aber nicht. Woher weiss denn ein nRF24L01+ PA+LNA am 
Raspi, dass am ATmega nur ein nRF24L01+ hängt.

Obwohl in Dtland gekauft und nicht über Ali kann ich nicht ausschließen, 
dass die Module keine Fakes sind. Der Aufdruck ist zwar nRF24L01+, 
leicht unterschiedlich, aber überprüfen kann ich das nicht.

von Arduinoquäler (Gast)


Lesenswert?

Karl K. schrieb:
> Woran kann das liegen, dass gleichartige Module sich ein Acknowledge
> zusenden, gemischte aber nicht. Woher weiss denn ein nRF24L01+ PA+LNA am
> Raspi, dass am ATmega nur ein nRF24L01+ hängt.

Ich spekuliere auf zu grossen Frequenzversatz zwischen Modulen
mit und ohne PA/LNA.

Das kann man herauskriegen indem man einen Spektrum-Analysator
oder einen Frequenzzähler nutzt um die genaue Frequenzlage der
Module zu ermitteln.

Siehe auch

Beitrag "Re: NRFL24L01+ - Immer Ärger mit den Paarungen"

wo das Problem sehr ähnlich liegt (meiner "Spekulation" nach).

von Arduinoquäler (Gast)


Lesenswert?

Karl K. schrieb:
> Jetzt weiss ich nicht weiter:

Versuchshalber (um den Verdacht des Frequenzversatzes zu
bestätigen oder zu entkräften) könnte man (nur) auf der
Sendeseite oder (nur) auf der Empfangsseite die Frequenz
um +- 1 bis 2 Frequenzschritte verstimmen.

von Karl K. (karl2go)


Lesenswert?

Arduinoquäler schrieb:
> könnte man (nur) auf der
> Sendeseite oder (nur) auf der Empfangsseite die Frequenz
> um +- 1 bis 2 Frequenzschritte verstimmen.

Wie verstimme ich die Frequenz?

Ich hab mal die Kanäle drüber oder drunter versucht, aber da kommt gar 
nichts an. Mir würde jetzt nur einfallen, mal mit Eisspray auf den Quarz 
zu halten.

Es sind auf beiden Typen echte 16MHz Quarze verbaut, einmal als HC49 und 
einmal als 3mm SMD.

von Arduinoquäler (Gast)


Lesenswert?

Karl K. schrieb:
> Wie verstimme ich die Frequenz?

Nur mit der Kanalnummer wie du schon beschrieben hast.

Quarz mit Temperatur ziehen hilft nicht da gerade Quarze
dafür berüchtigt sind nicht viel Temperaturdrift zu haben.

Am ehesten kann man die Lastkapazitäten der Quarze ändern,
aber das ist Stochern im Nebel solange man keine Frequenz-
messung machen kann.

Wie bereits erwähnt - alles nur meine Spekulation. Vielleicht
haben die Chips aus den unterschiedlichen Chargen ganz
unterschiedliche "Macken".

von Karl K. (karl2go)


Lesenswert?

Naja, der Witz ist ja, dass die Datenübertragung ganz sauber und 
störungsfrei läuft. Selbst mit 32 Byte Payload kommen die Daten 
reproduzierbar an. Keine Ausfälle, keine gekippten Bits. Auch wenn ich 
die Max Retries verringere, kein Problem. Nur das Ackn wird nicht 
zurückgeschickt.

von Arduinoquäler (Gast)


Lesenswert?

Karl K. schrieb:
> Naja, der Witz ist ja, dass die Datenübertragung ganz sauber und
> störungsfrei läuft.

Keine Sorge, ich habe das schon zur Kenntnis genommen ....

Ein letzter Gedanke: Die zusätzlichen Verstärker brauchen eine
ganze Menge Strom um bei 2.4GHz die 20dBm Lesitung zu erzeugen.
Hier sollte man besonders auf eine sehr stabile Versorgung achten.

Ich würde daher den Versorgungen erst einmal misstrauen und
daraus folgernd, testhalber eine hochstabile, separate Versorgung
austesten.

Ein 100uF Elko in der Nähe der NRF24-Module wird sicher kein
Nachteil sein ....

Und wenn es mir um jeden Preis darum ginge den Fehler zu finden
würde ich einmal die Chips untereinander tauschen (auslöten/
einlöten)

von Karl K. (karl2go)


Lesenswert?

Arduinoquäler schrieb:
> Ich würde daher den Versorgungen erst einmal misstrauen und
> daraus folgernd, testhalber eine hochstabile, separate Versorgung
> austesten.

Hab mir die Spannung direkt am Vcc des Power-nRF angesehen: Absolut 
sauber, obwohl er an den 3.3V des Raspi hängt.

Das Verblüffende ist ja, dass der Empfänger - und das sehe ich im Oszi - 
sich nicht mal bemüht das Ackn zu senden, obwohl er gültige Daten 
empfangen, ausgewertet und in die Pipe einsortiert hat. Und mit einem 
anderen Sender dann das Ackn verschickt.

<VT>Als ob der Hersteller da noch eine Kennung eingebaut hat, dass nur 
seine Chips miteinander kommunizieren, und der Fake-Chinese das Gleiche 
für seine Chips gemacht hat.</VT>

von Arduinoquäler (Gast)


Lesenswert?

Karl K. schrieb:
> Als ob der Hersteller da noch eine Kennung eingebaut hat, dass nur
> seine Chips miteinander kommunizieren, und der Fake-Chinese das Gleiche
> für seine Chips gemacht hat.

Ja leider ist das eine plausible Erklärung ....

Vielleicht ist das Handshake-Flag (Auto Ack) irgendwo in einem
anderen Register versteckt worden.

von Karl K. (karl2go)


Lesenswert?

Möglicherweise hab ich hier eine Erklärung gefunden: 
https://forum.mysensors.org/topic/3956/possible-bug-using-authentic-nordic-nrf24l01-module/10

... info that I got from Nordic Tech Support "The re-marked nRF24L01P 
(+) clones are not 100% register compatible. The issue with the 
counterfeit devices is that when they enabled “Dynamic Payload Length” 
(EN_DPL) in the “FEATURE” register, one bit get’s activated in the 
on-air payload (the NO_ACK bit) This bit should be active high 
(according to the Nordic datasheet), but it’s actually implemented the 
other way around. When EN_DPL is activated, the NO_ACK bit get reversed 
in the real nRF-devices. They did such a good job of cloning they cloned 
the datasheet error into the device!!!

Der letzte Satz ist witzig.

Nur: Kann ich das jetzt in der Software kompensieren? Entweder dynamic 
Payload ausschalten - ist blöd - oder auf Ackn verzichten - ist auch 
blöd. Zumal ich mit dem AutoAckn auch Nachrichten an den Sender 
zurückschicke.

Oder nackte Chips kaufen, die Fakes runterschneiden und die Echten 
drauflöten. Wobei hier das Problem ist, woher die Originale nehmen? 
Farnell scheint welche zu haben.

Bei fertigen Modulen scheint man auch bei Kauf im Lande keine Chance zu 
haben Fakes auszuschließen.

von Arduinoquäler (Gast)


Lesenswert?

Ja, interessant  ....

Karl K. schrieb:
> Entweder dynamic Payload ausschalten

Na das wäre billig. Sind ja eh nur 32 Bytes maximal.

von Karl K. (karl2go)


Lesenswert?

Na toll, und wenn dieser Beitrag stimmt sind auf meinen beiden 
Power-nRFs die Echten (eckige Marke aus 4 Streifen) und auf den 5 
einfachen nRFs die Fakes (runde Marke, andere Schrift).

von Karl K. (karl2go)


Lesenswert?

Karl K. schrieb:
> When EN_DPL is activated, the NO_ACK bit get reversed
> in the real nRF-devices.

Das wars: Ich hab auf Static Payload umgestellt und die Originale 
kommunizieren mit den offenbar Fakes. Also Dynamic Payload und AutoAckn 
zusammen gehen nicht.

Dummerweise gilt das auch für die Ackn Payload. Jetzt habe ich wieder 
die berühmten 3 Probleme:

Entweder ich stelle Ackn Payload auch auf Static. Dann kann ich zwar 
eine Payload zurückübertragen, aber es passen immer nur 3 Payloads in 
den Sendebuffer. Wird Ackn für mehr als 3 Pakete benötigt, muss ich also 
den Buffer immer schnell genug wieder füllen. Und es passen nur Payloads 
für 3 Adressen in den Sendebuffer. Mit 6 Geräten arbeiten ist also 
schonmal unmöglich. Ist der Buffer leer, schickt der Empfänger zwar auch 
ein Ackn, aber ohne Payload, und das wird wegen falscher Länge vom 
Sender nicht akzeptiert.

Oder ich stelle Ackn Payload auf Dynamisch - dann funktionieren aber 
wieder die verschiedenen Module nicht zusammen.

Oder ich sende keine Payload mit dem Ackn. Mist.

von Christian S. (roehrenvorheizer)


Lesenswert?

Hallo Karl,

deine Module sind den RFM70 und RFM73 sehr ähnlich. Da hast Du eine echt 
böse Falle entdeckt.

Da Du ja eine Fallunterscheidung benötigst, um je nach Partner den 
passenden Modus beim Sender zu verwenden, wäre es vielleicht  eine Idee, 
die Partner anhand eindeutiger Adressen passend zu den Pipes zu 
unterscheiden und weil ja zur Adresse deren Eigenschaften bekannt sind, 
entsprechend den passenden Sendemodus auszuwählen, damit die Empfänger 
das Paket mit ACK-Anforderung erkennen und ACK zurück senden können.

Übersichtlicher wird die Sache mit mehreren Teilnehmern natürlich nicht.

MfG

von Karl K. (karl2go)


Lesenswert?

Christian S. schrieb:
> Da Du ja eine Fallunterscheidung benötigst, um je nach Partner den
> passenden Modus beim Sender zu verwenden

Genau das ist leider nicht möglich. Das Ackn-Bit im Datenstrom wird in 
Hardware generiert und ausgewertet. Und wenn Payload Länge auf Dynamisch 
gesetzt wird, wird dieses Bit invertiert - oder auch nicht, je nachdem 
ob es ein Fake oder ein Original Nordic ist.

Nun könnte ich mit statischer Payload leben - wenn nicht die 
Ackn-Payload dynamisch wäre, je nachdem ob da was im Sendebuffer steht 
oder nicht.

Per Software was umschalten geht leider nicht. Dann müsste ich den 
ganzen Ackn und Retransmit Kram in Software machen.

Ich schwanke jetzt zwischen zwei Möglichkeiten: Auf die Ackn-Payload zu 
verzichten, obwohl ich die schon gern hätte, oder meine Module auf 
Original Nordic Chips umzulöten.

Allerdings hab ich als einzige Quelle für Original Nordic nRF24L01+ 
Chips Farnell gefunden (was ok wäre), bei allen anderen weiss man wieder 
nicht was man bekommt bzw. gibts gar keine Einzel-Chips.

Und neue Module kaufen - da weiss man auch wieder nicht, was man 
bekommt.

von Christian S. (roehrenvorheizer)


Lesenswert?

"Genau das ist leider nicht möglich. Das Ackn-Bit im Datenstrom wird in 
Hardware generiert und ausgewertet. Und wenn Payload Länge auf Dynamisch 
gesetzt wird, wird dieses Bit invertiert - oder auch nicht, je nachdem 
ob es ein Fake oder ein Original Nordic ist."

Ja, das war verständlich dargelegt und kann für zukünftige Anwendungen 
von Bedeutung sein.

Gut, letztendlich benötigst Du wohl eine ausreichende Menge gleicher 
Module.

Warum nicht mehrere kaufen und selektieren nach diesen zwei Gruppen?

Oder besteht eine Serienproduktion bevor, die dann nicht mehr 
beherrschbar sein wird, je nach Quelle?

Fürs Hobby eine überschaubare Menge ließe sich doch anhäufen, oder?

MfG

: Bearbeitet durch User
von Karl K. (karl2go)


Lesenswert?

Christian S. schrieb:
> Warum nicht mehrere kaufen und selektieren nach diesen zwei Gruppen?

Ich habe zwei Power-Module, die ich auch nutzen möchte, vor allem wegen 
des Eingangsverstärkers, die Sendeleistung kann ich reduzieren. Das sind 
offenbar Originale, und die waren mit Verstärker und Antenne auch etwas 
teurer. Davon brauch ich aber nur 2 für zwei unabhängige Netze.

Ich hab 5 einfache Module, die offenbar Fakes sind. Nun sollen gerade 
die aber mit den Power-Modulen kommunizieren, tun das aber nur 
untereinander. Da müsste ich perspektivisch auch noch welche zukaufen.

Dumm halt, dass man auch bei höherpreisigen einfachen Modulen 
anscheinend nicht davon ausgehen kann, dass da "echte" Nordic Chips 
drauf sind. Also bleibt wieder nur probieren. Dann kann ich die aber nur 
zurückschicken, weil untereinander kommunizieren sollen die ja nicht, 
sondern mit meinen vorhandenen Power-Modulen.

Sonst wärs ja leicht... ;-)

von funkie 7 (Gast)


Lesenswert?

Bei machen nRF24L01+PA hängt der enable Pin des PA am CE Pin des nRF..

von Karl K. (karl2go)


Lesenswert?

So liebe Chinesen. Hab jetzt von Farnell 5 originale nRF24L01+ Chips 
bestellt, die alten Chips runtergefräst, die Platine gesäubert, die 
neuen unterm SteMi aufgelötet, getestet, funktionieren alle - mit meinen 
Power-Modulen. Danke für garnix.

Wo bekommt man Module mit originalen nRF24L01+ Chips? Bei Watterod bin 
ich mir unsicher, Conrad weiss nichtmal ob sie 01 oder 01+ verkaufen, 
bei Farnell gibts nur die Chips, bei Amazon und Ebay gibts alles 
Mögliche, und wenn man die Händler fragt, bekommt man nur: Jaja, 
gehtgeht, kein Problem.

von Andreas (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Karl,
Hast du inzwischen Module mit originalen nRFs gefunden? Ich habe einige 
mit den 1808AHs bei mir (siehe im Bild unten), alle haben den 2401C 
Verstärker-Chip und die Reichweite sowie Signalstabilität ist grottig... 
trau mir allerdings das umlöten nicht wirklich zu.

von Karl K. (karl2go)


Lesenswert?

Nö. Die letzten die ich bestellt habe waren wieder nicht kombatibel, die 
Nordic Chips von Farnell sind schon da zum umlöten.

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.