Forum: Mikrocontroller und Digitale Elektronik RFM69 868 MHz Funkmodul empfängt korrupte Daten


von QuantumPeak (Gast)


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!

von Conny G. (conny_g)


Lesenswert?

Benutzt Du die verlinkte Lib oder hast Du selbst was gemacht?
Schickst Du die richtige Empfängeradresse mit?
NetworkID passt auch?

von Michael R. (mr-action)


Lesenswert?

Naja, wenn er es so wie in der Lib nutzt, ist die Empfängeradresse egal, 
weil die da in Software geprüft wird und die Filter vom RFM69 nicht 
genutzt werden...

Nur wenn er es selbst umgesetzt hat ist die wichtigste Frage: Enthält 
das erste Byte deiner Nachricht die Länge der Nachricht?

von QuantumPeak (Gast)


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.

von Conny G. (conny_g)


Lesenswert?

QuantumPeak schrieb:
> 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:

Schön! Genau deshalb bohrte ich da rein, weil ich mich vage erinnerte, 
dass ich da auch anfangs Schwierigkeiten hatte.

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.