Forum: Mikrocontroller und Digitale Elektronik RFM12 eingehende Daten oszilloskopieren


von Gregor B. (gregor54321)


Lesenswert?

Hallo!
Ich habe 2x RFM12 aufgebaut. Der Erste sendet mittels des kleinen 
Programms von Bennedikt K. einen Teststring raus. Mit dem Oszi kann ich 
am Antennenausgang per "FFT" periodisch noch einen kleinen Träger bei 
433 +/- 1MHz erkennen. Laut JTAG scheint auch alles durch zu laufen.

Der Empfänger beinhaltet ebenfalls Bennedikts Testprogramm. Allerdings 
bleibt dieses an der Stelle stehen, an der auf ein High am SDO des 
Moduls gewartet wird.

Hier der Code des Empfängers:
(bps geändert, Ausgangsleitung auf Minimum)
1
int main (void) {
2
  sei();
3
// -------  RFM12 init  -----------------------
4
  rf12_init();          // ein paar Register setzen (z.B. CLK auf 10MHz)
5
  rf12_setfreq(RF12FREQ(433.92));  // Sende/Empfangsfrequenz auf 433,92MHz einstellen
6
  rf12_setbandwidth(4, 1, 4);    // 200kHz Bandbreite, -6dB Verstärkung, DRSSI threshold: -79dBm 
7
  rf12_setbaud(1600);        // 1600 bps
8
  rf12_setpower(7, 6);      // -21db Ausgangangsleistung, 120kHz Frequenzshift
9
10
// --------------------------------------------
11
  for (;;)
12
  {
13
//    send();
14
    for (unsigned char i=0; i<100; i++)
15
      _delay_ms(10);
16
17
    receive();
18
  }
19
}
20
21
void receive(void)
22
{  unsigned char test[32];  
23
  rf12_rxdata(test,32);
24
  // daten verarbeiten
25
}

die rf12_init() sieht bei mir so aus:
(Clk-Ausgang auf 5MHz; AFC ohne Einschränkung; sonst alles identisch)
1
void rf12_init(void)
2
{
3
  RF_DDR=(1<<SDI)|(1<<SCK)|(1<<CS);
4
  RF_PORT=(1<<CS);
5
6
  for (unsigned char i=0; i<10; i++)
7
    _delay_ms(10);      // wait until POR done
8
9
  rf12_trans(0xC0D0);      // 14. AVR CLK: 5MHz
10
  rf12_trans(0x80D7);      //  1. Config Setting: Enable FIFO
11
  rf12_trans(0xC2AB);      //  6. Data Filter: internal
12
  rf12_trans(0xCA81);      //  7. Set FIFO mode
13
  rf12_trans(0xE000);      // 12. disable wakeuptimer
14
  rf12_trans(0xC800);      // 13. disable low duty cycle
15
  rf12_trans(0xC4C7);      //  9. AFC settings: autotuning: no restriction
16
}

An der Stelle mit dem Pfeil passiert nichts mehr. In der Ready-Funktion 
wird auf ein HighPegel am SDO gewartet.
1
void rf12_rxdata(unsigned char *data, unsigned char number)
2
{  unsigned char i;
3
  rf12_trans(0x82C8);      // RX on
4
  rf12_trans(0xCA81);      // set FIFO mode
5
  rf12_trans(0xCA83);      // enable FIFO
6
  for (i=0; i<number; i++)
7
  {
8
-->    rf12_ready();
9
    *data++=rf12_trans(0xB000);
10
  }
11
  rf12_trans(0x8208);      // RX off
12
}

Ist es möglich, am Modul die eintreffenden "Bits" direkt Ausgeben zu 
lassen? Ich weiß noch nicht wo mein Problem ist... Ich kann leider auch 
nicht wirklich messen, ob die korrekten Daten über die Antenne raus 
gehen (per SPI gehen auf jeden Fall die Richtigen rein!). Ich möchte 
gern sehen, was da so durch den Äther geht...
Weiß jemand Rat?

Beste Grüße, Gregor

von Gregor B. (gregor54321)


Lesenswert?

Am RF12-Chip gibts ja wohl einen Pin19, der einen ARSSI bereit stellt, 
der auf dem RFM12-Modul aber wohl nicht heraus geführt ist. Im 
Datenblatt des RFM12S steht jedoch unter Features: "Analog and digital 
signal strengt indicator (ARSSI/DRSSI)". Wo soll der aber raus kommen? 
Übersehe ich etwas?

Was werde ich messen können, wenn ich entsprechend konfiguriert am Pin 
CFil (Kondi-Anschluss für analogen Filter) messe?

von Gregor B. (gregor54321)


Angehängte Dateien:

Lesenswert?

Am CFIL lässt sich dieses Schöne Signal messen...

von Gregor B. (gregor54321)


Angehängte Dateien:

Lesenswert?

Allerdings hab ich ein Interpretationsproblem. Auf dem Oszibild 
dargestellt ist der gesendete Wert 0xFF bei eingestellten 3.2 kbps. Wird 
das Signal codiert gesendet? Übertragen werden bei dieser 
Byte-geschwindigkeit höchstens 130Byte/sec, wären da nicht noch die 
langen Pausen zwischen den Bytes. Hat jemand seine Glaskugel zur Hand?
Anliegendes Bild stellt die Werte 255 bis 247 mit dem Logik Analyser 
dar.

von Gregor B. (gregor54321)


Lesenswert?

Das erste Bit ist sowas wie ein Start-Bit. Ist immer da...
Es haben doch schon so Viele mit dem RFM12 gearbeitet. Weiß mir denn 
keiner einen Tipp zu geben?

von Gregor B. (gregor54321)


Lesenswert?

> Allerdings bleibt dieses an der Stelle stehen, an der auf ein High
> am SDO des Moduls gewartet wird.

Für alle denen gleiches Problem unter kommt: der FSK-Pin muss nach High 
gezogen werden, wenn das interne TxRegister genutzt wird.


ARRSI gibts nicht, DRSSI lässt sich programmieren und anschließend 
auslesen. Gibt nur sinnvolle Werte zurück, während auch tatsächlich ein 
Nutzsignal empfangen wird.

Warum am Empfänger der oben dargestellte Datenmüll an CFIL empfangen 
wurden, hab ich nicht mehr raus bekommen. Nach weiteren Tests wird 
einfach das TxRegister HighByte-First hinter einander weg raus getaktet. 
Wenn die Clock-Recovery-PLL also nach 20x 0xFF durcheinander gekommen 
ist bleibt wohl auch nur Datenmüll.

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.