Hallo,
ich frage erstmal, ob sich jemand mit dieser Library und den Nordic
RF24L01 Modulen gut auskennt, also wirklich selbst damit etwas gemacht
hat und auch die Auto ACK Funktion dabei benutzt?
Falls ja, formuliere ich mein Problem dann hier ausführlich.
Gruss,
Christian
Super !
--------
Bitte bitte nenne uns dein Problem.
Lass uns, willige Helfer, nicht verhungern...
----------
Übrigens, warum ließt du nicht das Datenblatt?
Da steht drin, dass die default Timeouts für den 256kBit Betrieb nicht
reichen. Da kanns also mit deinen ACK Paketen nix werden.
Also hoch mit den Timeout/Retry
---------
Mindestens 10µF ELko ans Modul löten. Ein kleiner Kerko ist schon drauf.
Ulrich F. schrieb:> Bitte bitte nenne uns dein Problem.> Lass uns, willige Helfer, nicht verhungern...>>Übrigens, warum ließt du nicht das Datenblatt?
Weil mir selbst dann manches noch nicht klar ist, was aber auch an
meinem 80% Englisch liegen kann. Wenn alle Datenblätter verstehen würden
wäre dieses Forum leer, steht ja alles da drin....
Prima :-)
Ich habe eine Funkstrecke derzeit zwischen einem STM32F4 System und
einem Arduino aufgebaut. Funzt soweit, hängt aber manchmal.
Es geht mir um diese Library von "maniacbug"
Was ich will:
1. Arduino sendet Datenpaket Richtung STM32
2. STM32 bestätigt mit Auto-ACK
3. Arduino sendet maximal 10 Mal, 1000uS Delay
Wie kriege ich mit der maniacbug Lib raus, ob das Paket wirklich
empfangen wurde, also ein ACK kam? Da steht nur was von write,
writeStart, WriteBlocking usw.
also
radio.write(&data, sizeof(data),0);
Und nun? Warten? Was abfragen?
Hat da mal jemand Code?
PS: Ab und zu hängt sich der Empfänger auf, behauptet dass Datenpakete
da wären, obwohl keine mehr kommen. Seltsam, da scheint sich ein Flag
nicht zurück zu setzen.
Ulrich F. schrieb:> Dieses Beispiel kennst du schon:> https://github.com/maniacbug/RF24/blob/master/examples/pingpair_pl/pingpair_pl.pde> ?
Here, a payload is set to the transmitter within * the Ack packet of
each transmission.
Nee, aber ich suche ein Beispiel, wo ein "Auto ACK" gesendet wird.m Das
hier ist ja eines, wo eine vordefinierte Paypload als ACK gesendet wird,
quasi so wie eine SPI über die Luft.
Es gibt doch sicher ein ACK, was der Chip allein erzeugt.
Oder sehe ich das was falsch?
Kennst Du diesen Text?
The next register is EN_AA, or the enable auto-ack register. This
register allows you to enable or disable auto-acknowledgements on a
per-pipe basis. If you are at all familiar with TCP, you know what
acknowledgements are. Essentially, the transmitting 24L01 will send a
packet and then switch momentarily for a receiver. If the receiving
24L01 gets the packet, it will send back an acknowledgement. If the
transmitting 24L01 gets the acknowledgement, it changes back to a
transmitter and all is happy. If the transmitting 24L01 doesn’t get the
acknowledgement back in the specified window, it sends the packet again
and waits for an ack. It will do this the number of times all owed
in the SETUP_RETR register for the pipe being used, and then if no
acknowledgement is received it will assert the MAX_RT interrupt. This is
an extremely useful feature and I would recommend using it if possible.
One caveat is that you must have the receive address of pipe 0 be the
same as the transmit address if you have auto-ack enabled on the pipe
you’re sending data to/from (see p.14 of the datasheet).
Ich habe das noch nicht ausprobiert, aber da ich aktuell auch mit diesen
Modulen beschäftigt bin werde ich am Wochenende mal rumspielen :-)
Dieter F. schrieb:> One caveat is that you must have the receive address of pipe 0 be the> same as the transmit address if you have auto-ack enabled on the pipe> you’re sending data to/from (see p.14 of the datasheet).
Hmmmm... bisher habe ich
MYADRESS = 0x0707070707LL
TXADRESS = 0xe7e7e7e7e7LL
da ich nicht genau weiss, wie die Ablage eines 64Bit uint_64 im Speicher
ist, Big Endian, Little Endian etc.
Heisst das, dass diese beiden Adressen gleich sein müssen? Das düngt
mich seltsam, denn bisher waren die bei Sender und Empfänger einfach nur
verdreht.
> Ich habe das noch nicht ausprobiert, aber da ich aktuell auch mit diesen> Modulen beschäftigt bin werde ich am Wochenende mal rumspielen :-)
Dann guck mal, ob bei Dir auch das FIFO Full Bit kleben bleibt. Bei mir
ab und zu :-(
Christian J. schrieb:> Nee, aber ich suche ein Beispiel, wo ein "Auto ACK" gesendet wird.m Das> hier ist ja eines, wo eine vordefinierte Paypload als ACK gesendet wird,> quasi so wie eine SPI über die Luft.
Ach so, du willst kein ACK Payload, sondern überhaupt ein AutoACK.
Da kannst du beruhigt sein, das bekommst du nie zu sehen, das handelt
der Baustein intern ab.
Ulrich F. schrieb:> Ach so, du willst kein ACK Payload, sondern überhaupt ein AutoACK.> Da kannst du beruhigt sein, das bekommst du nie zu sehen, das handelt> der Baustein intern ab.
Und mit welchem Befehlt dieser Library kannst du das abfragen, ob die
Übertragung erfolgreich war?
radio.write(.....), wartet bis fertig
Abfrage, ob Angekommen?
PS:
Für Arduino gibts ja tonnenweise libs aber für den STM32 habe ich bisher
nur eine sehr spartanische Lib gefunden. Oder welche, die nicht mehr
bereitstellen als die Register zu beschreiben, also sehr low level.
Kennt da vielleicht einer so eine Komfort Lib mit einem ähnlichen API
wie für die Arduinos? Umschreiben auf stm32 geht ja nicht so einfach, da
das eine C++ ist und das andere C. Ansonsten aber setzen sie nur auf die
SPI auf.
Christian J. schrieb:> Ulrich F. schrieb:>> Ach so, du willst kein ACK Payload, sondern überhaupt ein AutoACK.>> Da kannst du beruhigt sein, das bekommst du nie zu sehen, das handelt>> der Baustein intern ab.>> Und mit welchem Befehlt dieser Library kannst du das abfragen, ob die> Übertragung erfolgreich war?>> radio.write(.....), wartet bis fertig>> Abfrage, ob Angekommen?
write() hat einen Rückgabewert. ;-)
false = Übertragung fehlerhaft
true = Übertragung ok, ACK empfangen(wenn aktiviert).
Ulrich F. schrieb:> write() hat einen Rückgabewert. ;-)> false = Übertragung fehlerhaft> true = Übertragung ok, ACK empfangen(wenn aktiviert)
Geil! Klappt! Schalte ich Empfänger aus rote Led, wieder ein, grüne
LED.
Das war ja einfach :-)
Christian J. schrieb:> Das war ja einfach :-)
Hast Du Radio.setAutoAck(...) explizit aufgerufen?
Ich schaue mir gerade die Lib ein wenig an - und ohne das kann es
eigentlich nicht funktionieren - es sei denn, das ist per default
eingestellt. Muss nochmal in Datenblatt schauen ...
Dieter F. schrieb:> Christian J. schrieb:>> Das war ja einfach :-)>> Hast Du Radio.setAutoAck(...) explizit aufgerufen?>> Ich schaue mir gerade die Lib ein wenig an - und ohne das kann es> eigentlich nicht funktionieren - es sei denn, das ist per default> eingestellt. Muss nochmal in Datenblatt schauen ...
"Mindestens 10µF ELko ans Modul löten"
Hast du da genaue Informationen dazu. Was heißt denn mindestens?
Die kleinen Module laufen bei mir ganz gut, aber die mit den externen
Antennen machen desöfteren Probleme
Naja....
Erfahrungssache....
Ohne Elko habe ich mit meinen Dingern ernste Probleme. Wenig Reichweite,
viele Abbrüche.
Und mindestens 10µF, weil es dann (bei mir, und meinen Lochrastern)
erheblich stabiler läuft. Mehr scheint nix zu bringen.
Christian J. schrieb:> radio.setAutoAck(1);
Ah, danke, dann brauche ich nicht mehr nachschauen :-)
Ulrich F. schrieb:> Und mindestens 10µF, weil es dann (bei mir, und meinen Lochrastern)> erheblich stabiler läuft. Mehr scheint nix zu bringen.
Ich habe noch einen 100nF parallel, der schadet auch nicht.
Dieter F. schrieb:> Ich habe noch einen 100nF parallel, der schadet auch nicht.
Habe neulich die 500mW Typen bekommen im Metallgehäuse mit externer
Antenne. Die ziehen sich aber gut was weg. Im Auto mal losgefahren, bei
500m war Schluss. Für mehr braucht es dann wohl Cloverleaf Antennen.
maxH schrieb:> Die kleinen Module laufen bei mir ganz gut, aber die mit den externen> Antennen machen desöfteren Probleme
Zufällig dann, wenn die Antennen draufgeschraubt werden? Aber nicht wenn
sie ab sind?
Grrr....
Max .. schrieb:> Ja genau, mit Antenne gehts nicht, ohne schon
Wieso kommt mir das nur so bekannt vor.... auch wenn man sie abwinkelt
geht es aber nicht wenn sie gestreckt sind.
Mist China Clone! Echte Nordic gibt es ja gar nicht mehr.
Ja, bei einem war es so, wenn man hinten bei dem Gelenk seinen Finger
aufgelegt hatte, dann gings auch. Da kann man wahrscheinlich auch nix
reparieren, oder?
Die kleinen Module funktionieren ja prima, nur die mit Verstärker...
Das hatte ich mir auch gedacht, oder vielleicht eine Fehlanpassung. Aber
damit kenne ich mich nicht aus, ob das so sein könnte. Meine erste
Vermutung war ja, dass die Spannungsversorgung nicht gut genug ist.
Hatte das Modul direkt von den 3,3 aus dem Nano versorgt. Mit einem
zusätzlichen Spannungsregler für 3,3V gings dann. Aber eben nicht bei
allen Modulen