Fragen zum Senden mit RFM70

Gast #2919491
Lesenswert?
• ▲
▼
Hallo,
ich habe da mal ein eine Frage bezuglich der SPI-Commands, mir ist der
unterschied/nutzen dieser drei Commands nicht ganz klar, vielleicht
könnt ihr licht in die Sache bringen?


CMD: W_TX_PAYLOAD_NO ACK
bedeutet doch:
Schreibe zu sendene Daten in Tx-Sendespeicher (FIFO), OHNE eine ACK
(Empfangsbestätigung)anforderung vom Empfänger.

CMD: W_TX_PAYLOAD
bedeutet doch:
Schreibe zu sendene Daten in Tx-Sendespeicher (FIFO) und hänge eine ACK
(Empfangsbestätigung)anforderung vom Empfänger an.

CMD: W_ACK_PAYLOAD
bedeutet doch:
Schreibe zu sendene Daten für eine ACK-Antwort, die versendet wird wenn
ein Datenpacket mit ACK-Bestätigung empfangen wird, zusätzlich kann die
Sende-PIPE mit ausgewählt werden.

Habe ich die Sache soweit richtig verstanden?

Denn dauerbesuchern hier ist sicher aufgefallen das ich diesen Post 
schon bei den Funkern gepostet habe, da aber die letzten Fragen auch 
schon nicht mehr beantwortet worden sind und der Post auch schon 
ziemlich lang ist habe ich mich entschieden hier noch einmal zu fragen, 
also bitte nicht böse sein :)

gruß
Matthias
Gast #2919500
Lesenswert?
• ▲
▼
Der Befehl W_ACK_PAYLOAD ist dafür da, eine ACK-Nachricht zu 
verschicken. Das brauchst Du, wenn Du Auto-ACK deaktiviert hast und 
selbst entscheidest, ob Du ein Paket bestätigen willst oder nicht.

Die Pipe, die Du angibst, ist nicht die Sende-Pipe (davon gibt es ja nur 
eine), sondern die Pipe, auf der das Paket reinkam, dessen Empfang Du 
bestätigen willst. Zusätzlich zum ACK (also der Information "Ich habe 
das Paket erhalten, du brauchst es nicht nochmal probieren") kannst Du 
halt auch gleich noch andere Daten mitsenden.
Gast #2919525
Lesenswert?
• ▲
▼
xfr schrieb:
> Der Befehl W_ACK_PAYLOAD ist dafür da, eine ACK-Nachricht zu
> verschicken. Das brauchst Du, wenn Du Auto-ACK deaktiviert hast und
> selbst entscheidest, ob Du ein Paket bestätigen willst oder nicht.

Habe gerade nochmal ins Datenblatt reingeschaut. Bin mir jetzt doch 
nicht so sicher, ob das stimmt. In der Beschreibung des Befehls steht ja 
"Maximum three ACK packet payloads can be pending". Das würde eher für 
Deine Erklärung sprechen, dass man damit nur die Payload eines 
ACK-Pakets setzen kann (sofern es eine haben soll), aber nicht das 
eigentliche Senden des ACK-Pakets anstößt.

Hab den Befehl bisher noch nicht genutzt, daher sorry, falls ich 
Blödsinn erzählt habe. Werde es bei Gelegenheit mal ausprobieren.
Gast #2919748
Lesenswert?
• ▲
▼
Ich habe es gerade ausprobiert. Es schon so, wie ich es zuerst gesagt 
habe:

Mit W_ACK_PAYLOAD sendet man selber ein ACK-Paket, das auch noch Payload 
enthält. Wenn man beim Empfänger Auto-ACK deaktiviert und beim Sender 
aktiviert, kann der Empfänger manuell entscheiden, ob er ein empfangenes 
Paket bestätigen möchte oder nicht. Das ACK-Paket muss allerdings 
mindestens ein Byte Payload enthalten, ein leeres Paket senden geht 
anscheinend nicht.

Das ACK-Paket mit Payload wird wie ein normales Paket empfangen, man 
kann es allerdings nicht nochmal ACKen. Es entsteht also keine 
Endlosschleife, wenn man jedes empfangene Paket manuell bestätigt.
Gast #2920640
Lesenswert?
• ▲
▼
Hallo xfr,
kannst du mir noch mal ein wenig helfen zum Thema W_ACK_PAYLOAD?
Ich bekomme einfach kein eigenes ACK am Sender :(

wie muss der Empfänger richtig eingestellt werden?

muss EN_AA=0   auto ACK aus?

Über W_ACK_Payload ein ACK packet schreiben, vor empfang von sender oder 
nach empfang des senders?

wie muss der Sender richtig eingestellt werden?
muss EN_AA=0   auto ACK aus? oder kann hier die ACK automatik 
eingeschaltet bleiben?

Senden über W_TX_PAYLOAD (also mit ACK anforderung), oder?

wäre dir dankbar wenn du meine versuchsketten etwas abkürzen könntest.

gruß
Matthias
Gast #2920670
Lesenswert?
• ▲
▼
Bei mir hat es so funktioniert:

- Die FEATURE-Befehle mit ACTIVATE aktivieren.
- Im FEATURE-Register EN_DPL, EN_ACK_PAY und EN_DYN_ACK setzen (bei 
Sender und Empfänger).
- Beim Sender EN_AA auf Pipe 0 einschalten.
- Beim Empfänger EN_AA auf der Empfangspipe ausschalten.

- Beim Sender mit W_TX_PAYLOAD senden.
- Beim Empfänger warten, bis ein Paket eintrifft (RX FIFO not empty).
- Paket lesen.
- Mit W_ACK_PAYLOAD das ACK-Paket (mind. 1 Byte Payload) senden. Dabei 
die Pipe angeben, auf der Paket reinkam (RX_P_NO im STATUS-Register).

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.