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 | void rfm_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
|
24 | rfm_read(0x03); |
25 | rfm_read(0x04); |
26 | //set the physical parameters
|
27 | //set Crystal Oscillator Load Capacitance register
|
28 | rfm_write(0x09, 0x7f); |
29 | //set the center frequency 430-440MHz
|
30 | rfm_write(0x75, 0x53); |
31 | rfm_setfreq(RFMFREQ(433.92)); |
32 | // packet handler settings
|
33 | rfm_write(0x35, 0xF8); |
34 | //rfm_write(0x71, 0x63);
|
35 | 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
Hallo zusammen, ich habe endlich das passende Funkmodul gefunden! Das RFM kommt jetzt in den Müll. http://www.soselectronic.de/?str=371&artnum=65101 Grüße
Hi, I finally got the HopeRF23b to receive 434 OOK in Raw mode. Config below. Hope this helps someone. Hallo, Ich habe endlich die HopeRF23b auf 434 OOK im Raw-Modus zu empfangen. Config unten. Hoffe, dass dies jemand hilft. void SPIHopeRF1Init(char power) { volatile BYTE Dummy; SPIRF1_SDN_IO = 1; SPIRF1_SDN_TRIS=0; // make sure SDN is low = power on. SPIRF1_SDN_IO = 1; DelayMs(200); SPIRF1_SDN_IO = 0; DelayMs(50); SPIRF1_CS_IO = 1; SPIRF1_CS_TRIS = 0; // Drive SPI Flash chip select pin SPIFLASH_SCK_TRIS = 0; // Set SCK pin as an output SPIFLASH_SDI_TRIS = 1; // Make sure SDI pin is an input SPIFLASH_SDO_TRIS = 0; // Set SDO pin as an output SPIHopeRF1Write(0x06, 0x00); // interrupt disable SPIHopeRF1Write(0x07, 0x01); // to ready mode DelayMs(50); //read interrupt status registers to clear // the interrupt flags and release NIRQ pin Dummy = SPIHopeRF1Read(0x03); Dummy = SPIHopeRF1Read(0x04); // Set crystal osc load capacitance SPIHopeRF1Write(0x09, 0x7F); // cap = 12.5pf // Set frequency to 434 SPIHopeRF1Write(0x75, 0x53); SPIHopeRF1Write(0x76, 0x62); SPIHopeRF1Write(0x77, 0x00); // packet handler SPIHopeRF1Write(0x35, 0xF8); SPIHopeRF1Write(0x71, 0x63); // set to avoid false packet detection SPIHopeRF1Write(0x30, 0x84); SPIHopeRF1Write(0x32, 0x0F); SPIHopeRF1Write(0x33, 0x77); SPIHopeRF1Write(0x08, 0x10); // packet handler settings SPIHopeRF1Write(0x35, 0xF8); SPIHopeRF1Write(0x71, 0x63); // set GPIOs SPIHopeRF1Write(0x0b, 0xD4); SPIHopeRF1Write(0x0c, 0xCF); SPIHopeRF1Write(0x51, 0x36); // Set Non default registers SPIHopeRF1Write(0x69, 0x60); // Modem Parameters SPIHopeRF1Write(0x1F, 0x00); SPIHopeRF1Write(0x1C, 0xC7); // 412.1 KHz BW SPIHopeRF1Write(0x20, 0x7D); SPIHopeRF1Write(0x21, 0x63); SPIHopeRF1Write(0x22, 0x86); SPIHopeRF1Write(0x23, 0x25); SPIHopeRF1Write(0x24, 0x01); SPIHopeRF1Write(0x25, 0x08); SPIHopeRF1Write(0x2C, 0x18); SPIHopeRF1Write(0x2D, 0xD0); SPIHopeRF1Write(0x2E, 0x2E); SPIHopeRF1Write(0x71, 0x69); SPIHopeRF1Write(0x70, 0x0E); // Turn Receiver ON SPIHopeRF1Write(0x07, 0x04);
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.