RFM69 868 MHz Funkmodul empfängt korrupte Daten

Gast #5343946
Lesenswert?

Hallo zusammen,

ich bin jetzt schon seit mehreren Tagen dabei, zu versuchen, eine 
Funkstrecke zwischen zwei RFM69CW-Funkmodulen (868MHz Variante) 
aufzubauen.
Der Sender scheint einwandfrei zu funktionieren, wohingegen der 
Empfänger zwar über entsprechende Konfiguration des DIO0-Pins anzeigt, 
dass der RSSI-Wert einen festgelegten Treshold (-86 dB) beim Senden 
überschreitet, aber PayloadReady im IRQFlags2 (0x28) Register trotzdem 
nicht setzt.

Beide Module werden exakt gleichermaßen über folgende Konfiguration 
initialisiert:

https://github.com/LowPowerLab/RFM69/blob/dcda86fb903c06bb09d2fea0c3612bed2d18ddc4/RFM69.cpp#L46-L82

Die Daten werden über SPI auch korrekt übertragen, wie ich mit einem 
Logik-Analyzer überprüft habe.

Beim Empfänger-RFM69 kann ich allerdings kein PayloadReady-Interrupt 
über DIO0 oder per Polling im IRQFlags2-Register(0x28) feststellen, was 
für mich unerklärlich ist.

Wenn ich CRC deaktiviere (RF_PACKET1_CRCAUTOCLEAR_OFF in 
REG_PACKETCONFIG1 setzen) und den RSSI-Wert auf -114dB (Standard) setze, 
erhalte ich unregelmäßig und unabhängig vom Sender manchmal ein 
PayloadReady-Interrupt. Im FIFO sind dann allerdings irgendwelche 
zufälligen Daten zu finden, die nichts mit dem zu tun haben, was ich 
gesendet habe.

Um letztendlich beim Empfänger PayloadReady feststellen zu können, frage 
ich koninuierlich das IRQFlags2-Register ab und lese dann den FIFO aus, 
wenn das PayloadReady-Bit gesetzt ist.

Als Antenne verwende ich einen lambda/4 Kupferdraht.

Ich würde mich sehr über jegliche Anregungen freuen, was ich noch 
versuchen könnte, da mir langsam die Ideen ausgehen.
Sehr gerne kann ich alle möglichen weiteren Informationen liefern, die 
zur Lösung des Problems beitragen könnten!
Gast #5345028
Lesenswert?

Danke für die Tipps!

Ich habe aus verschiedenen Gründen selbst ein Programm geschrieben. Die 
Länge der Nachricht stimmt auch. Eure Vorschläge haben mich aber auf 
eine weitere Idee gebracht, die sich als Lösung herausstellte:

Das Library versendet ja eigentlich nach dem Length-Byte mindestens mal 
4 Bytes, nämlich EmpfängerID, SenderID, ein Steuerbyte und dann 
mindestens ein frei wählbares Byte. Ich habe mir gedacht, ich brauche 
dieses Steuerbyte nicht, und habe es aus meiner Implementierung 
weggelassen. Da im Datenblatt steht, man benötige nach den Adressen 
mindestens nur ein Byte, habe ich auch zum Testen nur erst einmal 1 Byte 
Nutzlast nach den Adressen verschickt.

Wie es aussieht, muss man allerdings mindestens 2 Bytes versenden! Dann 
klappt alles einwandfrei, inklusive CRC!

Vielen Dank nochmal für die Hilfe. Ich hoffe, ich kann hiermit auch noch 
Weiteren helfen, bei denen das gleiche Problem auftritt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren