Hallo zusammen,
Auf der Suche nach einem Funkmodul, welches ASK, bzw OOK beherrscht bin
ich auf das RFM23 bzw RFM22 gestoßen. Bisher hatte ich nur mit RF Link
Funkmodulen wie diesen hier zu tun:
http://www.watterott.com/de/RF-Link-2400bps-Empfaenger-434MHz
Nachteil an diesen einfachen Modulen ist, dass Empfänger und Sender
getrennt sind. Dadurch bräuchte ich praktisch 2 Module auf meiner
Platine, das ganze ist also uninteressant. Deshalb jetzt auch das RFM23.
Das RFM23 soll nun aber so wie die RF-Link Module arbeiten (Empfänger +
Sender), sprich Daten an einem IO Pin direkt senden und empfangene Daten
ohne weitere Verarbeitung oder sonst was an einem IO Pin ausgeben. Ziel
ist es, verschiedene 434Mhz Systeme wie Funksteckdosen (interttechno,
HomeEasy, usw) abzuhören und mitzusenden.
Das Datenblatt habe ich gelesen, aber jetzt kommt bei mir die Frage auf,
ob das RFM23 das überhaupt kann, denn im Datenblatt
(http://www.hoperf.com/upload/rf/RFM22B_23B.pdf) auf Seite 30 (Kapitel
4.2.2 Direct Mode) steht folgendes: " In RX direct mode, the chip must
still aquire bit timing during the Preamble, and thus the preamble
detection threshold (SPI Register 35h) must still be programmed"
Das Problem ist, dass die Daten willkürlich sein können und es keine
"Preamble" gibt.
Stellt das für meinen speziellen Fall ein Problem dar, oder habe ich da
was übersehen? Leider hänge ich gerade an dieser Stelle fest, und komme
nicht weiter. Kennt sich jemand mit dem Modul aus und kann mir einen
Tipp geben?
Grüße,
Daniel /jtag
Hi,
noch ein kleiner Nachtrag:
Auch auf Seite 30, Kapitel 4.2.2.2., steht was von "Direct Asynchronous
Mode", was ja eigentlich genau dem entspricht was ich haben will,
zumindest sendeseitig. Leider steht hier nur was über Senden, aber gibt
es diesen Modus auch beim Empfangen? Das Datenblatt ist an der Stelle zu
mager für mich.
Was sagt ihr dazu?
Grüße,
jtag
Hallo zusammen,
hat keiner einen Vorschlag? Leider finde ich zu genau dem Betriebsmodus
keine Projekte oder Zusatzinformationen, weil jeder seine Funkmodule mit
FSK oder GFSK betreibt.
Da das Ganze wirklich sehr dringend ist, muss ich hier nochmal
nachbohren ;)
Grüße,
jtag
Glaube du musst das Modul dann im Raw Data mode betreiben.
"raw data mode from AN463" von Silicon Labs
GPIO_1 und GPIO_2 liefern dann die Daten im Raw mode (clk and data)
Alles weitere Preampleerkennung, Filterung ... bleibt dann deiner
Software überlassen.
Ich habe damit auch schon mal rum-experimentiert, weil ich die gleiche
Idee hatte. Es hat sich aber als nicht ganz so einfach erwiesen die
Funksteckdosen, Temperatursensoren, Funkrollos ... mit RFM22B zu
belauschen.
Ich weiß nicht mehr genau wo ich stecken geblieben bin.
Wenn du willst kann ich mal nachschauen.
Vielleicht kommen wir ja gemeinsam weiter ...
Hallo Carsten,
schön, dass sich noch jemand meldet, ich hatte die Hoffnung schon
aufgegeben...
Der Tipp mit der Appnote ist super, danke vielmals.
Leider funktioniert es auch mit appnote überhaupt nicht, irgendwas zu
empfangen. Zwar kommt am RX_DATA-out was raus, aber das ist nur
Rauschen, auch bei sehr starken Signalen (die sieht man nur minimal im
Rauschmuster).
Hier mal mein Code, der im grobem der Beispiel-initialisierung aus der
Appnote entspricht:
1
voidrfm_init3()
2
{
3
spiD_init(SPI_MASTER,SPI_PRESCALER_DIV64_gc,0);
4
5
PORTD_DIRSET=rfm_TX_ANT|rfm_RX_ANT;
6
//PORTE_DIRSET = rfm_GPIO0; //GPIO0-Pin Ausgang
7
//PORTE_OUTCLR =
8
9
/*
10
Set preamble detection threshold to maximum.
11
Enable all Header comparisons.
12
Enable multi packet mode.
13
Enable CRC check.
14
*/
15
16
//read interrupt status registers to clear the interrupt flags and release NIRQ pin
17
rfm_read(0x03);
18
rfm_read(0x04);
19
//SW reset
20
rfm_write(0x07,0x80);
21
//wait for chip ready interrupt from the radio (while the nIRQ pin is high)
22
while(PORTE_IN&rfm_NIRQ);
23
//read interrupt status registers to clear the interrupt flags and release NIRQ pin
rfm_write(0x71,0b01000001);//Asynchronous Mode, direct Mode (GPIO), OOK
36
// set to avoid false packet detection
37
rfm_write(0x30,0x84);
38
rfm_write(0x32,0x0F);
39
rfm_write(0x33,0x77);
40
rfm_write(0x08,0x10);
41
42
43
// packet handler settings
44
rfm_write(0x35,0xF8);
45
rfm_write(0x71,0x63);
46
// set GPIOs
47
rfm_write(0x0b,0b11010100);//GPIO0: full driving capability, no pullup, RX_DATA_out
48
rfm_write(0x0c,0xCF);//GPIO1: full driving capability, no pullup, TX/RX Data CLK
49
rfm_write(0x51,0x36);
50
// Set Non default registers
51
rfm_write(0x69,0x60);
52
53
54
// Turn Receiver ON
55
rfm_write(0x07,0x04);
56
57
58
}
Leider werden auch hier wieder einige Register gesetzt, die nirgends
beschrieben sind, auch nicht in den AN440 Register Settings.
Wie weit bist du gekommen mit deinem Versuch? Hast du mehr als nur
Rauschen empfangen? Wäre super, wenn du nochmal nachschauen könntest.
Kannst du dann vllt deine Initialisierung posten?
danke und lG,
Philip
Die Daten, die in diesem Modus geliefert werden sind Rohdaten, wie der
Name schon sagt. Also ich glaube die sind oversampled und ungefiltert.
D.h. der Bitstrom muss noch entsprechend nachbehandelt werden.
Bei mir im Quelltext steht was von deglitching with median filtering und
retiming. Den Madian Filter habe ich noch verstanden und hinbekommen
aber bin dann leider am retiming gescheitert (naja nicht wirklich
gescheitert - nur gestoppt;-), weil ich nicht verstanden habe, wie viel
Samples per Bit nun eigentlich da sind.
Außerdem hatte ich keine konstante Quelle mit bekanntem Signal, was die
Sache nicht vereinfacht. Was benutzt du als Sendequelle?
Hast du gefiltert und „geretimed“? Oder hast du das anders verstanden?
Ich hänge hier meine Initialisierung an.
Bedenke aber die ist für RFM22B.
Sollte aber nicht viel anders sein.
Welche Register sind denn unbekannt?
Gruß Carsten
Hallo Carsten,
das RFM22B habe ich auch in Betrieb, ist ja bis auf die Sendeleistung
und der manuellen Antennenumschaltung gleich dem RFM23B.
Also auch wenn ich die "Empfehlungen" aus AN415 einbaue, bekomme ich
wieder nur Rauschen... Auch mit Filterung lässt sich da nichts machen,
das sieht echt nur nach weißem Rauschen aus, das Nutzsignal kann man
eigentlich nicht erkennen. Selbst wenn das jetzt so stimmt, würde das
den Prozessor zu stark auslasten...aber ich bin mir sicher, dass
irgendwas falsch ist. So schlecht kann der Chip nicht sein...mit einer
Filterung habe ich es deshalb nicht probiert.
Als Sendequelle nehme ich einen Funkschalter von Homeeasy (HE307EU) der
bekannte Daten schickt.
Wie sehen die Daten aus, die du mit deinem Code bekommst, auch vor der
Filterung? Mit einem RFLink Empfänger kann ich die Daten auf Anhieb
auslesen. Da klappt alles bestens, leider gibt es diese Dinger nicht als
Transceiver sondern der Empfänger ist vom Sender her immer getrennt.
Also das Register 0x51 ( rfm_write(0x51, 0x36);) ist unbekannt, bzw als
reserved im AN440 notiert und nicht weiter ausgeführt. Was macht das RFM
hier?
Grüße,
Philip