Hallo alle zusammen,
meine RFM69 Module sind so konfiguriert das sie bei einem RX timeout
einen Interrupt werfen.
Leider funktioniert das nicht so wirklich bei allem meinen Platinen.
Die aber baugleich sind
Es scheint so das mache RFM69 extrem viele timeouts kriegen und mein
AVR nur doch am Interrupt ab arbeiten ist.
Kann das jemand bestätigen ?
1
2
ISR(INT0_vect)
3
{
4
cli();
5
uint8_trfm_Mode_temp=rfm_Mode;//kopieren wegen votaile
Das cli() ist überflüssig, das sei() sogar potenziell gefährlich. Beides
wird bereits von der Hardware erledigt.
1
EIMSK|=(0<<INT0);//stoppe INt0
2
EIMSK|=(0<<INT2);//stoppe INt2
Nein, die beiden Zeilen stoppen nichts. Die machen rein gar nichts.
Und wenn du das dann korrigiert hast: das Ausschalten der Interrupts
verhindert nicht, dass die Interrupt-Flags bei entsprechender Aktivität
an den Pins gesetzt werden. Also musst du vor dem Wiedereinschalten
diese Flags löschen.
Timeouts treten häufig auf, wenn die RSSI-Schwelle auf eine zu niedrige
Leistung eingestellt ist, weil dann schon das Umgebungsrauschen den Rx
glauben machen kann, dass er eine Präambel empfängt.
Je nach Umfeld sollte man beim Empfänger also den Wert im Register 0x29
(RSSI-Threshold) schrittweise verringern (0xFF entspricht maximaler
Empfindlichkeit), bis die Anzahl an Rx-Timeouts bei ausgeschalteten
Transmittern minimal ist. Hatte bei mir schon Fälle, in denen es mit
-110 dBm als Schwellwert gut funktioniert hat, woanders musste ich auf
-90 dBm gehen, um nicht ständig den Rx getriggert zu bekommen.
Hallo Felix,
>Timeouts treten häufig auf, wenn die RSSI-Schwelle auf eine zu niedrige>Leistung eingestellt ist, weil dann schon das Umgebungsrauschen den Rx>glauben machen kann, dass er eine Präambel empfängt.
beim RFM12 wartet der Empfänger bis das Synchron-Pattern empfangen wird.
Erst dann würde ich den Timeout-Timer starten. Es ist sehr
unwahrscheinlich
das das Umgebungsrauschen auch noch das Synchron-Pattern simuliert. Wenn
schon beim Empfang von jeder Preamble das Timeout gesetzt wird ist ja
klar das dann nur noch Timeouts erzeugt werden. Leider kenne ich den
RFM69 nicht da kann es ja anders sein. Oder?
Gruß Torsten
Hallo Torsten,
es geht schon früher los: Um das Synchronpattern (und die anschließende
Nachricht) empfangen zu können, muss der Empfänger einige Vorarbeit
leisten, nämlich sich auf den Pegel (AGC), die Trägerfrequenz (AFC) und
die Bitrate einstellen. Deswegen schickt man diese 0xAA- oder
0x55-Präambeln vor dem eigentlichen Syncword.
Obwohl ich lange mit dem RFM12 gearbeitet habe, weiß ich nicht, wie dort
sichergestellt wurde, dass falsche Präambeldetektionen ausgeschlossen
wurden (interner Timeout?), dort hatte ich das Problem auch nie.
Beim RFM69 ist es so, dass man einstellen kann, wie hoch der Pegel im
Bereich der gewählten Frequenz sein muss, damit überhaupt eine Präambel
erkannt wird (RSSI-Threshold) und ob und nach welcher Zeit der Empfänger
einen Timeout signalisieren und neu starten soll, falls nach dem
Erkennen eines ausreichenden Pegels für eine kein gültiges Paket mit
Syncword, Payload und passendem CRC empfangen wurde.
Ansonsten ist es mir schon öfter passiert, dass das RFM69 einen Träger
zu erkennen glaubt und seine Empfangsfrequenz verzieht, so dass es für
"echte" Pakete taub wird.
Gruß
Felix
>Obwohl ich lange mit dem RFM12 gearbeitet habe, weiß ich nicht, wie dort>sichergestellt wurde, dass falsche Präambeldetektionen ausgeschlossen>wurden (interner Timeout?), dort hatte ich das Problem auch nie.
Hallo Felix,
einen internen Timeout gibt es beim RFM12 nicht. Man muss das selber
Programmieren. Am besten überwacht man den VDI(Valid Data Indicator)
der wiederum von den drei Signalen
-DRSSI(Digital Received Signal Strength Indication)
-DQD (Data Quality Detector)
-CR_LOCK (Clock Recovery Locked)
beeinflusst wird. Dieser wird bei mir von einen PinChange-Interrupt
überwacht, welcher den Empfang bei abfallenden VDI unterbricht.
Der Chip sollte so eingestellt werden das die emfpangenen
Daten erst nach dem Synchron-Pattern in den Puffer geschrieben werden.
Falsche Preamblen werden also ignoriert.
Gruß Torsten
Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
Groß- und Kleinschreibung verwenden
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang