RFM69 - RSSI Messung

Gast #4762875
Lesenswert?
• ▲
▼
Hallo zusammen,

ich habe mal eine Frage zu den RFM69 Modulen bezüglich der RSSI Messung.
Wie kann man prinzipiell den RSSI Wert während einer Datenübertragung
auslesen? Ich kann zwar den Echtzeitwert abfragen. Aber um ein Indiz für
die Empfangsstärke zu erhalten ist das nicht wirklich brauchbar. Kann 
der Wert, bei dem ein RSSI Interrupt ausgelöst wird im Modul 
zwischengespeichert werden und nach erfolgreichem Auslesen des FIFO 
nachträglich abgefragt werden?

Vielen Dank für eure Antworten, ihr würdet mir sehr weiterhelfen.
Hannes
Gast #4762896
Lesenswert?
• ▲
▼
Ich schätze dann mache ich irgendetwas falsch. Der RSSI Wert wird nach 
diesem Aufruf einfach auf ein LCD Display geschrieben. Ich erhalte 
unmittelbar nach dem Auslesen des FIFOs Werte zwischen -110 - -115dB. 
Das sind dann schon die halbierten Werte. Dafür, dass die Module direkt 
nebeneinander sind, erscheint mir das einfach zu viel.
Steckt in meiner Ausleseroutine vielleicht ein Fehler?

uint8_t RSSI_value;
uint8_t Verzoegerung = 20;  // Timeout nach 20ms

//******** RSSI Wert abfragen ******
  RFM69_spi(0x2301 | 0x8000);     //RSSI Messung auslösen

  while(RFM69_spi(0x2300) & 0x02 && Verzoegerung != 0)
              // RSSI beendet wenn 1 - solange warten
  {
    _delay_ms(1);
    Verzoegerung--;
  }

  RSSI_value = RFM69_spi(0x2400);   //RSSI Wert auslesen
Gast #4769870
Lesenswert?
• ▲
▼
Ich benutze den RFM69CW mit einem MSP430G2553. Sobald ich per Interrupt 
eine korrekte Sync-Adresse gemeldet bekomme, sende ich das Kommando zum 
Starten der RSSI-Messung. Dann warte ich auf das Ende der Messung und 
lese den Wert aus.
1
interrupt (PORT2_VECTOR) wakeup port2_interrupt(void)
2
{
3
  unsigned char rssi;
4

5
  P2IFG = 0;
6
  eint();
7
  // Während des Empfangs RSSI aufnehmen
8
  RFM69_WRITE(RFM_REGRSSICONFIG, RFM_RSSICONFIG_START);
9
  while ((RFM69_READ(RFM_REGRSSICONFIG) & RFM_RSSICONFIG_DONE) == 0) {
10
  }
11
  rssi = RFM69_READ(RFM_REGRSSIVALUE);
12
  // Warten bis Nachricht vollständig empfangen wurde
13
  while ((RFM69_READ(RFM_REGIRQFLAGS2) & RFM_IRQFLAGS2_PAYLOADREADY) != RFM_IRQFLAGS2_PAYLOADREADY) {
14
  }
15
.....

Das Ergebnis passt sehr gut zur Erwartung bei unterschiedlichen 
Entfernungen zwischen Sender und Empfänger. Auch die optimale 
Antennenlänge läßt sich gut ermitteln.
Gast #4790025
Lesenswert?
• ▲
▼
Hol doch einfach direkt vor dem Auslesen des FIFO's den Wert aus dem 
Register, aber ohne Triggerung einer erneuten Messung. Das sollte 
nämlich der RFM bei Empfang der Preambel selbst schon gemacht haben, um 
AGC und AFC korrekt einstellen zu können.

Eine RSSI-Triggerung nach Auslesen des FIFO's ist zu spät. Da ist das 
Paket schon durch und du misst nur den RSSI auf Noise-Level.

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.