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

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